Domino 9 und frühere Versionen > ND6: Entwicklung
Felder in Antwortdokumenten aktualisieren
2stupid4this:
Irgendwie stehe ich auf dem Schlauch.
Habe ein Dokument, welches Antwortdokumente besitzt. Diese Antwortdokumente können unter umständen ebenfalls Antwortdokumente enthalten. Nun möchte ich bei Änderung des Feldes imHauptdokument bei allen Antwortdokumenten und Antworten auf Antworten diesen Feldinhalt ebenfalls durchschreiben. Bis zum ersten Antwortdokument ja kein Problem, aber ich würde dies geren mit einer Art schleife machen, damit das alles dynamisch und nicht fest ist. Einmal kann es nur ein Antwortdokument geben, ein anderes mal mehrere. Dioe Dokument, die ihrerseit wieder Antwortdokumente besitzen haben die Form "Kapitel" die restlichen die Form "Inhalt". Kapitel kann somit sowohl wieder ein Kapitel, als auch Inhalt als Antwortdokumente haben, usw.
Habs mal so angedacht, aber das funktioniert so nicht:
--- Code: ---sub Änderung(doc as NotesDocument)
...
Set col=doc.Responses
Set respdoc=col.GetfirstDocument
While Not respdoc Is Nothing
call respdoc.ReplaceItemValue("Berechtigung",doc.Berechtigung)
call respdoc.save(False,False)
if respdoc.Form(0)="Kapitel" then call Änderung(respdoc)
set respdoc.GetNextDocument(respdoc)
wend
--- Ende Code ---
Beim verschachteln wird ja doc mit respdoc überschrieben. Denke ich hier irgendwo um die ecke, bzw. kann mir jemand den Kntoen im Kopf lösen.
Danke im voraus
2stupid4this
jo@chim:
Ich habe das Aktualisierungsproblem bei Antwortdokumenten so gelöst:
Die Referenzfelder im AW-Dokument sind vom Typ berechnet mit der Formel
--- Code: ---@If(@IsNewDoc;FeldImHauptDok;@GetDocField($Ref; "FeldImHauptDok"))
--- Ende Code ---
Die Option Formeln übernehmen Werte aus gewähltem Dokument in der Maske muss hierfür aktiviert sein.
Falls Du diese berechneten Felder in den Antwortdokumenten zeitnah aktualisieren willst, kannst Du das über ein LS ähnlich dem, mit dem Du es versucht hast im QuerySave erreichen:
--- Code: ---Sub updateResponses(Source)
Dim doc As NotesDocument
Dim rdoc As NotesDocument
Dim dc As NotesDocumentCollection
Dim success As Variant
Set doc = Source.document
Set dc = doc.responses
If Not (dc Is Nothing) Then
Set rdoc = dc.GetFirstDocument
While Not ( rdoc Is Nothing )
success = rdoc.ComputeWithForm( False, False )
If success Then
Call rdoc.Save( False, False )
End If
Set rdoc = dc.GetNextDocument(rdoc)
Wend
End If
End Sub
--- Ende Code ---
Ansonsten tuts ein Agent, der alle Antwortdokumente per @Command( [ToolsRefreshAllDocs] ) aktualisiert
2stupid4this:
Das mit den berechneten felder funktioniert leider nicht, da in abhängigkeit von einem anderen Feld das Übeschreiben unterbunden werden soll. Vor allem habe ich ja nicht nur eine Gliederungsebene (Antwort auf Hauptdokument), sondern unter Umständen mehrere Ebenenen und genau da liegt mein Problem, dass ich das nicht hinbekomme, ausser ich gebe dreimal den gleichen Code für die Aktualiserung ein, jedesmal mit einer anderen Variablen, damit ich jederzeit in jeder Ebene mit der Aktualisierung weitermachen kann.
koehlerbv:
Sowas muss rekursiv geköst werden, d.h., wenn Du eine Aktualisierung für ein Dokument mit Responses machst, rufst Du Deine Update-Routine auf. Und diese ruft sich selber wieder auf, wenn ein zu aktualisierendes child document wiederum auf "HasReponses" positiv reagiert.
Bernhard
ossigo:
Unter Best Practices findest Du einen Thread über Haupt und Antwortdokumente (http://atnotes.de/index.php?topic=13984.0)
Dort unter 3.9 steht was für rekursives Löschen von Antwortdokumente. So in der Art kannst Du das auch für Deine Zwecke gebrauchen, must nur anpassen...
Jens
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln