Autor Thema: UNID  (Gelesen 3697 mal)

Offline ch

  • Frischling
  • *
  • Beiträge: 45
UNID
« am: 07.04.06 - 12:53:33 »
Hallo,
ich habe eine Frage ich möchte prüfen ob es in einer DB ein Dokument mit einer bestimmten UNID gibt.
Bei Set bricht Notes ab wenn es keine Dok. gibt und Errorhandling hat nicht funktioniert.
Gibt es eine möglichkeit wie:

IF db.getDocumentByUNID(doc.zuDokiD(0))=true then

eine Schleife aufzubauen??

lg claudia

 




Glombi

  • Gast
Re: UNID
« Antwort #1 am: 07.04.06 - 12:58:07 »
Mit einem vernünftigen Errorhandling sollte das machbar sein.

Es geht auch so: Erstelle eine Ansicht ohne Antworthierarchie, die nach
 @Text(@DocumentUniqueID)
sortiert ist.

Dann:

set dc = view.getDocumentbyKey( doc.zuDokiD(0), true )
if dc.Count = 0 then
msgbox "Dok nicht da"
End if

Andreas

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: UNID
« Antwort #2 am: 07.04.06 - 12:59:09 »
mit dem Errorhandling muss es aber funktionieren.

Wie sieht den Dein Script-Code aus?
Gruß
Dirk

Offline ch

  • Frischling
  • *
  • Beiträge: 45
Re: UNID
« Antwort #3 am: 07.04.06 - 13:02:00 »
%INCLUDE "lsxbeerr.lss"
Sub Initialize
   
REM Archivierung...
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim arcdb As New NotesDatabase("","chug_kop.nsf")
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim doc2 As NotesDocument
   Dim doc3 As NotesDocument
   
   Dim wert As Variant
   Dim wert1 As Variant
   Dim wert2 As Variant
   Dim wert3 As Variant
   Dim wert4 As Variant
   
   Set db = session.CurrentDatabase
   Set dc = db.AllDocuments
   Set doc = dc.GetFirstDocument
   
   While Not doc Is Nothing
      wert4 = doc.GetItemValue("status")
      
      If wert4(0) = "offen" Then
         REM offen und noch keine UNID vorhanden..
         On Error lsERR_NOTES_ERROR Goto label1
         Set doc3 = arcdb.getDocumentByUNID(doc.zuDokiD(0))
label1:   
         wert = doc.GetItemValue("Titel")
         wert1 = doc.GetItemValue("Name")
         wert2 = doc.GetItemValue("Thema")
         wert3 = doc.GetItemValue("Telefonnummer")
         
         Set doc2 = New NotesDocument( arcdb )
         doc2.Form = "Task"
         doc2.TaskType = "1"
         doc2.Categories = "offene Telefonate"
         doc2.TaskType = "1"
         doc2.tmpOwnerHW = "1"
         doc2.tmpNoActionBar = "1"
         doc2.NoticeType = ""
         doc2.~_ViewIcon = 8         
         doc2.Subject = wert(0)  & " - " & wert1(0) & " - " & wert3(0) & " - " & wert2(0)
         Call doc2.ComputeWithForm(False, False)
         Call doc2.Save( True, False )
         
         If doc2.Save( True,False ) Then Messagebox "Document " & doc.UniversalID & " successfully saved"
         
         doc.zuDokiD = doc2.UniversalID
         Call doc.Save( True, False )      
         Goto schleife
Schleife:   
         
      End If
      
      Set doc = dc.GetNextDocument( doc )
   Wend
   
End Sub

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: UNID
« Antwort #4 am: 07.04.06 - 13:05:35 »
den Abschnitt mit der Fehlerbehandlung würde ich anders machen

On Error goto Next
set doc3 = arcdb.getDocumentByUNID(doc.zuDokiD(0))
if err <> 0 then
   ' Fehler gefunden
   ' ...
   err = 0
else
   ' keine Fehler gefunden
end if
On error Goto 0
Gruß
Dirk

Offline ch

  • Frischling
  • *
  • Beiträge: 45
Re: UNID
« Antwort #5 am: 07.04.06 - 13:15:25 »


Bei Set bringt er leider immernoch den error: "invalid id"



REM %INCLUDE "lsxbeerr.lss"
Sub Initialize
   
REM Archivierung...
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim arcdb As New NotesDatabase("","chug_kop.nsf")
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim doc2 As NotesDocument
   Dim doc3 As NotesDocument
   
   Dim wert As Variant
   Dim wert1 As Variant
   Dim wert2 As Variant
   Dim wert3 As Variant
   Dim wert4 As Variant
   
   Set db = session.CurrentDatabase
   Set dc = db.AllDocuments
   Set doc = dc.GetFirstDocument
   
   While Not doc Is Nothing
      wert4 = doc.GetItemValue("status")
      
      If wert4(0) = "offen" Then
         REM offen und noch keine UNID vorhanden..
         REM On Error lsERR_NOTES_ERROR Goto label1
         On Error Goto label1
         Set doc3 = arcdb.getDocumentByUNID(doc.zuDokiD(0))
label1:   
         If Err <> 0 Then
            wert = doc.GetItemValue("Titel")
            wert1 = doc.GetItemValue("Name")
            wert2 = doc.GetItemValue("Thema")
            wert3 = doc.GetItemValue("Telefonnummer")
            
            Set doc2 = New NotesDocument( arcdb )
            doc2.Form = "Task"
            doc2.TaskType = "1"
            doc2.Categories = "offene Telefonate"
            doc2.TaskType = "1"
            doc2.tmpOwnerHW = "1"
            doc2.tmpNoActionBar = "1"
            doc2.NoticeType = ""
            doc2.~_ViewIcon = 8         
            doc2.Subject = wert(0)  & " - " & wert1(0) & " - " & wert3(0) & " - " & wert2(0)
            Call doc2.ComputeWithForm(False, False)
            Call doc2.Save( True, False )
            
            If doc2.Save( True,False ) Then Messagebox "Document " & doc.UniversalID & " successfully saved"
            doc.zuDokiD = doc2.UniversalID
            Call doc.Save( True, False )      
            
            Err=0
         Else
            Goto schleife   
         End If
Schleife:   
         
      End If
      
      Set doc = dc.GetNextDocument( doc )
   Wend
   
End Sub

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: UNID
« Antwort #6 am: 07.04.06 - 13:41:23 »
Ein richtiges ErrorHandling hast Du ja noch gar nicht, Claudia. Schau Dir hierzu bitte mal wegen der Grundlagen folgenden Thread aus dem Forum an: Best Practices: Error Handling in Lotus Script.

In Deinem Fall reicht - wenn Du ein allgemeines ErrorHandling verwendest und nur kurzzeitig dieses umsetzt - folgendes:
Du setzt das ErrorHandling vor dem Holen des Docs via UNID auf
On Error Resume Next
Damit - und das ist wichtig - wird der Fehlerstatus wieder aufgehoben (was Du derzeit überhaupt nicht machst - daher bekommst Du ja auch weiter die Meldung).
Nun fragst Du ab, ob das instantiierte Doc überhaupt existiert - und stellst vor allem das allgemeine ErrorHandling wieder her.

HTH,
Bernhard

Offline ch

  • Frischling
  • *
  • Beiträge: 45
Re: UNID
« Antwort #7 am: 07.04.06 - 13:56:29 »
Danke hat funktioniert.

lg claudia

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: UNID
« Antwort #8 am: 07.04.06 - 14:06:07 »
Wie hast Du es in Deinem speziellen Fall jetzt gelöst? Sicherlich stolpert auch später nochmal ein dankbarer Entwickler über diesen Thread ...

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz