Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Wiesel am 05.12.08 - 13:31:51
-
Hallo!
Ich habe einen LotusScript der zum Schluss einen Agenten starten soll.
Im Designer bin ich da auf einige Beispiele gestoßen, die mich aber nicht weiterbringen, da ich Schwierigkeiten beim Umsetzen habe.
Mein Script sieht bisher so aus:
Sub Initialize
Dim S As New NotesSession
Dim DB As NotesDatabase
Dim DocA As NotesDocument 'altes Dok
Dim DocB As NotesDocument 'neues Dok
Dim col As NotesDocumentCollection
Dim agent As NotesAgent
Set DB = S.CurrentDatabase
Set col = DB.UnprocessedDocuments
Set DocA = col.GetFirstDocument()
Do Until DocA Is Nothing
Set docB = New NotesDocument( db )
Call docB.MakeResponse( docA )
Call docA.CopyAllItems( docB, True )
Call docB.Save( True, True )
Set DocA = col.GetNextDocument(DocA)
Loop
Set agent = db.GetAgent("(Wertsetzen)")
agent.Run
End Sub
Ich bekomme die Fehlermeldung:
Notes error:Im Hintergrund ausgeführter oder eingebetteter Agent verwendet einen nicht unterstützen Auslöser und Suchtyp
Der Agent wird nicht gestartet. Wie starte ich ihn?
Vielen Dank im Voraus,
Wiesel
-
Schau dir mal die Eignschaften des Agent an, ist bestimmt für gewählte Dokumente und das geht nicht aus diesem Kontext.
-
Und was kann man da alternativ machen?
-
Was ist denn die Aufgabe des Agents, muss dieser Dokumente verarbeiten oder geht es auch ohne dem?
-
Der ScriptAgent erstellt ja Antwortdokumente auf Basis von gewählten Hauptdokumenten.
Vor diesem Agent ist ein Agent aktiv, der nach gewünschten Änderungen fragt. Er fragt zu änderndes Feld und gewünschte Änderung ab. Alles per Formelsprache. Die Angaben/Werte werden in variablen (@Environment) gespeichert. Dann erfolgt der Aufruf des SciptAgenten.
Der ScriptAgent soll dann wieder einen Agenten, der ebenfalls in Formelsprache geschrieben ist, aufrufen, der dann die Variablen in das Dokument einsetzt.
-
Und warum macht ihr das nicht in einem Agenten, klingt sehr verworren, historisch gewachsen? Auf jeden Fall würde ich den letzten Agent weglassen und das gleich in dem LS-Agent einbauen.
-
Wenn Du mir sagst, wie ich das hier in Script umsetze:
@Name([CN];@Word( tx_Aenderungen ; "~" ; 1 ))
-
@Word => StrToken()
@name => NotesName class
-
Wenn Du mir sagst, wie ich das hier in Script umsetze:
@Name([CN];@Word( tx_Aenderungen ; "~" ; 1 ))
dim ret_eval as variant
ret_eval = Evaluate( |@Name([CN];@Word( tx_Aenderungen ; "~" ; 1 ))|, doc )
msgbox rev_eval(0)
Andreas
-
Toll!
Und was ist mit @IsError?
Ich muss das hier alles nach Script bringen und finde die Designer-Hilfe dazu meist echt doof:
@If( Feld = "B_AbgabeGrund";
@Do( @SetField("B_AbgabeAuswahl";"Ja");
@SetField(Feld;Wert));
@If( Feld = "B_Kaufpreis";
@If( @IsError(@TextToNumber(Wert)) = 0 ;
@SetField(Feld;@TextToNumber(Wert));
@Return(@Prompt([Ok];"Fehler";"Der angegebene Kaufpreis ist keine Zahl. Bitte Vorgang wiederholen")));
@If( Feld = "B_DatumRechnung";
@If( @Length(Wert) = 10 ;
@SetField(Feld;@TextToTime(Wert));
@Return(@Prompt([Ok];"Fehler";"Das angegebene Rechnungsdatum ist kein Datum. Bitte Vorgang wiederholen")));
@SetField(Feld;Wert))));
-
Und wenn wir das gelöst haben, was kommt dann noch alles ???
Abfrage auf Zahl geht so:
dim item as NotesItem
set item = doc.getFirstItem("Wert")
if item.Type = NUMBERS then
...
else
End If
Und: Die Designer Hilfe ist nicht doof! :P
Andreas
-
Die Designerhilfe jedenfalls ist nicht doof.
Du solltest Dir mal die LotusScript-Sprachreferenz durchlesen, dann findest Du, was Du brauchst und wirst auch erkennen, dass @IsError in LS unnötig ist.
Wie Andreas schon sagte: Vorkauen können wir hier nicht alles, und da es um Dei nGeld geht, musst Du Dich da auch mehr selbst reinknieen.
Bernhard