Autor Thema: Wert in dem Feld "Form" überschreiben  (Gelesen 4773 mal)

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Wert in dem Feld "Form" überschreiben
« 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
« Letzte Änderung: 02.10.13 - 14:28:13 von sja »

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Wert in dem Feld "Form" überschreiben
« Antwort #1 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
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
Re: Wert in dem Feld "Form" überschreiben
« Antwort #2 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?
Gruß
Marco

Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß. (Sokrates)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen. (unbekannt)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Wert in dem Feld "Form" überschreiben
« Antwort #3 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 ...

Offline dnotes

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
Re: Wert in dem Feld "Form" überschreiben
« Antwort #4 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.

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Wert in dem Feld "Form" überschreiben
« Antwort #5 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
« Letzte Änderung: 30.09.13 - 22:15:03 von Klafu »
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Wert in dem Feld "Form" überschreiben
« Antwort #6 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

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Wert in dem Feld "Form" überschreiben
« Antwort #7 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
« Letzte Änderung: 01.10.13 - 08:07:30 von Klafu »
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Wert in dem Feld "Form" überschreiben
« Antwort #8 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.

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Wert in dem Feld "Form" überschreiben
« Antwort #9 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

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Wert in dem Feld "Form" überschreiben
« Antwort #10 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.
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Wert in dem Feld "Form" überschreiben
« Antwort #11 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.

Offline Klafu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.944
  • Geschlecht: Männlich
  • Remember the Cookies!
Re: Wert in dem Feld "Form" überschreiben
« Antwort #12 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
„Der einzige Mensch, der sich vernünftig benimmt, ist mein Schneider. Er nimmt jedesmal neu Maß, wenn er mich trifft, während alle anderen immer die alten Maßstäbe anlegen in der Meinung, sie paßten auch heute noch...“

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Wert in dem Feld "Form" überschreiben
« Antwort #13 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


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz