Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: buzi am 24.07.13 - 10:22:17
-
Hallo zusammen,
ich verzweifle seit ein paar Tagen an folgendem Problem:
In ein geöffnetes Dokument soll ein DocLink eingefügt werden als RichTextItem. Ich gehe wie folgt vor: Zuerst das Ui-Document speichern und schließen.
docUnid = uiws.Currentdocument.Document.Universalid
uiws.CurrentDocument.Save
uiws.CurrentDocument.Close
Dann wird das Backend-Document geladen und das RichTextItem mit dem DocLink hinzugefügt.
Set backendDoc = db.GetDocumentByUnid(noteUnid)
Set rtitem = backendDoc.GetFirstItem(rtItemName)
backendDoc.RemoveItem(rtItemName)
Set rtitem = New NotesRichTextItem(backendDoc, rtItemName)
Call rtitem.AppendDocLink(partnerDoc, "Partner in Bios")
Anschließend das Backend-Doc gespeichert und das Ui-Doc neu geöffnet
Call backendDoc.Save(True, True)
backendDoc.saveoptions = "0"
Set newuidoc = ws.editdocument(True, backendDoc, False)
Call newuidoc.GotoField(rtItemName)
Funktioniert alles wunderbar - bis auf die Tatsache, dass alle Änderungen die ich anschließend im geöffneten Dokument durchführe nicht gespeichert werden. Lase ich die letzten zwei Code-Zeilen weg, also das Dokument geschlossen, und öffne ich das Dokument manuell aus der DB, verhält sich alles wie gewünscht. Ich möchte dem User aber natürlich den Schritt ersparen das Dokument wieder von Hand öffnen zu müssen!!
Was mache ich falsch?
-
Hallo,
Wahrscheinlich ist das Feld "SaveOptions" dann immer noch auf "0" gesetzt.
Wenn Du das Dokument 'normal' oeffnest, wird irgenwo dieses Feld geleert oder geloescht?
Andreas
-
Wie kann ich das überprüfen? Wenn ich die SaveOptions Zeile weg lasse bekomme ich ne ganz tolle Felermeldung: "Eine weitere Kopie dieses Dokuments wurde gespeichert während Sie das Dokument bearbeiteten. Sollen Ihre Änderungen auch als Konfliktdokument gespeichert werden?"
-
Du musst warten, bis die Rich Text Operation abgeschlossen ist. Das macht Notes dann mal irgendwann...
Um es zu erzwingen, gibt es die Methode Update.
Auszug aus der Designer Hilfe:
Call notesRichTextItem.Update
Usage
Operations on a rich text item are queued for efficiency. The order and time of completion are not predictable. Use this method to ensure that processing is complete at a certain point.
This method is useful when interacting with the front-end classes.
Also folgendes:
Call rtitem.AppendDocLink(partnerDoc, "Partner in Bios")
Call rtitem.Update
Call backendDoc.Save(True, True)
'Das SaveOptions nicht setzen!
Set newuidoc = ws.editdocument(True, backendDoc, False)
Call newuidoc.GotoField(rtItemName)
Andreas
-
Klingt gut aber läuft immernoch in diese Fehlermeldung mit Konfliktdokument ohne die SaveOptions
-
Probier mal nach dem
uiws.CurrentDocument.Close
ein
Delete uiws.CurrentDocument
vielleicht hilft das
-
Hallo Peter,
den Aufruf so wie du ihn geschrieben hast
Delete uiws.CurrentDocument
meckert der Complier an "Delete not valid on: CurrentDocument".
Schreibe ich
uiws.CurrentDocument.DeleteDocument
kommt zur Laufzeit die Meldung "Dokumentenbefehl ist nicht verfügbar".
-
den Aufruf so wie du ihn geschrieben hast
Delete uiws.CurrentDocument
meckert der Complier an "Delete not valid on: CurrentDocument".
Habe mir sowas fast gedacht
Schreibe ich
uiws.CurrentDocument.DeleteDocument
kommt zur Laufzeit die Meldung "Dokumentenbefehl ist nicht verfügbar".
Du sollst ja auch nicht das Dokument löschen, sondern nur den Speicher.
Ich finde es immer etwas ungeschickt, wenn man keine sauberen Variablen definiert und verwendet, deshalb probiere es doch anstelle von
docUnid = uiws.Currentdocument.Document.Universalid
uiws.CurrentDocument.Save
uiws.CurrentDocument.Close
mal so
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
docUnid = doc.Universalid
uidoc.Save
uidoc.Close
Delete uidoc
Delete doc
...
-
Das backend-Doc sollte ich nicht wirklich löschen oder? Der Code funktioniert zwar so aber er führt immernoch zum selben Ergebnis - Änderungen am neu geöffneten uiDoc werden nicht gespeichert.
-
Das backend-Doc sollte ich nicht wirklich löschen oder?
Aus dem Arbeitsspeicher, nicht aus der Datenbank
Delete doc -> löscht ein Dokument aus dem Arbeitspeicher
Call doc.Remove (True) -> löscht ein Dokument aus der Datenbank
steht auch alles in der Hilfe ...
Änderungen am neu geöffneten uiDoc werden nicht gespeichert.
Hast Du den Hinweis mit den SaveOptions, der früher in dieser Diskussion angebracht wurde, beachtet?
-
Du meinst den Hinweis "Wenn Du das Dokument 'normal' oeffnest, wird irgenwo dieses Feld geleert oder geloescht?" - ??
Ich finde die SaveOptions nicht als bearbeitbares Feld...
-
Wenn das Design der Maske kein Feld 'SaveOptions' enthält, wirst du auch kein bearbeitbares Feld sehen. Heißt im Umkehrschluss aber nicht, dass das Item 'SaveOptions' nicht trotzdem vorhanden ist.
Schau dir über die Eigenschaften des Dokuments mal die Feldliste an, dort sollte 'SaveOptions' auftauchen, wenn du es in dem Dokument über deinen Scriptcode mit einem Wert versorgt hast.
Gruß
Dirk
-
Ok, da hatte ich schon geschaut es aber nicht gesehen.