Willkommen Gast, Anmelden

Active Extension für FoxPro Suche im wiki »

Wenn doch einmal Fehler passieren sollten

Es ist zwar sehr unwahrscheinlich, dass VFP-Programmierer Fehler machen, aber ab und an soll so etwas bereits vorgekommen sein... :-)
Deshalb ist auch eine umfangreiche Fehlerbehandlung und Protokollierung eingebaut worden.

Fehler bei der AFPXISAPI

Sollte die AFPX nicht mehr reagieren, oder ein anderer interner Windows-, IIS-Fehler auftreten, so wird dies direkt von der AFPXISAPI.DLL gemeldet und auch in der afperror.log im Verzeichnis der DLL gespeichert.

Die Meldung kann zB folgendermaßen aussehen:
2011.11.08 09:48:16 Progid is: afpx.afpx	Method is:do	Parameters are:	parameters are:	Invoke failed with err code 800706be: Der Remoteprozeduraufruf ist fehlgeschlagen.


AFPX.INI Settings

Sollte ein Fehler auftreten, kann man sich eine Email zusenden lassen.
Dafür müssen die Felder unter
[EMAIL]
; If you enter here a valid Emailadress, Senderadress and Emailhost, than an error out of one
; of your pages will be sent to you by email

; Your Emailhost
HOST=
; Your Emailadress
RECEIVER=
; Your Senderadress
SENDER=

gefüllt werden.

Sollte in der AFPX selbst ein Fehler auftreten, so wird der Fehler an den Programmierer gesendet, dessen emailadresse etc unter
; If an internal AFP-error occurs (a real BUG in the AFP) then an email should be sent.
; Please enter here the following values:
EHOST=
ERECEIVER=
ESENDER=

abgelegt werden muss.

der Debugmode

In der AFPX.INI kann bei
[DEBUG]
; This is the main switch for function monitoring. 
; If the setting is OFF, the file AFPERROR.HTM will be sent but no error reports 
; are generated in the browser. 
MODE=OFF

eingestellt werden ob die komplette Fehlermeldung am Bildschirm angezeigt werden soll oder eine kurze Meldung angezeigt wird.
Ist eine afperror.htm im AFPX Verzeichnis, wird diese anstelle der eingebauten Meldung angezeigt.

fox.ldebug

Mit 'fox.ldebug = .t.' kann innerhalb der AFPX das Protokollieren kompletter Fehlermeldungen eingeschalten werden.

die ERR-Dateien

Wird direkt beim kompilieren bereits ein Fehler erkannt, so wird im Cacheverzeichnis eine .ERR Datei angelegt. In ihr steht die normale VFP9 Fehlermeldung.
Eine ausführlichere Meldung wird in der .runtime.err Datei abgelegt.

Fehlerdateien im Error-Verzeichnis

Sehr umfangreiche Fehlerinfos findet man nun im Errorverzeichnis.
Generell wird eine errors.dbf geführt.
Sie beinhaltet das aktuelle cCookie, Datum und Uhrzeit unter Tdatetime, die Fehlermeldung selbst unter cmemo, die Ausgaben von display memo und display status in dispmemo und dispstat und die aktuelle INI-Datei unter inifile.

Die Inhalte von display memo und display status werden in einer Memo_xxxxxxxx.txt und Stat_xxxxxxxxx.txt abgelegt.
Unter amem_xxxxxxxx.txt werden alle this.* Properties der AFPX gespeichert.
in einer error_xxxxxxxx.htm liegt die komplette Fehlermeldung in HTML-Form, welche auch an den Client gesendet wird, falls fox.ldebug auf .t. steht.

Um auch automatisch eine Fehlermeldung über ein SMS-System senden zu können, wird eine error_xxxxxxxx.sms erzeugt in der in Kurzform die wichtigsten Fehlermeldungen verzeichnet sind.

Fehlerdateien im Memo-Verzeichnis

die Daten aus display memo und display status werden unter Memo_xxxxxxxxx.txt und Stat_xxxxxxxx.txt abgelegt.

Fehlerdateien im AFPX-Verzeichnis

die komplette Fehlermeldung liegt noch zusätzlich unter dem Namen afperror_xxxxxxxxxx.htm im AFPX-Hauptverzeichnis.

Anmerkung: xxxxxxxxxx entspricht einem sys(2015)

Mailversand

In der AFPX ist die wwipstuff.dll als Email-dll in Verwendung.
Aufgrund von Lizenztechnischen Gründen kann ich diese natürlich nicht der AFPX beilegen.
Falls sie eine eigene Version eines Mailversandes verwenden, muss dies natürlich in der AFPX.PRG eingebaut werden. In diesem Fall suchen sie einfach nach wwipstuff, denn der Codeteil ist sehr einfach gehalten und immer mit einem try catch umranded.
			Try
				If File(this.cafppath+"wwipstuff.dll")
					Declare Integer SendMail ;
						IN (this.cafppath+"wwipstuff.dll") ;
						STRING cFrom, ;
						STRING cFromName, ;
						STRING cTo, ;
						STRING cCC, ;
						STRING cBCC, ;
						STRING cSubject, ;
						STRING cMessage, ;
						STRING cAttachment,;
						STRING cMailHost,;
						STRING @cError,;
						STRING cContentType
				Endif

				lcerror=Space(513)
				lcmessage1=lcstring
				lcfehlhtm=this.cafppath+"afperror"+Sys(2015)+".htm"
				lnhandle=Fcreate(lcfehlhtm)
				Fwrite(lnhandle,lcmessage1)
				Fclose(lnhandle)
				lcmessage=lcmessage1
				lcsenr=""

				If Not Empty(this.cemailhost)
					If File(this.cafppath+"wwipstuff.dll")
						lnresult=SendMail(this.cemailsender, lcsenr,this.cemailreceiver, "","","Error - Email via Website",;
							lcmessage,"",this.cemailhost,@lcerror,"text/html")
					Endif
				Endif
			Catch
			Endtry

Achten sie darauf, dass es mehrfach im Code vorkommt.
Anmerkung: An den Befehlen FCreate, Fwrite und Fclose sehen sie, wie alt dieser Code bereits sein muss, denn er entstand, bevor der strtofile() Befehl in VFP verfügbar war.

Edit | Alle | Kategorien | Navigation Pfad | Administration | Files
WikiSoftware (c) by Screwturn Wiki