Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: sja am 30.09.13 - 16:22:59

Titel: Wert in dem Feld "Form" überschreiben
Beitrag von: sja am 30.09.13 - 16:22:59
Lieber @atnotes,

es soll in einer Funktion (LotusScript) unter anderem Wert in dem Feld "Form" geändert werden. Da das ganze Script kompliziert ist, habe ich einen  Test-Button erstellt mit folgendem Script. Beim Ende der Funktion soll das Dokument geschlossen werden ohne Nachfrage, ob das Dokument gespeichert soll. In allen Feldern werden zugeordnete Werte gespeichert ohne Problem, nur in dem Feld "Form" habe ich Probleme, wird immer alter Wert behalten, egal in de Backend oder Frontend ändere ich den Wert und speichere das Dokument.

Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUiDocument
   Set uidoc = ws.CurrentDocument
   Call uidoc.Refresh
   Set doc = uidoc.Document
   
   doc.StatusAngebot = "8"
   doc.abgeschlossen_1 = "ja"
   doc.abgeschlossen_am = "30.09.2013"
   doc.abgeschlossen_durch = "sja"
   'doc.Form = "Abshcluss"
   Call doc.Replaceitemvalue("Form", "Abschluss" )
   Call doc.Save(True, True)
   'Call uidoc.FieldSetText( "Form", "Abshcluss" )
   'Call uidoc.Save()
   doc.saveOption = "0"
   'Call uidoc.Save()
   Call uidoc.Close
End Sub

Bitte um Hilfe. Vielen Dank im Voraus

Sofia
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: Klafu am 30.09.13 - 16:49:31
Hallo Sofia,

warum machst du vor dem doc.ReplaceItemValue ein Call?
Versuch es mal so, wie es in der Hilfe steht.  :)


This script changes the value of the EstimatedCost item to 122.
Dim doc As NotesDocument
Dim item As NotesItem
'...set value of doc...
Set item = doc.ReplaceItemValue( "EstimatedCost", 122 )
Call doc.Save( True, True )

Chris
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: marschul am 30.09.13 - 17:12:54
Du hast hier zwar den Button, aber gibt es mglw. noch eine weitere Aktion, die das Dokument noch einmal aus dem Frontend heraus speichert und dabei den Wert in "Form" wieder überschreibt?
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: Peter Klett am 30.09.13 - 17:13:30
Das mit dem Call geht völlig in Ordnung, kann man so schreiben, wenn man keinen Rückgabewert haben will (habe ich in Zusamenhang mit ReplaceItemValue noch nie anders gemacht, und funktioniert immer).

Ich denke, dass das Hauptproblem darin besteht, dass das Dokument geöffnet ist. Ich würde das ganze umdrehen.

1. Dokument ändern
2. Dokument refreshen
3. Dokument speichern
4. Dokument schließen
5. Form ändern
6. Dokument speichern

Dann kommt da bzgl. Form nichts aus dem UI dazwischen.

Etwa so:

Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUiDocument
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
  
   doc.StatusAngebot = "8"
   doc.abgeschlossen_1 = "ja"
   doc.abgeschlossen_am = "30.09.2013"
   doc.abgeschlossen_durch = "sja"
   Call uidoc.Refresh
   Call uidoc.Save()

   doc.SaveOptions = "0"
   Call uidoc.Close
   Call doc.RemoveItem ("SaveOptions")
   doc.Form = "Abschluss"
   Call doc.Save(True, True)
End Sub

Ich hoffe, das ist etwa das, was Du erwartest ...
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: dnotes am 30.09.13 - 17:23:40
Das eigentliche Hauptproblem ist, dass man das Feld SaveOptions hinten ohne "s" schreibt.
Dann braucht man auch kein replaceitem oder irgend etwas anderes... der Code funktioniert dann einwandfrei.
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: Klafu am 30.09.13 - 22:12:52
Im Prinzip braucht sie auch garkein Saveoption wenn sie nach dem Ändern des Dokuments im Backend auch dort speichert.


Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUiDocument
   Set uidoc = ws.CurrentDocument
   Call uidoc.Refresh
   Set doc = uidoc.Document
   
   doc.StatusAngebot = "8"
   doc.abgeschlossen_1 = "ja"
   doc.abgeschlossen_am = "30.09.2013"
   doc.abgeschlossen_durch = "sja"
   Call doc.Replaceitemvalue("Form", "Abschluss" )
    Call doc.Save(True, True)
   doc.saveOption = "0" (Wird aber hinfällig)
   Call doc.Save(True, True)
   Call uidoc.Close
End Sub

Chris
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: koehlerbv am 30.09.13 - 23:41:17
Natürlich braucht es das Setzen von SaveOptions, denn NotesUIDocument.SavedSinceModified könnte immer noch False sein. Daher gehört auch vorab noch ein NotesUIDocument.Save hinein, um Frontend-Speicherungen, die noch nicht ins Backend-Document publiziert wurden, zu sichern. Insbesondere gilt das, wenn es RTFs im Document gibt, und je nach Kontext ist dann vor den Backend-Stunts sogar noch ein Reload oder eine komplette Auslagerung in ein abgetrenntes Backend-Oject erforderlich!

Bernhard
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: Klafu am 01.10.13 - 08:03:31
Hm, okay. Danke für die Info Bernhard.
Ich habe den ähnlichen Fall bei mir so gelöst und da kommt keine "Wollen Sie speichern?"-Abfrage

Zitat
(...)
Feld = ws.Prompt (PROMPT_OKCANCELEDIT, "Name","Geben Sie bitte ein Item an:")
   If Not Isempty (Feld) Then
      Wert = ws.Prompt (PROMPT_OKCANCELEDIT, "Wert","Geben Sie hier bitte den neuen Wert ein:")
      If Not Isempty (Wert) Then
         Set item2 = doc.ReplaceItemValue(Feld,Wert)
         (...)
         Call doc.Save( False, True )
         (...)
      End If   
   End If
End Sub
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: Peter Klett am 01.10.13 - 09:12:06
Kann es sein, dass Du die Routine auf ein geschlossenes Dokument ausführst?

Wenn Du ein Dokument geöffnet hast, das speichern und "geräuschlos" schließen willst, brauchst Du das SaveOptions, insbesondere wenn die Speicherung im Backend erfolgt. Die Abfrage kommt ja nicht beim Speichern, sondern beim Schließen.

Wichtig ist, dass das SaveOptions gesetzt wird, nachdem das Dokument gespeichert wurde, sonst wird das mitgespeichert, und Du wunderst Dich später, warum die folgenden Änderungen des Dokuments nicht mehr gespeichert werden.

Möglicherweise ist das SaveOptions bei Speicherung des uidoc hinfällig, ich würde es in solch einem Konstrukt trotzdem immer setzen.
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: sja am 01.10.13 - 09:23:48
Hallo @All,

herzlich danke ich allen für die Hilfe, habe was neues für mich dabei gelernt. Ich überlege das alles, ausprobiere und teile die Ergebnisse mit, aber Nachmittag, jetzt muss ich dringend andere Arbeit erledigen.

Vielen Dank
Liebe Grüße
Sofia
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: Klafu am 01.10.13 - 11:05:09
Hallo Peter,

nein. Ich ruf das Script als Aktion in der Menüleiste aus einer Maske heraus auf. Die Änderungen werden eben auch erst beim nächsten öffnen des Dokuments sichtbar.
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: Peter Klett am 01.10.13 - 11:14:42
Hallo Peter,

nein. Ich ruf das Script als Aktion in der Menüleiste aus einer Maske heraus auf. Die Änderungen werden eben auch erst beim nächsten öffnen des Dokuments sichtbar.
Und das Dokument ist dabei im Bearbeitenmodus? Das Verhalten kenne ich eigentlich nur im Lesemodus.

Im Bearbeitenmodus sind auch Änderungen im Backend sofort sichtbar, ausgenommen natürlich Richtext, aber den änderst Du auch nicht mit ReplaceItemValue.
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: Klafu am 02.10.13 - 08:03:50
Guten Morgen zusammen,

in meinem Fall öffne ich das dokument aus einer Ansicht heraus, lass es im "Lesen"-Zustand und ruf dann über die Menüleiste meinen oben geposteten Code auf. Klappt einwandfrei  :)

Aber wir sollten auf Sofias Antwort warten damit ihr Thread nicht zu sehr von ihrer Frage abkommt.

Chris
Titel: Re: Wert in dem Feld "Form" überschreiben
Beitrag von: sja am 02.10.13 - 14:27:43
Hallo @All,

erst vielen Dank für reiche Hilfe, hat mir wirklich sehr geholfen!  :-)

Hier ist meine Lösung für den Button "Abschluss". Den Button u. a. Buttons gehört zur einen Teilmaske "Workflow", wo und auch in einem Skript in der Scriptbibliotheken werden alle verwendete hier Variablen deklariert und einige initialisiert.

Also das ganzen Lösung-Script in dem Button "Abschluss"

Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = ws.CurrentDocument
   Call uidoc.Refresh
   
   Dim result As Integer   
   result = ws.Prompt(PROMPT_YESNO,"Abschluss",   "Soll das Angebot wirklich abgeschlossen werden? ")
   If result = 1 Then
      
      Call uidoc.Refresh
      Set docWF = uidoc.Document
      
      tmpHistory = tmpDatumZeit & ": Abgeschlossen  von " & cName  & Chr(13) & tmpHistory
      
      text1 = "Abgeschlossen."
      text2 = tmpDatumZeit & " abgeschlossen von " &  cName
      
      docWF.abgeschlossen  = text2
      docWF.abgeschlossen_1 = "ja"
      docWF.abgeschlossen_am = tmpDatumZeit
      docWF.abgeschlossen_durch = cName
      docWF.StatusAngebot = "7"   'zum Abschluss
      docWF.history = tmpHistory
      result = ws.Prompt(PROMPT_OK,"Info",text1)
      
      Call uidoc.Save()      'Script in QuerySave: u. a. Call StartWF(doc) -> myWorkflowScript in der ScriptBibliotheken u. a. werden auch alle Versionen vom Angebot abgeschlossen und StatusAngebot auf “8“ gesetzt.      
      
                Set uidoc = ws.CurrentDocument
      Call uidoc.Refresh
      Set docWF = uidoc.Document
      Call docWF.Replaceitemvalue("Form", "Abschluss" )
      Call docWF.Save(True, True)      
      
      docWF.SaveOptions = "0"
      Call uidoc.Close
      
   End If   
End Sub


Noch mal herzlichen Dank und Liebe Grüße

Sofia