Domino 9 und frühere Versionen > ND8: Entwicklung
Sichere Alternative für ComputeWithForm
jo@chim:
Genau so ähnlich wie das Peter vorgeschlagen hat funktioniert das bei mir seit Jahren ohne Probleme: im Postsave die NoteID an einen Agenten per RunOnServer übergeben, der die Antwortdokumente mit den Referenzen auf das Hauptdokument aktualisiert...
...
--- Code: ---Call agent.RunOnServer(Source.Document.NoteID)
--- Ende Code ---
...
--- Code: ---Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim rdoc As NotesDocument
Dim dc As NotesDocumentCollection
Dim agent As NotesAgent
Set agent = session.CurrentAgent
Set db = session.CurrentDatabase
Set doc = db.GetDocumentByID( agent.ParameterDocID )
Set dc = doc.responses
If Not (dc Is Nothing) Then
Set rdoc = dc.GetFirstDocument
While Not ( rdoc Is Nothing )
On Error Resume Next
Call rdoc.ComputeWithForm( False, False )
Call rdoc.Save(True,False)
Set rdoc = dc.GetNextDocument(rdoc)
Wend
End If
End Sub
--- Ende Code ---
Peter Klett:
aber nicht mit ComputeWithForm, sondern per Script gerechnet ...
basile:
Hallo Ihrs,
vielen Dank für Eure schnellen und ausführlichen Antworten. Das mit dem Agenten (zeit oder Eventgesteuert) oder den Script ist ein etwas anderer Weg, als ich jetzt nutze. Mein Problem ist, dass derjenige Programmierer, der aktualisieren will, sich immer genau die Dokumente ansehen muss und in einer extra Bibliothek/Maske/Whatever Code hinterlegen muss, der dann genau sagt, was in einem Dokumenttyp passieren soll. Ich dachte, es gibt einen mehr Objektorientierten Ansatz, in dem ich sagen kann: "Objekt (Linkdokument), aktualisiere Dich!", ohne im einzelnen genau zu wissen, was da passiert, da die Logik im Objekt (Dokumenttyp) selbst steckt.
Im Prinzip macht ComputWithForm genau das (die Logik steckt in den Feldern der Maske und diese werden halt durchlaufen und spulen ihren Code ab) - oder der Name suggeriert das. leider funktioniert ComputeWithForm nicht mit komplexen Formeln, die Beziehungen zu Views, etc... pflegen.
Ich habe ja keine Probleme, den Code aus der Maske auszulagern, aber das zwingt mich oder jmd. anderen in 1-2...10 Jahren dazu, sich dezidiert mit den Einzelheiten auseinanderzusetzen. Außerdem sollte ich in meinem Linkdokument keinen Felnamen ändern, dann knallt ... oder auch nicht und funktioniert einfach nicht mehr.
Alos, vielen Dank an Alle
Udo
jo@chim:
--- Code: ---aber nicht mit ComputeWithForm, sondern per Script gerechnet ...
--- Ende Code ---
??? Was meinst Du denn damit Peter? Ist es nicht viel aufwändiger, per Script einzelne Felder zu aktualisieren als in einem Rutsch mit ComputeWithForm.?
(Ok StampAllMulti wär auch noch ne Alternative, wenn man tatsächlich nur einzelne Felder aktualisieren will und nicht alle Formeln in der Response neu berechnen...)
basile:
Hallo Joachim,
ich sehe gerade Dein Posting:
genau das ist ja mein Problem: ComputWithForm klingt so, als wenn man die Methode aufruft und sich dann das Document aktualisiert. Man braucht sich keine Gedanken machen, was im einzelnen passiert und wie die Felder gefüllt werden, das sollen die eben selbst wissen.
Bei einfachen Operationen mach ComputeWitForm das auch (ich sach jetzt mal: "Liebes Feld, nehme Deinen Wert, addiere 1 hinzu und schrebibe den Wert in Dich rein!"). Das geht problemlos. Wenn aber die Operationen in einem Feld komplexer werden und noch Daten, wie in meinem Fall aus einem View kommen sollen, dann tut's ComputeWithForm einfach nicht. es passiert ... nichts. nichtmal ne Fehlermeldung. Das ist irgendwie bitter, denn man sieht nicht, wenns nicht klappt.
viele Grüße
Udo
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln