Autor Thema: Beim Kopieren eines Dokuments in Ansicht soll altes Dokument markiert bleiben  (Gelesen 2769 mal)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
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

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
« Letzte Änderung: 05.05.11 - 15:32:15 von iukhdh »
Thomas von der IuK

klaussal

  • Gast
Vielleicht hiermit ?

Zitat
Call notesDocument.MarkUnread( [username] )

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Du machst das doch in einer NotesUIView - dann kannst Du die Methode SelectDocument verwenden.

Dein Set doc2 = doc
ist falsch - doc2 ist danach das gleiche wie doc.

Es reicht CopyToDatabase, dann Felder tauschen und dann nochmals speichern (CopyToDatabase hat bereits doc2 gespeichert).

Bernhard

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
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:
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.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)
« Letzte Änderung: 05.05.11 - 12:22:56 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Hallo zusammen,

sorry das ich so spät reagiere, kaum schreib ich hier was rein muss ich schon außer Haus. Aber jetzt bin ich wieder da. Danke für Eure Rückmeldungen.

So wie es aussieht und ich aus Todes Posting rauslese, hab ich das Handling mit dem CopytoDatabase falsch verstanden. Werd ich anpassen.

Aber es ist auch bei meinem bisherigen Code nicht so, dass ich hinterher 2 gleiche Dokumente hätte. Ich bekomme einwandfrei ein neues, geändertes Dokument und behalte weiterhin das Originaldokument.

 ??? 

Die Methode SelectDocument war das, was ich gesucht habe. Danke.
Thomas von der IuK

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Nur zur Vollständigkeit:

Bei Todes Code hat noch im oberen Bereich ein wenig gefehlt, so funktioniert es einwandfrei. Es war die View noch nicht berechnet

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
   Dim nuiview As NotesUIView
   
   Set db = session.currentdatabase
   Set nuiview = nuiw.CurrentView
   
   'holt die ausgewählten Dokumente
   Set col = db.UnprocessedDocuments

...
   
   '************************************
   Call doc2.Save(True,False)
   
   Call nuiview.SelectDocument(doc)   
   Call nuiw.ViewRefresh
   
End Sub
Thomas von der IuK

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz