Domino 9 und frühere Versionen > ND6: Entwicklung
Agenten mit Übergabeparametern aufrufen
js84:
Guten Morgen,
ich bins noch mal.
Also es besteht folgendes Szenario:
ich hab eine bzw. zwei Forms in beiden sind beliebig viele Felder. Für einige dieser Felder soll eine art History erzeugt werden, in der steht wer wann was geändert hat.
Diese History Funktion (trägt in ein Feld die benötigten Werte ein)ist bereits implementiert (für ein Feld). Es wäre aber jetzt vollkommen uneffektiv diesen Code in jedes Feld zu schreiben. Deshalb will ich einen Agenten der läuft falls sich ein Feldwert geändert hat.
Die Änderung überprüfe ich derzeit noch in den Events Entering bzw. Exiting und rufe in Exiting meine History Funktion auf.
Sub Entering(Source As Field)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
'Save field content on entry to compare on exit
Set uidoc = workspace.CurrentDocument
sFieldOnEntry1 = uidoc.FieldGetText("P_Status")
'sFieldOnEntry1 ist eine globale Variable
End Sub
Sub Exiting(Source As Field)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim p_status,author As Variant
Dim t_d,his_string As String
Set db = s.CurrentDatabase
Set uidoc = workspace.CurrentDocument
Set doc=uidoc.Document
p_status = uidoc.FieldGetText("P_Status")
p_status=Cstr(p_status)
'If nothing has changed exit sub
If p_status=sFieldOnEntry1 Then
Exit Sub
'Project status has changed, make new entry in history
Else
t_d=Cstr(doc.LastModified)
author=doc.Authors(0)
his_string=" ;"&author &" "& t_d & " " & p_status & " ;"
Call uidoc.FieldAppendText("P_Status_History",his_string)
End If
Call doc.Save(False,True)
End Sub
Das Problem ist jetzt das ich dem Agenten nicht sagen kann in welchem Feld er aufgerufen wurde, damit er nur für dieses die die History Funktion ausführt.
Vielleicht habt ihr eine Idee wie und ob man das umsetzen kann.
LG
Jana
Axel:
Hi,
du hast recht, dass ist nicht sehr effektiv. Außerdem ist das Ganze im Exiting - Event auch noch ziemlich unsicher. Denn es ist nicht sichergestellt, dass der Event auch wirklich ausgeführt wird.
Besser ist es, den Feldinhalt der entsprechenden Felder im PostOpen-Event der Maske in Variablen auszulesen und im QuerySave-Event zu prüfen, ob der Feldinhalt geändert wurde und dann anhand des Ergebnisses die Histrory zu schreiben.
Axel
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln