Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Wiesel am 05.12.08 - 13:31:51

Titel: Agent per Scipt starten
Beitrag 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
Titel: Re: Agent per Scipt starten
Beitrag von: jBubbleBoy am 05.12.08 - 13:34:27
Schau dir mal die Eignschaften des Agent an, ist bestimmt für gewählte Dokumente und das geht nicht aus diesem Kontext.
Titel: Re: Agent per Scipt starten
Beitrag von: Wiesel am 05.12.08 - 13:39:55
Und was kann man da alternativ machen?
Titel: Re: Agent per Scipt starten
Beitrag von: jBubbleBoy am 05.12.08 - 13:58:33
Was ist denn die Aufgabe des Agents, muss dieser Dokumente verarbeiten oder geht es auch ohne dem?
Titel: Re: Agent per Scipt starten
Beitrag von: Wiesel am 05.12.08 - 14:04:53
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.
Titel: Re: Agent per Scipt starten
Beitrag von: jBubbleBoy am 05.12.08 - 14:14:51
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.
Titel: Re: Agent per Scipt starten
Beitrag von: Wiesel am 05.12.08 - 14:33:49
Wenn Du mir sagst, wie ich das hier in Script umsetze:

@Name([CN];@Word( tx_Aenderungen ; "~" ; 1 ))
Titel: Re: Agent per Scipt starten
Beitrag von: m3 am 05.12.08 - 14:36:19
@Word => StrToken()
@name => NotesName class 
Titel: Re: Agent per Scipt starten
Beitrag von: Glombi am 05.12.08 - 14:37:15
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
Titel: Re: Agent per Scipt starten
Beitrag von: Wiesel am 05.12.08 - 15:21:19
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))));
Titel: Re: Agent per Scipt starten
Beitrag von: Glombi am 05.12.08 - 15:29:34
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
Titel: Re: Agent per Scipt starten
Beitrag von: koehlerbv am 05.12.08 - 15:33:17
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