Domino 9 und frühere Versionen > ND7: Entwicklung

Dokument im Frontend nicht speichern, im Backend speichern

<< < (2/3) > >>

koehlerbv:
Sorry, da habe ich Dich missverstanden.

Dein Plan mit dem "ein bisschen speichern" wird so nicht klappen. Solange Du das Dokument noch "mehr oder weniger" offen hast, wird jeder Versuch, auf das Dokument "anders" zuzugreifen, wieder zur In-Memory-Instanz führen.

Bernhard

Peter Klett:
Dim db As NotesDatabase
Dim id As String
Set db = ws.CurrentDatabase.Database
id = ws.CurrentDocument.Document.UniversalID -->> Ich gehe den umweg über die DokumentenID
Dim newdoc As NotesDocument
ws.CurrentDocument.EditMode=False  -->> hier kommt die Abfrage "möchten Sie.." beantwortet mit nein
Call ws.CurrentDocument.Close(True)
Set ws = New NotesUIWorkspace
Set newdoc=db.GetDocumentByUNID(id)
Call setstatus(newdoc,newstate)  -->> Ändert das Statusfeld und ein paar Texte (Backend)Call newdoc.Save(True,False)

Ich denke, Du musst das aktuelle Dokument aus dem Speicher löschen. Versuch mal, ws neu zu setzen (wie in rot angegeben). Alternativ übergibst Du nur die id an setstatus, suchst Dir dort anhand der id das Dokument und speicherst es innerhalb der Sub.

Nachtrag:

Delete ws könntest Du auch mal probieren. Habe ich noch nie gemacht, aber bei docs und uidocs hat das schon oft geholfen.

koehlerbv:
Peter, NotesSession und NotesUIWorkspace gibt es immer nur einmal.

Würde das mit der ID-Übergabe klappen (aber das Dokument ist ja noch In-Memory), dann würdest Du für den Fall "Speichern? Ja!" einen sauberen Speicherkonflikt provozieren.

Bernhard

koehlerbv:
Etwas könnte Mirko noch probieren:

In der Maske global eine Variable definieren.
Im PostOpen die NoteID in der Variable speichern.
Hiermit im Terminate einen entsprechenden Agent aufrufen (und hoffen, dass Terminate gründlich war).
Wurde QuerySave komplett durchlaufen, dann kann der Agentaufruf im Terminate entfallen.

Probiert habe ich das aber nicht.

Bernhard

Mirko:
Ich habe gerade noch mal getestet. Ich speichere die Dokumenten-ID per Button in eine Variable, die ich in den Globals der Maske definiert habe. im Terminate der Maske läuft dann:

--- Code: --- Dim ws2 As New NotesUIWorkspace
Dim currdoc As NotesDocument
Set currdoc= ws2.CurrentDatabase.Database.GetDocumentByUNID(testid)
Call currdoc.replaceitemvalue("unbenannt4","gespeichert per button"+Cstr(Now))
Call currdoc.Save(True,False)

--- Ende Code ---
Obwohl ich extra noch einemal einen neuen Workspace anlege, bleibt das Ergebnis das gleiche. Es werden alle Daten gespeichert. Also muß mein Anwender wohl damit leben, dass jedesmal ein "gespeichert" in der Historie steht, wenn das Dokument auch nur weitergeleitet, nicht aber geändert wurde.
Einzige Möglichkeit wäre, in jedem Feld das OnCahange-Ereignis auszuwerten, damit eine Globale Variable setzten und die beim Speichern zu prüfen. Allerdings speichert das auch dann die Änderungen des Users, wenn der User die Abfrage "Möchten Sie ..." mit "nein" quittiert. Da werde ich wohl meinen User überzeugen müssen.
Man bräuchte so was wie ein Flush, wenn man das Dokument schließt und neu öffnet, damit der Cache leer ist ....
Trotzdem vielen Dank für Eure Mithilfe

Gruß Mirko

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln