Domino 9 und frühere Versionen > ND7: Entwicklung

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

(1/3) > >>

sja:
Hallo @All,

Vielen Dank im Voraus, wenn jemand mir bei Folgendem helfen würde:

In einem Rich Text Feld (Datenbank1) habe ich Link zu einem Dokument in der Datenbank2

so bekome ich ID:
....
Set rtlink = rtnav.GetElement
IDrtlink = rtlink.DocUnID

Anhand dieser ID soll auf das Dokument in der Datenbank2 zugegriffen werden.
Wenn das Dokument mit der ID in der Datenbank2 vorhanden ist, dann kein Problem

Wenn das Dokument mit solche ID in der Datenbank 2 nicht vorhanden ist, dann bei

Set doc = Datenbank2.GetDocumentByUNID( IDrtlink )

 bekomme ich natürlich die Fehlermeldung

Invalid universal id

Habe nichts gefunden wie kann ich vorher feststellen, ob das Dokument mit der  ID = Idrtlink in der Datenbank2 vorhanden ist.


Schoene Gruesse
Sofia

koehlerbv:
Du kannst dies in einem ErrorHandler abfangen und dort auf
lsERR_NOTES_BAD_UNID (=4091)
prüfen. Für diesen Fall kannst Du dann entsprechend Deiner Vorhaben weiter verfahren.
Ich mache das zumindest so  ;)

Bernhard

PS: Dir und Deinem Mann, Sofia, "Vsjevo choroshevo s novym godom!"

sja:
Hallo Bernhard,

herzlichen Dank für die Hilfe!
Habe gehofft, das  gibt's was anderes als ErrorHandler und habe viel Zeit auf die Suche verloren.
Aber wenn Du so sagst, dann probiere ich auch mit einem ErrorHandler.

Mы желаем тоже тебе и твоей  семье счастья в новом году!  :)


Liebe Gruesse
Sofia

sja:
Hallo @All,

also, mein Problem (Festlegung, ob eine Datenbank ein Dokument mit bekannte ID enthält) habe ich versucht mit dem ErrorHandler zu lösen.
Allerdings habe ich damit Schwierigkeiten: kann nicht das  ErrHandle und das AfterError in dem Programm richtig platzieren, obwohl ich

Best Practices: Error Handling in Lotus Script: Einleitung http://atnotes.de/index.php?topic=11980.0

und andere Beiträge fleissig studiert habe. Ich habe das in meiner Funktion Update() aber es scheint falsch zu sein, oder das war falsche Platz in der Funktion.

Herzlichen Dank im Voraus, wenn jemand mir dabei helfen würde.

Hier ist der Code mit Kommentaren

'%INCLUDE "lsxbeerr.lss"    'Für den Test wird numerischer Code verwendet
Dim s As NotesSession

'Archiv PYM
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim view As NotesView
Dim VEC As NotesViewEntryCollection   
Dim ve As NotesViewEntry
Dim rti As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim rtlink As NotesRichTextDocLink

'MailCopyDB
Dim dbMailCopy As NotesDatabase
Dim vMailCopy As NotesView
Dim IDdbMailCopy As String
Dim IDvMailCopy As String
Dim IDrtlink As String
Dim docMC As NotesDocument

'Archiv MailCopyDB
Dim AdbMC As NotesDatabase
Dim AvMC As NotesView
Dim tmpAvMC As NotesView
Dim IDAdbMC As String
Dim IDAvMC As String
Dim AdocMC As NotesDocument
Dim IDAdocMC As String

Dim item As NotesItem

Sub Initialize
   Set s = New NotesSession
   
   'MailCopyDB
   Set dbMailCopy = s.GetDatabase( "", "test\mailcopy.nsf" )
   IDdbMailCopy = dbMailCopy.ReplicaID
   Set vMailCopy = dbMailCopy.GetView( "($All)" )
   IDvMailCopy = vMailCopy.UniversalID   
   
   'ArchivMailCopyDB
   Set AdbMC = s.GetDatabase( "", "test\archivMC.nsf" )
   IDAdbMC = AdbMC.ReplicaID   
   Set AvMC = AdbMC.GetView( "($All)"  )
   IDAvMC = AvMC.UniversalID   
   Set tmpAvMC = AdbMC.GetView( "tmpArchiv"  )   'temporary Anscht wird erhalten das Link-Dokument mit dem Flag = "archiv"
   
   'Archiv PYM
   Set db = s.CurrentDatabase
   Set view =db.getview("UpdateLink")
   Set VEC = view.AllEntries
   Set ve = VEC.GetFirstEntry()
   
   While Not (ve Is Nothing)    
      Set doc = ve.Document   'PYM-Dokument mit den Links

'Das PYM-Dokument kann das Feld "DateiHyperlink" oder
'das Feld "DateiHyperlink" oder die beide Felder 
'mit den Links enthalten
      
      If doc.HasItem("DateiHyperlink") Then               
         Set rti = doc.GetFirstItem("DateiHyperlink")
         Call Update()         
      End If
      If doc.HasItem("DateiHyperlink_1") Then               
         Set rti = doc.GetFirstItem("DateiHyperlink_1")
         Call Update()         
      End If      
      
      Set ve = VEC.getNextEntry(ve)   
   Wend
End Sub

Function Update()
   On Error  4091 Goto ErrHandle  'lsERR_NOTES_BAD_UNID (=4091)
   
   Set rtnav = rti.CreateNavigator
   
   If rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then      
'Wenn wenigstens ein Link in dem Dokument vorhandes ist

      Do
         Set rtlink = rtnav.GetElement         
         IDrtlink = rtlink.DocUnID
         
         Set docMC = dbMailCopy.GetDocumentByUNID(IDrtlink)   
'Link-Dokument in der MailCopyDB
         
         
            If docMC.IsValid = True Then   
'Wenn das Link-Dokument in der MailCopyDB vorhanden ist und nicht gelöscht
               
               docMC.Categories = "archiv"   'Setzen Flag = "archiv"
               Call docMC.Save( True, True )
               
               Call docMC.CopyToDatabase( AdbMC )   
'Das Link-Dokument aus der MailCopyDB in der ArchivMailCopyDB kopieren

               Call tmpAvMC.Refresh            
'Das kopierte Link-Dokument mit dem Flag = "archiv" erscheint in der Ansicht "tmpArchiv" in der ArchivMailCopyDB
               Set AdocMC  = tmpAvMC.GetFirstDocument
               IDAdocMC =  AdocMC.UniversalID
               
               Call docMC.Save( True, True )         
'Temporary für testen wird das Link-Dokument in der MailCopyDB mit dem Flag "archiv" gespeichert
'In der Produktion muss dieses Dokument gelöscht werden         
               'Call docMC.Remove(True)            

'Der Link in dem PYM-Dokument bekommt neuen IDs zu dem Link-Dokument in der ArchivMailCopyDB   
               rtlink.DbReplicaID = IDAdbMC         
               rtlink.ViewUNID = IDAvMC
               rtlink.DocUnID = IDAdocMC   
'PYM-Dokument wird mit dem aktualisierten Link gespeichert            
               Call doc.Save( True, True )            
               
               AdocMC.Categories = ""            
'Flag "archiv" in dem Link-Dokument in der Archiv MailCopyDB wird auf "" gesetzt
               Call AdocMC.Save( True, True )      
'Das Dokument verschwindet aus dem Ansicht "tmpArchiv"
               Call tmpAvMC.Refresh
               
            End If            
               
      Loop While rtnav.FindNextElement(RTELEM_TYPE_DOCLINK)

      doc.UpdateLink = "1"
      
’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 MailCopy gefunden
      Call doc.Save( True, True )   
      
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 )         
   End If   
   

ErrHandle:   
   'Messagebox "Error" & Str(Err) & ": " & Error$   
   Resume AfterError
   
End Function


Ein glücklikes, gesundes neues JahrIch wünsche ich allen !

Sofia



Axel:
Hi,

so auf den ersten Blick kann ich keinen Fehler entdecken.

Was sagt denn der Debugger.


Alles Gute im neuen Jahr.

Axel

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln