Domino 9 und frühere Versionen > ND7: Entwicklung

feststellen ob das Dokument mit bekante UnID in einer Db vorhanden ist

<< < (2/3) > >>

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