Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: buzi am 24.07.13 - 10:22:17

Titel: Backend - Frontend
Beitrag 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?
Titel: Re: Backend - Frontend
Beitrag von: ascabg am 24.07.13 - 10:25:45
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
Titel: Re: Backend - Frontend
Beitrag von: buzi am 24.07.13 - 10:48:50
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?"
Titel: Re: Backend - Frontend
Beitrag von: Glombi am 24.07.13 - 10:52:58
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
Titel: Re: Backend - Frontend
Beitrag von: buzi am 24.07.13 - 11:05:10
Klingt gut aber läuft immernoch in diese Fehlermeldung mit Konfliktdokument ohne die SaveOptions
Titel: Re: Backend - Frontend
Beitrag von: Peter Klett am 24.07.13 - 12:04:37
Probier mal nach dem

uiws.CurrentDocument.Close

ein

Delete uiws.CurrentDocument

vielleicht hilft das
Titel: Re: Backend - Frontend
Beitrag von: buzi am 25.07.13 - 10:18:58

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".
Titel: Re: Backend - Frontend
Beitrag von: Peter Klett am 25.07.13 - 10:31:19
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

...
Titel: Re: Backend - Frontend
Beitrag von: buzi am 25.07.13 - 11:57:19
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.
Titel: Re: Backend - Frontend
Beitrag von: Peter Klett am 25.07.13 - 12:16:07
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?
Titel: Re: Backend - Frontend
Beitrag von: buzi am 29.07.13 - 10:18:48
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...
Titel: Re: Backend - Frontend
Beitrag von: Keydins am 29.07.13 - 10:27:29
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
Titel: Re: Backend - Frontend
Beitrag von: buzi am 30.07.13 - 09:19:06
Ok, da hatte ich schon geschaut es aber nicht gesehen.