Autor Thema: Fehler abfangen bei GetDocumentByUnid  (Gelesen 2796 mal)

Offline buzi

  • Aktives Mitglied
  • ***
  • Beiträge: 171
Fehler abfangen bei GetDocumentByUnid
« am: 09.08.16 - 09:33:59 »
Hallo zusammen,

wie kann ich prüfen, ob es ein Dokument mit einer bestimmten Unid in einer Datenbank überhaupt gibt, ohne einen Fehler zu produzieren wenn es das Dokument nicht gibt? Ich suche sowas wie

Code
If db.HasDocument(unid) Then
  Set vaDoc = db.GetDocumentByUnid(unid)
Else
  Messagebox "Dokument nicht gefunden"
End If

Offline Bastel123

  • Senior Mitglied
  • ****
  • Beiträge: 355
  • Geschlecht: Männlich
Re: Fehler abfangen bei GetDocumentByUnid
« Antwort #1 am: 09.08.16 - 09:44:13 »
Die Hilfe ist dein Freund.....

This agent demonstrates handling lsERR_NOTES_BAD_UNID. The UNID is deliberately altered to cause the error.
%INCLUDE "lsxbeerr.lss"
Sub Initialize
  On Error lsERR_NOTES_BAD_UNID Goto processError
  Dim s As New NotesSession
  Dim db As NotesDatabase
  Dim dc As NotesDocumentCollection
  Dim doc As NotesDocument, pdoc As NotesDocument
  Dim docSubj As String, pdocSubj As String
  Dim badID As String
  Set db = s.CurrentDatabase
  Set dc = db.AllDocuments
  Set doc = dc.GetFirstDocument
  While Not(doc Is Nothing)
    If doc.IsResponse Then
      docSubj = doc.Subject(0)
      ' Deliberately munge UNID
      badID = "Z" & Right(doc.ParentDocumentUNID, 31)
      Set pdoc = db.GetDocumentByUNID(badID)
      pdocSubj = pdoc.Subject(0)
      Messagebox "Parent: " + pdocSubj,, docSubj
    End If
getNextDocument:
    Set doc = dc.GetNextDocument(doc)
  Wend
  Exit Sub
processError:
  Messagebox docSubj,, "Bad UNID for ..."
  Resume getNextDocument
End Sub
Gruß Sebastian
-----------------------------------------------------
Kaum macht man's richtig, schon funktioniert's.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Fehler abfangen bei GetDocumentByUnid
« Antwort #2 am: 09.08.16 - 09:48:46 »
Ich mache das mit einer eigenen Function, die ich anstelle von db.GetDocumentByUnid verwende

Code
Function MyGetDocumentByUnid (db As NotesDatabase, unid As String) As NotesDocument
   On Error Goto Fehler
   Set MyGetDocumentByUnid = db.GetDocumentByUnid (unid)
   Exit Function
Fehler:
   Set MyGetDocumentByUnid = Nothing
   Exit Function
End Function

Wird dann so verwendet

Code
Set doc = MyGetDocumentByUnid (db, unid)
If Not doc Is Nothing Then
   ...
End If

« Letzte Änderung: 09.08.16 - 09:50:38 von Peter Klett »

Offline buzi

  • Aktives Mitglied
  • ***
  • Beiträge: 171
Re: Fehler abfangen bei GetDocumentByUnid
« Antwort #3 am: 09.08.16 - 10:48:54 »
Danke Peter, für die ausführliche Antwort. Deine Lösung ist natürlich 1A. Ich dachte, es gibt evtl. eine Lösung im Notes-Funktionsumfang dafür, die ich nicht gefunden habe.....

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Fehler abfangen bei GetDocumentByUnid
« Antwort #4 am: 09.08.16 - 11:14:43 »
Für solche Functions und Subs haben wir eine zentrale Datenbank, in der zwei Scriptbibliotheken enthalten sind, eine nur für Backendfunktionen, eine für UI-Funktionen. Die UI-Bibliothek verwendet die Backendbibliothek.

Diese beiden Bibliotheken werden in alle Schablonen so übernommen, dass sie vom Designtask aus der zentralen Datenbank automatisch aktualisiert werden. Änderungen werden nur in der zentralen Datenbank vorgenommen und dann an die anderen Schablonen verteilt. Von allen Gestaltungselementen wird die UI-Bibliothek verwendet, von periodisch laufenden Agenten nur die Backendbibliothek (Agent und Bibliothek müssen dazu vom gleichen User unterschrieben sein).

Damit stehen die Functions und Subs immer zur Verfügung, ohne dass man sie an tausend Stellen kopieren und dort ggf. aktualisieren muss, und können wie der "normale" Notes-Funktionsumfang verwendet werden.

Wenn man die Parameter in den Functions und Subs nicht ändert (absolutes NoGo bei uns), braucht man auch keine Schablone, die die Bibliotheken verwendet, neu zu kompilieren. Außerdem sollte man eigene Namen verwenden, die niemals in den allgemeinen Funktionsumfang aufgenommen werden können (bei uns bekommen die ein Firmenkürzel vorweg). So nutzen wir noch heute Functions, die wir z.B. in Notes 4 erstellt haben, die später gleichnamig ohne Firmenkürzel in dem Standard hinzugekommen sind und dann kollidiert wären.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz