Domino 9 und frühere Versionen > ND6: Entwicklung
Dokumente in Datenbank kopieren
koehlerbv:
@Notestime: Ich schaue Deinen Code asap an.
@Semeaphoros: Du hast mich sicher missverstanden - ich kritisiere nicht Resume Next, sondern den Umstand, dass es eingesetzt wird wegen einer Zeile, die immer einen Fehler bringt und daher von vornherein weggelassen werden kann, da sie nichts bewirkt (ausser 'nen Error zu generieren).
Ich habe aber in nicht einer meiner Routinen irgendwo ein On Error Resume Next. Kommt mir nicht ins Haus. Solange ich nicht weiss, was passiert ist, gibt es bei mir auch kein Resume Next. Ordnung und Sauberkeit im Schlachthof.
Bernhard
Notestime:
Mhm, ich verwende das sonst auch nicht. Aber ich habe keine andere Möglichkeit gesehen, es einzusetzen, zumal es ja den Fehler verschwinden läßt, der ja eigentlich kein Fehler sondern eher ein Zustand ist, nämlich der, daß das Dokument nicht da ist.
Euch fällt sicher ein "glücklicherer" Code für mein Problem ein ;-)
Danke schonmal
Gruß
Bernd
Semeaphoros:
Bernhard: Diese eine Zeile bringt nur dann einen Fehler, wenn das aufgerufene Dokument nicht existiert. Wie willst Du das vorher wissen, dass es das Dokument nicht gibt? Genau dieser Aufruf, GetDocumentByUNID ist eines der wenigen Beispiele, wo ein Resume Next sinnvoll ist. Man kann dann dahinter darauf testen, ob die Objektvariable gefüllt ist oder nicht, sprich ob das Doc gekommen ist oder eben nicht existiert. Aber danach muss natürlich sofort wieder ein On error goto EHandler oder so kommen.
Man kann es natürlich auch im ErrorHandler selber abfackeln, wird aber komplizierter als das hier beschriebene Verfahren.
koehlerbv:
Mir ist natürlich auch schon der Umstand untergekommen, dass eine nicht vorhandene UNID gleich als "Invalid universal ID" abgestempelt wird (Beispiel: Agent trägt genehmigten Urlaub in den Kalender des Antragstellers ein. Dann wird der Urlaub storniert - der Agent muss an Hand der gespeicherten UNID den Eintrag wieder löschen. Frustriert hat das der User aber schon manuell getan ...).
Ich habe das wie folgt gelöst (hier am Beispiel einer Sub von Bernd):
Die Routine "ErrorHandler" ist natürlich selbst zu schreiben, und global muss in das Modul eingebunden werden:
%INCLUDE "lsconst.lss" (hierfür eigentlich unnötig, aber für Massagekisten und so ...)
%INCLUDE "lsxbeerr.lss"
Sub UpdateEntry
On Error Goto ErrorRoutine
Set Zieldoc = Nothing
Set Zieldoc = Zieldb.getdocumentbyunid(Quelldoc.ZielDocUniqID(0))
If Zieldoc Is Nothing Then 'Stehenlassen wegen Sauberkeit !
Set Zieldoc = Zieldb.createdocument
End If
Call Zieldoc.replaceitemvalue("QuellDocUniqID",Quelldoc.universalid)
Call Zieldoc.replaceitemvalue("Form","Maske")
Call Zieldoc.replaceitemvalue("Beruf",Quelldoc.Beruf(0))
Exit Sub
ErrorRoutine:
Select Case Err
Case lsERR_NOTES_BAD_UNID:
Set Zieldoc = Zieldb.createdocument
Call Zieldoc.replaceitemvalue("QuellDocUniqID",Quelldoc.universalid)
Call Zieldoc.replaceitemvalue("Form","Maske")
Call Zieldoc.replaceitemvalue("Beruf",Quelldoc.Beruf(0))
Case Else:
Call ErrorHandler ("UpdateEntry")
End Select
Exit Sub 'vernichtet auch den Fehlerstatus !
End Sub
Wobei ich das Ganze in eine Function gelagert hätte und das eigentliche Update des Dokuments in einer weiteren Sub erledigt hätte.
So ist das aber eine saubere Lösung.
In der Routine zum Löschen bietet sich ein On Error lsERR_NOTES_BAD_UNID Gosub XXX an oder auch ein Standardverfahren, das bei lsERR_NOTES_BAD_UNID das Löschen / Update durchführt und dann mit Resume Next oder einem Goto Label weitermacht.
Auch so verliert man nicht die Kontrolle - es wird wirklich nur auf den Error lsERR_NOTES_BAD_UNID mit einer Exception reagiert, ansonsten aber mit dem Standardverfahren.
Bernhard
Semeaphoros:
Sag ich ja, dass mans auch so abfackeln kann. Unschön die kopierten Code-Zeilen, da würde ich anders agieren. Und ebenfalls unschön das Aussteigen aus der Errorroutine mit Exit Sub. Stimmt, dass das den Errorstatus zurücksetzt (bzw. im Grunde genommen ist er das schon durch das On Error), da würde ich jetzt trotzdem mit einem Resume blabla rausgehen.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln