Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Grabby am 22.10.02 - 16:06:21
-
Hallo zusammen.
Ich brauche dringend etwas Hilfe bezüglich Script.
Folgendes Problem habe ich:
Der Benutzer soll in der Ansicht von Datenbank A ein/mehrere Dokument(e) markieren und mit Hilfe einer Schaltfläche in eine andere Datenbank B kopieren. Anschließend soll das/die Dokument(e) in Datenbank A gelöscht werden.
Das klappt soweit auch ganz gut. Jetzt möchte ich aber vor dem Löschen des Dokumentes in Datenbank A erst prüfen, ob das Dokument auch in Datenbank B angekommen ist. Hier liegt nun mein Problem. Ich habe versucht, dieses mit dem folgenden Script zu machen (aber bitte Nachsicht, ich bin Anfänger darin!!).
Ich erhalte immer die Fehlermeldung (Invalid universal ID). ??? ::)
Vielleicht hat ja einer einen Rat, warum das nicht klappt.
Besten Dank im voraus.
Grabby
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim archivdb As NotesDatabase
Dim collection As NotesDocumentCollection
Dim archivcollection As NotesDocumentCollection
Dim doc As NotesDocument
Dim archivdoc As NotesDocument
Dim user As String
Dim String1 As String
Dim String2 As String
Dim UnidID As String
Set db = session.CurrentDatabase
Set archivdb = New NotesDatabase("SDEBGMS0010","APPL\\P\\PICVDArchiv.nsf")
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
String1 = session.UserName
String2 = Strleft(String1,"/OU=DEBGM/O=Schott")
User = Strright(String2,"CN=")
While Not(doc Is Nothing)
UnidID = doc.UniversalID
Messagebox ("Dies ist die ID des Dokumentes:" & UnidID)
Call doc.ReplaceItemValue("PP_ArchivDate",Date$)
Call doc.ReplaceItemValue("PP_ArchivName",User)
Call doc.save(True,True)
Call doc.CopyToDatabase(archivdb)
Set archivdoc = archivdb.GetDocumentByUNID(UnidID)
'****************************************************
' Hier erhalte ich dann die Fehlermeldung !!!!
'****************************************************
If archivdoc Is Nothing Then
Goto Fehler
End If
Set doc = collection.GetNextDocument(doc)
Wend
Call collection.RemoveAll(False)
Fehler:
Messagebox "Das verschieben des Dokumentes ist leider fehlgeschlagen. Bitte kontrollieren Sie den Vorgang."
Exit Sub
End Sub
-
... ich denke du hast für das archivierte Dokument eine neue UNID erhalten, daher die Meldung...
ata
-
oh..dazu sollte man wissen, dass die UNID eines Docs immer nur zu Repliken einer DB passt, nicht aber zu Kopien. Sobald Du ein Doc in eine andere DB schaufelst, bekommt es eine neue UNID. (ata, ich fasel Dir immer nach wie Du siehst ;D)
Dazu:
The UNID is a totally unique 16-byte identifier for a document. The UNID binds together the replicas of a given document. Each instance of the document has the same UNID -- regardless of how many replicas the document appears in. The UNID consists of 8 bytes of time/date-created information, and a 32-bit sequence that is a unique number indicating the document's position in the database.
(http://www-10.lotus.com/ldd/today.nsf/62f62847467a8f78052568a80055b380/bbedbf295ee0dc0a8525668e004955ef/Body/11.495A?OpenElement&FieldElemFormat=gif)
Lass Dir also einen anderen Key einfallen.
-
Vielen Dank ihr beiden. Da hätte ich ja vielleicht auch schon mal schauen können....! Naja, man lernt nie aus. Mal sehen, vielleicht lege ich mir die Original-UNID in irgendein Feld, um später das Dokument wiederzufinden.
Lieben Dank
Grabby
-
;D bingo
-
Hallole, bin wieder an Bord...
Ein Kollege von mir hat mir neulich erzählt, daß er genau bei der gleichen Vorgehensweise die DocUNID des Dokumentes in der neuen Datenbank beibehalten konnte. Ich war der Auffasung, daß die DocUNID in einer anderen Datenbank bei CopyToDatabase neu vergeben wird. Mein Kollege ist der Ansicht, daß die DocUNID nur dann neu vergeben wird, wenn diese UNID in der neuen Datenbank bereits vorhanden ist. Das warf meinen Stand der Dinge über den Haufen. In diesem Beispiel hier sehe ich meine Position wieder bestärkt. Ich denke ich werde die Vorgehensweise meines Kollegen nochmals unter die Lupe nehmen. Wenn ich was dazu erfahre werde ich es hier einbringen...
ata
-
aha,
heißt:
mache ich manuelles Kopie => alte UNID in ??
mache ich copytodatabase => alte UNID in ??
mache ich xxx fällt mir nix mehr ein => was dann???
werde ich auch mal antesten, denn eigentlich bin ich der festen Überzeugung, daß sich die UNID unbedingt ändern muß, egal wie man ein Doc von DB_A nach DB_X schaufelt:
" The UNID consists of 8 bytes of time/date-created information, and a 32-bit sequence that is a unique number indicating the document's position in the database." Da die Creation Time und die Position in der neuen DB des Docs doch auf jeden Fall anders sind, müßte ergo die UNID sich ändern.
-
... das sehe ich auch so, nur mein Kollege sieht das anders...
ata
-
ist Dein Notes Timer Task abgeschmiert oder warum noch wach um diese Zeit? ;D ;D