Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: michael-r am 17.06.16 - 12:35:16

Titel: Dokument mehrmals kopieren
Beitrag von: michael-r am 17.06.16 - 12:35:16
Hallo zusammen,

ich kopiere ein Dokument über einen Button in einer Maske in eine andere Datenbank mit:
Set db_copy = s.GetDatabase("Servername", "maildatenbank.nsf")
   
   Set db=s2.CurrentDatabase
   
   Set uidoc = workspace.CurrentDocument
   Set doc = uidoc.Document
   Set dest_doc = doc.CopyToDatabase(db_copy)                 
   Call dest_doc.PutInFolder("($Inbox)")

Wird das Dokument mehrmals kopiert taucht manchmal der Fehler auf: Ein anderer Benutzer hat dieses Dokument zur gleichen Zeit geändert!

Vermutung liegt nahe, dass die Dokumente die gleiche UNID haben. Etwas komisch finde ich nur, das es nur manchmal nicht geht.

In dem IBM KB (http://www-01.ibm.com/support/docview.wss?uid=swg21096316) steht, man sollte es so machen:
Set tempdoc=doc.copytodatabase(db)
Set newdoc=doc.copytodatabase(db)
Call tempdoc.remove(True)

Allerdings verstehe ich nicht so ganz was dort gemacht wird und wie ich das in meinem Code einbaue.

MFG Michael

Titel: Re: Dokument mehrmals kopieren
Beitrag von: Peter Klett am 17.06.16 - 13:19:34
Sollen die Dokumente die gleiche UniversalID bekommen, oder gerade nicht? Soll das gleiche Dokumente mehrfach in die andere Datenbank kopiert werden können?

Ich persönlich habe mich nie mit CopyToDatabase anfreunden können und kopiere daher immer alle Items in ein neues Dokument.

So erzeuge ich ein identisches Dokument in einer anderen Datenbank, die UniversalID ist eine andere.

Code
Dim newdoc As New NotesDocument (db2)
Call doc.CopyAllItems (newdoc)
Call newdoc.Save (True, True)

Und so erzeuge ich ein identisches Dokument in einer anderen Datenbank unter Beibehaltung der UniversalID. Sinnvoll ist dann aber, vorher in der db2 zu überprüfen, ob es schon ein Dokument mit der gleichen ID gibt und ggf. die Aktion abzubrechen. Dadurch kann das gleiche Dokument nicht mehrfach kopiert werden.

Code
Dim newdoc As New NotesDocument (db2)
newdoc.UniversalID = doc.UniversalID 'Das Setzen der ID muss vor dem ersten Speichern des Dokuments erfolgen
Call doc.CopyAllItems (newdoc)
Call newdoc.Save (True, True)


EDIT:

Ach ja, zu dem Vorschlag von IBM: Du willst bestimmt keinen Code bauen, der zwingend ein Löschrecht von Benutzern in einer Datenbank verlangt. Hätten wir einen Praktikanten in der Entwicklung, hätten wir dem das spätestens am zweiten Tag ausgetrieben ...  :-X
Titel: Re: Dokument mehrmals kopieren
Beitrag von: michael-r am 17.06.16 - 13:56:37
Hallo Peter,

das Dokument sollte nach Möglichkeit auch 2 mal dasein können.
Es handelt sich um eine Maildatenbank, wo die Mails abgeholt werden.

Aber aus irgendwelchen Gründen wird eine Mail auch mehrmals übertragen.

Ach jetzt verstehe ich, das andere Dokument wird erst gelöscht und dann nochmal kopiert?

MFG Michael
Titel: Re: Dokument mehrmals kopieren
Beitrag von: Peter Klett am 17.06.16 - 14:04:57
Nein, es wird zweimal kopiert, und durch das Kopieren des Zweiten bekommt das eine neue ID und das dann doppelte Erste wird danach gelöscht.

Das geht bestimmt auch noch komplizierter ... Und dafür zwingende Löschrechte
Titel: Re: Dokument mehrmals kopieren
Beitrag von: michael-r am 17.06.16 - 14:20:54
Also... ich habe nochmal das gleiche mit einer anderen TestDB gemacht.

Die UNID ist definitiv unterschiedlich und das kopieren funktioniert mehrmals.
Geprüft mit @StatusBar(@Text(@DocumentUniqueID))

Aber wenn ich den Betreff ändere, dann geht es nicht mehr?!

MFG Michael
Titel: Re: Dokument mehrmals kopieren
Beitrag von: Peter Klett am 17.06.16 - 14:23:07
Wo willst Du den Betreff ändern und was geht dann nicht mehr?
Titel: Re: Dokument mehrmals kopieren
Beitrag von: michael-r am 17.06.16 - 14:38:13
Schritt 1: Ich kopiere die Mail über den Button in eine andere Datenbank. Die Mail wird abgeholt und gelöscht, liegt noch im Papierkorb der anderen Maildatenbank.

Schritt 2: Da es eine Mail ist, ändere ich in dem Eingang den Betreff manuell (nicht per Script), speichere die E-Mail ab und will diese dann über den Button nochmal kopieren, daraufhin erhalte ich die Meldung: Ein anderer Benutzer hat dieses Dokument zur gleichen Zeit geändert! (mail\dbname.nsf)

MFG Michael

Titel: Re: Dokument mehrmals kopieren
Beitrag von: Peter Klett am 17.06.16 - 15:38:26
und dbname ist die andere Datenbank, also nicht die, aus der das Dokument kopiert wird?

Hast Du das mal mit der von mir beschriebenen Methode versucht?

Was sagt der Debugger? An welcher Stelle kommt die Fehlermeldung?
Titel: Re: Dokument mehrmals kopieren
Beitrag von: michael-r am 17.06.16 - 16:21:14
dbname ist der aus dem das Dokument kopiert wird.
Ich bin gerade noch mit ein paar anderen Dingen beschäftigt gewesen. Ich werde deine Methode mal versuchen.
Eventuell habe ich einen Workaround und lasse gleich die übertragenen Mails aus der Datenbank löschen (softdeletions deaktivieren).

Ich hatte früher mal was mit Copyallitems versucht, aber das funktionierte nicht. Ich bin ja auch kein Programmierer ;).

MFG Michael
Titel: Re: Dokument mehrmals kopieren
Beitrag von: Peter Klett am 17.06.16 - 16:42:43
dbname ist der aus dem das Dokument kopiert wird.
Dann sind wir auf dem falschen Weg. Du bekommst den Konflikt in der Datenbank, aus der Du kopierst, da hat weder das CopyToDatabase noch ein CopyAllItems einen Einfluss drauf.

Schau Dir mal das gesamte Script an, irgendwo wirst Du das zu kopierende Dokument verändern und speichern (im Backend) und produzierst dann den Konflikt, wenn Du den Titel manuell änderst.
Titel: Re: Dokument mehrmals kopieren
Beitrag von: michael-r am 20.06.16 - 10:31:48
Moin,

ich habe das mit deinem Code probiert und das klappt ohne Probleme.

In dem Code wird nichts in der Mail angepasst, das passiert manuell durch den User.
Der Code ist auch komplett, bis auf die Definition der Variablen.

Danke für deine Hilfe.

MFG
Michael