Domino 9 und frühere Versionen > ND7: Entwicklung
feststellen ob das Dokument mit bekante UnID in einer Db vorhanden ist
koehlerbv:
Sofia, Du lässt im Fehler- wie im Erfolgsfall letztlich Dein Script unverändert durchlaufen.
Zunächst: Du brauchst einen allgemeingültigen ErrorHandler, der auf jeden Fehler reagieren muss: On Error Goto ErrorHandler.
Dann würde ich folgende Veränderungen vorschlagen:
’Setzt Flag UpdateLink in dem PYM-Dokument auf „1“, d.h. UpdateLink für dises Dokument wurde durchgeführt und Link-Dokument wurde in der Datenbank MailCopyDB gefunden
Call doc.Save( True, True )
Dein Code läuft jetzt weiter und macht daher alles wieder kaputt. Wenn aber der Code bis hierher gelaufen ist, dann ist alles in bester Ordnung, daher:
Exit Function
Vorher fehlt noch ein End If - hier stimmt was an Deiner Logik nicht. Siehe bitte unten.
AfterError:
doc.UpdateLink = "2"
’Setzt Flag UpdateLink in dem PYM-Dokument auf „2“, d.h. UpdateLink für dises Dokument wurde durchgeführt und die Datenbank MailCopyDB enthält kein Dokument mit ID = Link-ID
Call doc.Save( True, True )
End If
Das End If ist hier falsch - siehe oben!
Es fehlt wieder ein sauberer Ausgang:
Exit Function
ErrHandle:
Das muss ein sauberer ErrorHandler werden, daher:
If Err = 4091 Then 'Doc an Hand von UNID nicht gefunden!
Resume AfterError
Else
Messagebox "Error" & Str(Err) & ": " & Error$ 'Allgemeines Gemecker bei jedem anderen Fehler
Exit Function 'Fehlerstatus wird gelöscht
End If
End Function
Das kann aber nur als Anregung dienen und (natürlich) ist nicht in Deinem Kontext getestet.
HTH,
Bernhard
sja:
Hallo Bernhard,
bin unendlich dankbar für Deine Hilfe!
Jetzt, dank Dir, habe ich begriffen, dass für den Fall, wenn für alle Links in dem PYM-Dokument wurden die entsprechenden Dokumente in der MailCopyDB gefunden (d. h. die Schleife Do ... Loop While beendet ist) sollte das Funktions-Ende so aussehen
doc.UpdateLink = "1"
'Setzt Flag UpdateLink auf "1", d.h. UpdateLink für dises Dokument wurde durchgeführt
Call doc.Save( True, True )
End If
Exit Function
Aber verstehe nicht mit dem Fall, wenn in der Schleife Do ... Loop While für einen von Links wird kein Dokument in der Datenbank MailCopyDB gefunden. Dann wird der Fehler 4091 auftreten und es kommt zum Label AfterError. Wenn da wird
exit Funktion
dann wird aus dem Funktion raus d.h. die Schleife Do ... Loop While wird nicht bis zum Ende ausgeführt, aber es kann sein, dass in dem PYM-Dokument gib es noch weitere Links, für welche die Dokumente in der MailCopyDB vorhanden sind.
Also,
AfterError:
doc.UpdateLink = "2"
’Setzt Flag UpdateLink in dem PYM-Dokument auf „2“, d.h. UpdateLink für dises Dokument wurde durchgeführt und die Datenbank MailCopy enthält kein Dokument mit ID = Link-ID
Call doc.Save( True, True )
...
und weiter weiss nicht was sollte hier sein, damit wenn die Schleife Do ... Loop While noch nicht beendet ist, zurück in der Schleife.
Oh Gott, ob ich das alles verständlich ausgedrückt habe.
Noch mal herzlichen Dank für die Hilfe.
Liebe Gruesse
Sofia
koehlerbv:
Mal Dir am besten den Programmablauf mal genau auf, um zu entscheiden, wie nach einem 4091er Error dann verfahren werden soll. So auf einen schnellen Blick würde ich sagen, dass Du statt dem Exit Function (ich hatte Deinen Code hier nicht genau genug analysiert) ein Goto ContinueAfter4091 benötigst, dass genau vor dem Lopp While eingefügt werden muss.
Du musst dann aber noch schauen, was mit doc.UpdateLink passieren soll: Jetzt ist ja der Status "1" oder "2" etwas ... undefiniert, je nachdem, ob zwischendurch mal ein GetDocumentByUNID in die Hose geht oder nicht.
Wie gesagt: FlowChart aufmalen.
Bernhard
sja:
Hallo Bernhard,
alles klar, vielen vielen Dank. Für das Feld UpdateLink ist mir wichtig zu wiessen, ob Update ausgeführt ist, d. h UpdateLink != "", oder wenigstens ein Link hat kein Dokument, d. h. doc.UpdateLink = "2".
Dann probiere ich so:
...
...
ContinueAfter4091:
Loop While rtnav.FindNextElement(RTELEM_TYPE_DOCLINK)
If Not doc.UpdateLink = "2" Then
doc.UpdateLink = "1"
'Setzt Flag Upd3ateLink auf "1", d.h. UpdateLink für dises Dokument wurde durchgeführt
End If
Call doc.Save( True, True )
End If
Exit Function
AfterError:
doc.UpdateLink = "2"
'Setzt Flag UpdateLink auf "2", d.h. UpdateLink für dises Dokument wurde durchgeführt'Die Datenbank MailCopyDB enthält kein Dokument mit ID = Link-ID
Call doc.Save( True, True )
Goto ContinueAfter4091
ErrHandle:
If Err = 4091 Then 'Doc an Hand von UNID nicht gefunden!
Resume AfterError
Else
Messagebox "Error" & Str(Err) & ": " & Error$
Exit Function 'Fehlerstatus wird gelöscht
End If
End Function
Большое спасибо. Здоровья, счастья и всего самого наилучшего в Новом Году!
Liebe Gruesse
Sofia
S2000:
Ohla,
ist zwar schon gelöst, aber ich wollt hier noch eine alternative anbieten (mit welcher ich z.B. getDocByUNID immer absichere).
Einfach folgende Function hinzufügen welche dann mit übergabe der UNID und der DB immer ein true o. false zurückliefert.
---
Function validateUNID( UNID As String, db As NotesDatabase ) As Variant
On Error Goto ende
Dim doc As NotesDocument
If Not( db Is Nothing ) Then
Set doc = db.GetDocumentByUNID( UNID )
If Not( doc Is Nothing ) Then
validateUNID = True
Else
validateUNID = False
End If
Else
validateUNID = False
End If
Exit Function
ende:
validateUNID = False
Exit Function
Resume Next
End Function
---
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln