Domino 9 und frühere Versionen > ND8: Entwicklung
Feldänderungen im Hauptdokument automatisch auf Antwortdokumente übertragen
SaSaWu:
Hallo!
Unter http://atnotes.de/index.php?topic=13984.0 ist ein Script abgebildet (s.u.), mit dem Änderungen von Feldwerten im Hauptdokument automatisch auf die Antwortdokumente übertragen werden. Ich bin kein "Script'ler", es funktioniert dennoch halbwegs. Allerdings werden die Werte erst bei Aufruf der Antwortdokumente (Bearbeitungsmodus) geändert und diese müssen dann noch gespeichert werden. Welche Einstellungen muss ich vornehmen, um auch dies automatisiert hinzubekommen? Oder muss/kann ich einen Agenten laufen lassen, der dies vollzieht?
--- Code: ---3.4 Felder in allen Antwortdokumenten aktualisieren, sobald sich diese im Hauptdokument ändern
Wenn Änderungen im Hauptdokument auf alle Antwortdokumente übertragen werden sollen, kann man dies über den Query Save – Event in der Hauptdokument-Maske steuern.
Hilfreich sind hierbei „Responses property“ und „StampAll method“ in der „NotesDocumentCollection“.
Beispiel:
Code:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
'------------------------------------------------------------------------------------------------------------------
'Zweck: Feldwerte werden beim Speichern in alle Antwort-Dokumente übernommen
'------------------------------------------------------------------------------------------------------------------
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
If Source.IsNewDoc Then Exit Sub 'Wenn UIDoc neu ist dann verlasse Script
Set doc = Source.Document 'UIDoc zu Backend-doc
'alle Antwortdocs des Backend-Docs werden in die Collection aufgenommen
Set dc = doc.Responses
'Setze alle Felder der Collection, gespeichert wird automatisch
Call dc.StampAll( "Re_Feld1" , doc.Feld1(0) )
Call dc.StampAll( "Re_Feld2" , doc.Feld2(0) )
Call dc.StampAll( "Re_Feld3" , doc.Feld3(0) )
End Sub
Dieses Script kann man - etwas angepasst - auch in einem Agenten verwenden, der beispielsweise täglich alle Antwortdokumente aktualisiert.
--- Ende Code ---
Driri:
Mit StampAll werden die Items aber gesetzt. Ich vermute mal, daß dein Problem berechnete Felder sind, die sich aus den "gestampten" Items ableiten.
Da müßtest Du entweder die berechneten Felder in dem Script mit berücksichtigen oder das Script so umbauen, daß die Dokumente aus der Collection alle noch einmal mit ComputeWithForms bearbeitet werden.
SaSaWu:
Danke für die Antwort!
Ok, die Felder im Antwortdokument sind "berechnet"
--- Code: ---@If (@IsNewDoc ; Aufgabe ; @GetDocField( $Ref; "Aufgabe") )
--- Ende Code ---
und haben denselben Feldnamen wie im Hauptdokument. "Mein" Script sieht an dieser Stelle so aus:
--- Code: ---
Call dc.StampAll( "Re_Aufgabe" , doc.Aufgabe(0) )
--- Ende Code ---
Eine "Berücksichtigung" der Felder im Script oder auch ein "Umbauen" bekomme ich nicht hin. Wie gesagt: "bin kein Sript'ler"!
DAU-in:
--- Zitat von: SaSaWu am 04.09.12 - 17:15:51 ---Danke für die Antwort!
Ok, die Felder im Antwortdokument sind "berechnet"
--- Code: ---@If (@IsNewDoc ; Aufgabe ; @GetDocField( $Ref; "Aufgabe") )
--- Ende Code ---
und haben denselben Feldnamen wie im Hauptdokument. "Mein" Script sieht an dieser Stelle so aus:
--- Code: ---
Call dc.StampAll( "Re_Aufgabe" , doc.Aufgabe(0) )
--- Ende Code ---
--- Ende Zitat ---
Du schreibst sowohl bei neuen als auch bei alten Dokumenten den Inhalt des Feldes Aufgabe rein?
Wenn du den Wert setzt über Stampall, sollte der Wert enthalten sein.
Sind die Feldwerte alle korrekt geschrieben?
Hast du in deinem Script mehrere Stampalls nacheinander?
Ich hatte einmal den Fall, dass mehrere Aufrufe von Stampall nacheinander nicht durchgelaufen sind bei einer grösseren Collection, das war aber unter 6.5.4.
Wie sieht dein Script denn aus?
Hast du das die Dokumente geöffnet im Frontend?
SaSaWu:
--- Zitat von: DAU-in am 04.09.12 - 18:41:36 ---
--- Ende Zitat ---
--- Zitat ---Du schreibst sowohl bei neuen als auch bei alten Dokumenten den Inhalt des Feldes Aufgabe rein?
--- Ende Zitat ---
Ja!
--- Zitat ---Wenn du den Wert setzt über Stampall, sollte der Wert enthalten sein.
Sind die Feldwerte alle korrekt geschrieben?
--- Ende Zitat ---
Denke schon!
--- Zitat ---Hast du in deinem Script mehrere Stampalls nacheinander?
--- Ende Zitat ---
Nein!
--- Zitat ---Ich hatte einmal den Fall, dass mehrere Aufrufe von Stampall nacheinander nicht durchgelaufen sind bei einer grösseren Collection, das war aber unter 6.5.4.
Wie sieht dein Script denn aus?
--- Ende Zitat ---
s.u.
--- Zitat ---Hast du das die Dokumente geöffnet im Frontend?
--- Ende Zitat ---
Nein
Danke schonmal für die Unterstützung!
--- Code: ---Code:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
'------------------------------------------------------------------------------------------------------------------
'Zweck: Feldwerte werden beim Speichern in alle Antwort-Dokumente übernommen
'------------------------------------------------------------------------------------------------------------------
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
If Source.IsNewDoc Then Exit Sub 'Wenn UIDoc neu ist dann verlasse Script
Set doc = Source.Document 'UIDoc zu Backend-doc
'alle Antwortdocs des Backend-Docs werden in die Collection aufgenommen
Set dc = doc.Responses
'Setze alle Felder der Collection, gespeichert wird automatisch
Call dc.StampAll( "Re_Aufgabe" , doc.Aufgabe(0) )
End Sub
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln