Hallo Forum,
folgendes Problem hab ich:
Ich erstelle über einen Ansichtsbutton eine Kopie eines Dokumentes, in dem ich dann noch einige Werte ändern muss.
Kopiervorgang läuft soweit ganz gut, nur hab ich das Problem, dass danach immer die Kopie in der Ansicht markiert ist, nicht mehr das Original.
Kann ich das so einrichten, dass das Original weiterhin markiert bleibt, weil sicherlich öfters mal mehrere Dokumente nacheinander durch diese Kopiererei erstellt werden.
Das ganze wird eine Inventardatenbank, in der z.B. eine Lieferung von 20 gleichartiger PCs eingegeben wird, die sich nur durch die Seriennummer unterscheiden.
Hier noch der bisherige, rudimentäre Code
Sub Click(Source As Button)
Dim session As New notessession
Dim db As notesdatabase
Dim col As NotesDocumentCollection
Dim doc As notesdocument
Dim doc2 As notesdocument
Dim nuiw As New NotesUIWorkspace
Set db = session.currentdatabase
'holt die ausgewählten Dokumente
Set col = db.UnprocessedDocuments
'Abfragen dass nur ein Dokument markiert ist
If col.Count <> 1 Then
Messagebox "Bitte genau 1 Dokument zum Kopieren markieren.", 0,"Achtung"
Exit Sub
End If
' aus dem aktuellen UIDokument ein BackendDoc erstellen
Set doc = col.GetFirstDocument
'neues Doc generieren und in Datenbank kopieren
Set doc2 = doc
'Felder austauschen zwischen doc2 und doc
doc2.form = "Hardware"
'Hier dann die Felder ändern **********************************
doc2.Seriennummer = "hallo Testeingabe"
'************************************
Call doc2.CopyToDatabase(db)
Call doc2.Save(True,False)
Call nuiw.ViewRefresh
End Sub
Danke für die Hilfe
Thomas
Sorry, aber der Code ist Humbug...
Folgendes machst Du:
Du holst Dir Dok
dann erstellst Du eine neue Variable dok2, die auf das selbe Dokument referenziert.
Dann kopierst Du dok2, aber ohne eine Referenz auf das neu kopierte Dokument (in dem Fall dok3) zu erhalten.
Und schliesslich speicherst Du das dok2 (das gleichzeitig das ursprüngliche dok ist) neu ab und änderst dadurch das "Quelldokument" für Deine Kopieraktion nochmal ab...
Deine Feld- Änderungen sind nach dieser Aktion in BEIDEN Dokumenten, weil Du zuerst das Original- Dokument änderst, dann von der Änderung eine Kopie erstellst, und danach das Original- Dokument mit den neuen Werten abspeicherst....
So müsste es aussehen, dann tut es auch das, was Du willst:
Sub Click(Source As Button)
Dim session As New notessession
Dim db As notesdatabase
Dim col As NotesDocumentCollection
Dim doc As notesdocument
Dim doc2 As notesdocument
Dim nuiw As New NotesUIWorkspace
Set db = session.currentdatabase
'holt die ausgewählten Dokumente
Set col = db.UnprocessedDocuments
'Abfragen dass nur ein Dokument markiert ist
If col.Count <> 1 Then
Messagebox "Bitte genau 1 Dokument zum Kopieren markieren.", 0,"Achtung"
Exit Sub
End If
' aus dem aktuellen UIDokument ein BackendDoc erstellen
Set doc = col.GetFirstDocument
'neues Doc generieren und in Datenbank kopieren
Set doc2 = doc.CopyToDatabase(db)
'Felder austauschen zwischen doc2 und doc
doc2.form = "Hardware"
'Hier dann die Felder ändern **********************************
doc2.Seriennummer = "hallo Testeingabe"
'************************************
Call doc2.Save(True,False)
Call nuiv.SelectDocument(doc)
Call nuiw.ViewRefresh
End Sub
EDIT: Ich hoffe, Du hast sauber gefüllte Autoren- Felder in dem Dokument oder Deine User haben mehr als Autoren- Rechte in der Datenbank. Denn sonst wirst Du nach dem
set doc2 = doc.CopyToDatabase(db)
das doc2 unter Umständen nicht mehr bearbeiten können, weil auch die Autoren- Felder mitkopiert wurden. Dann bekommst Du beim Versuch des Speichern die Fehlermeldung "Sie können keine Dokumente ändern, für die sie nicht als zulässiger Autor aufgeführt sind" (oder so ähnlich)