Das Notes Forum

Best Practices => Diskussionen zu Best Practices => Thema gestartet von: TMC am 19.05.04 - 22:06:48



Titel: BP: Notes Agenten
Beitrag von: TMC am 19.05.04 - 22:06:48
Ich möchte eine Dokumentation zu Agenten erstellen.

u.a. wäre wohl interessant:
+ Wie stelle ich einen Agenten ein (All Documents / Selected Documents etc.)
+ @Command([ToolsRunMacro])
+ Einschränkungen (UI, andere Server, etc.)
+ Aufruf eines Agenten per Script
+ Agent von einer Datenbank ruft einen Agenten aus einer 2. Datenbank auf inkl. Dokumentübergabe (hab ich erst letzte Woche gemacht.....)
+ Neue R6-Features

Aufgrund des Umfanges (inkl. Beispielscripts etc.) wird dies wohl wieder eine PDF werden (ähnlich: Schleifenkunde in Lotus Script). Ich werde da auch auf die Hilfe von Euch angewiesen sein :-)

Im LDD gibt es auch eine Linkliste: Agent FAQ (http://www-10.lotus.com/ldd/46dom.nsf/7e6c7e584a76331b85256a46006f083e/574c99ccb345839185256976004e811e?OpenDocument)

Was für Themen interessieren Euch noch im Bezug auf Agenten ?
Wo sind immer wieder mal Missverständnisse? Was wird immer wieder gefragt? Was ist unklar, wo gibts Probleme?
Hat schon wer von Euch einen Überblick was in R7 neu kommt bezügl. Agents? (dann könnte man das gleich in einem Kapitel berücksichtigen)
etc. etc.


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 20.05.04 - 21:31:23
Ich habe unten mal ein erstes Draft angehängt.

Defizite habe ich hier noch bezüglich Java-Agenten.
Web habe ich auch noch nicht hinreichend geschildert (Probleme wie dass diese immer voll in den Speicher geladen werden - also Performance-Berücksichtigungen  etc.).

Außerdem fehlen noch andere Dinge wie
 - Agent Debugging & Logging
 - Mehr Praxisbeispiele (bisher hab ich nur eines)
 - die offenen Punkte

Aber vielleicht fühlt sich ja wer von Euch mit meinem Draft angesprochen um noch Input zu liefern :-)

EDIT:
- 21.05.04 12:00: Neue Draft-Version 0.07
- 21.05.04 14:30: Neue Aktualisierung
- 21.05.04 23:00: Updated
- 05.06.04 20:50: Veröffentlichung in BP

BP: Notes Agenten (http://www.atnotes.de/index.php?board=26;action=display;threadid=16181)


Titel: Re:BP: Notes Agenten
Beitrag von: animate am 20.05.04 - 21:47:04
ich hab keinen Input, aber beim Lesen der Trigger stellte ich mir plötzlich die Frage:
Was passiert, wenn es mehrere Agents gibt, die auf ein bestimmtes Event (z. B. Before/After mail arrives) reagieren?
Werden alle ausgeführt? Wenn ja, in welcher Reihenfolge? ...

P.S. Das soll keine Aufforderung sein, diese Frage für mich zu beantworten


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 20.05.04 - 21:57:35
Danke Thomas, für Dein Feedback.

Ist eine sehr berechtigte und interessante Frage....

Der Trigger "Before new mail arrives" kann nur 1mal pro DB gesetzt werden. Der Client bringt dann auch eine Fehlermeldung.....

Die anderen Trigger (after mail arrives, when documents have been pasted etc.) können aber vielfach existieren - also in mehreren Agents. Konflikte sind da u.U. vorprogrammiert.
Ich habe gerade leider keinen Server hier zum testen.



Titel: Re:BP: Notes Agenten
Beitrag von: animate am 20.05.04 - 21:59:16
nochwas

Zitat
Generell arbeiten wir hier auch mit UI-Methoden – damit z.B. ein PostOpen des Zieldokumentes ausgeführt wird. Diese hier verwendete Methoden werden zwar offiziell gar nicht unterstützt lt. R5-Designerhilfe (Run method der agents property: „You cannot use the Notes UI classes in an agent called by this method.“), aber funktionieren hier. Lediglich ein Workaround (eine Art Reopen) ist notwendig, da wir mit einem Richtextfeld arbeiten.

ich kann n Fälle aufzählen, bei denen die Dokumentation richtig ist und UI-Klassen nicht verwendet werden können. Also können schon, aber es funktioniert nicht.


Schöner Artikel!


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 20.05.04 - 22:17:54
Zum Thema UI:
Typische UI-Dinge wie msgbox klappten bei mir auch nicht (kompilieren also speichern klappt, aber es kommt einfach keine msgbox). Aber hier musste ich feststellen (Trial and error), dass UI <> UI im Bezug auf notesuidocument. Diese Thematik fand ich heraus, weil ich unbedingt bestehende Postopen-Events laufen lassen wollte (um diese nicht erneut im Backend-Agenten nachzubilden). Und das klappt hier auch.
Sollte ich vielleicht noch in diesem Beispiel erwähnen (oder UI's ganz weglassen um Verwirrungen zu vermeiden).

Zitat
Schöner Artikel!
Schön, dass er Dir gefällt. Und danke fürs durchlesen.
Wobei ich schätzungsweise erst ca. 60-70% vom Inhalt her habe.....



Titel: Re:BP: Notes Agenten
Beitrag von: fritandr am 20.05.04 - 23:20:25
Hallo Matthias,

ich habe Deinen Artikel gerade mal kurz überflogen. Ist gut gelungen!
Am Wochenende komme ich hoffentlich dazu, das PDF mal wirklich komplett durchzulesen. Vielleicht fällt mir dann ja noch was ein/auf.

Hat schon wer von Euch einen Überblick was in R7 neu kommt bezügl. Agents? (dann könnte man das gleich in einem Kapitel berücksichtigen)
Dazu kann ich leider noch nichts sagen. Habe zwar hier mal einen Client installiert. Aber bis jetzt noch keine Gelegenheit gehabt, damit auch zu programmieren.

Viele Grüße
Andreas


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 21.05.04 - 10:21:26
Was passiert, wenn es mehrere Agents gibt, die auf ein bestimmtes Event (z. B. Before/After mail arrives) reagieren?
Werden alle ausgeführt? Wenn ja, in welcher Reihenfolge? ...

Jetzt mal auf einem 6.5er Server getestet:

Ich habe 2 Agenten erstellt mit Event-Trigger "When documents are pasted" und einfacher Aktion:
- Agent 1: Modify field 'Feld1 ': Set to 'Agent 1'
- Agent 2: Modify field 'Feld1 ': Set to 'Agent 2'

Ergebnis: Die Agenten laufen in alphabetischer Reihenfolge durch (und nicht z.B. anhand Erstellungs- oder Speicherdatum). Es finden auch 2 Speichervorgänge statt lt. $Revisions-Feld.


Titel: Re:BP: Notes Agenten
Beitrag von: koehlerbv am 21.05.04 - 11:27:31
Wie immer wieder eine hervorragende Arbeit, matthias. Vielen Dank.

Was ich noch aufnehmen würde: Den AgentManager AMgr (der ja für die Ausführung triggered agents verantwortlich ist, somit auch für die genannten Einschränkungen hinsichtlich Startzeit und Starthäufigkeit), und dass der auch mal beschäftigt sein kann (ist ja auch nur'm Mensch ;-) sowie die Dinge, die man auf der Serverkonsole mit ihm anstellen kann.

Debugging wäre noch ein Thema sowie logging (hier auch: Was der Administrator wissen sollte über den Agentablauf - und was den Programmierer interessieren sollte).

RunOnServer ist noch ein nettes Thema - sowie die Übergabe von Informationen aus einer Routine an einen aufgerufenen Agent.

Ach ja, vielleicht noch was: Agents, um Formel-Aktionen um LS zu ergänzen sowie die Möglichkeit, mit einem Agent in einer Ansicht gewählte Dokumente zu verarbeiten (und dabei die Markierung gleich aufzuheben).

Ich glaub', je länger ich darüber nachdenke, kommt wohl noch Stoff für ein ganzes Buch zusammen  ;)

Bernhard


Titel: Re:BP: Notes Agenten
Beitrag von: koehlerbv am 21.05.04 - 11:39:26
Einen hab' ich noch - einen hab' ich noch:
Server based agents und LS frontend Klassen und Methoden. Was geht und was geht nicht ?
Dim ws As New NotesUIWorkspace ist schon ein Killerkriterium für solch einen Agent, wohingegen die Massage-Box akzeptiert (aber natürlich nicht ausgeführt wird).
Wie kann man Code ausführen (zum Bleistift aus einer ScriptLib), der NotesUI-Elemente enthalten muss, da dieser Code auch von client based-Programmen aufgerufen wird (-> Execute).

To be continued ...

Bernhard


Titel: Re:BP: Notes Agenten
Beitrag von: Hernan Cortez am 21.05.04 - 12:03:13
am besten zu dem Thema fand ich immer die Artikel von Julie Kadashevich: http://www-10.lotus.com/ldd/today.nsf/Author?OpenView&Start=105.1&Count=30&Expand=105#105 (http://www-10.lotus.com/ldd/today.nsf/Author?OpenView&Start=105.1&Count=30&Expand=105#105)


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 21.05.04 - 12:11:24
@Bernhard:
Danke für die guten Themenvorschläge. Werde versuchen möglichst alles einzubauen.
Habe oben noch eine aktuelle Draft (Version 0.07  ;D ) angehängt....


@Axel: Julie hat ja auch die Agent FAQ (http://www-10.lotus.com/ldd/46dom.nsf/7e6c7e584a76331b85256a46006f083e/574c99ccb345839185256976004e811e?OpenDocument) zusammengestellt. Ein paar Artikel habe ich schon begleitend zu dieser Doku durchgesehen, ist interessant.




Titel: Re:BP: Notes Agenten
Beitrag von: Semeaphoros am 21.05.04 - 12:53:27
Na ja, Julie, obwohl sie sich zur Zeit zur Konditormeisterin ausbilden lässt, ist simpel und einfach MISS AGENT, sprich Teamleader für das Agent-Entwicklungsteam - zur Zeit aber wie erwähnt nur in Teilzeitbeschäftigung .....


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 21.05.04 - 18:00:38
@Bernhard:

Server based agents und LS frontend Klassen und Methoden. Was geht und was geht nicht ?
Dim ws As New NotesUIWorkspace ist schon ein Killerkriterium für solch einen Agent, wohingegen die Massage-Box akzeptiert (aber natürlich nicht ausgeführt wird).
Wie kann man Code ausführen (zum Bleistift aus einer ScriptLib), der NotesUI-Elemente enthalten muss, da dieser Code auch von client based-Programmen aufgerufen wird (-> Execute).

Mit R6 gibts da ja auch schon eine schöne Neuerung, was ich noch hinzugefügt habe:
Zitat
In R5 laufen Backend-Agenten, die UI-Klassen enthalten, bereits beim Laden auf einen Fehler und diese Agenten werden erst gar nicht ausgeführt – ein einziges Dimmen einer UI-Klasse führt hier schon zum Abbruch. Fehler die bereits beim Laden des Agenten auftreten sind schwierig zu debuggen: diese erscheinen zwar auf der Serverkonsole und im Server-Log („Unknown LotusScript error“ oder „Error loading USE or USELSX module: ....“), können aber programmatisch nicht abgefangen werden.

Ab R6 werden Backend-Agenten mit UI-Klassen geladen und ausgeführt. Sobald ein UI-Objekt im Script gedimmt wird, folgt ein Laufzeitfehler Nr. 217: „Error creating product object“. Hier kann man den Fehler mit einem simplen Errorhandling abfangen.

Aber kannst Du bitte mal ein konkreteres Beispiel nennen im Zusammenhang Backend-Agent, UI und der Execute-Function? Da komme ich jetzt nicht drauf wie man das in der Praxis sinnvoll verwenden könnte.



Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 22.05.04 - 18:46:51
**PDF updated**
http://217.160.137.156/user/bp/tmc/_bestpractices/agenten/Agenten_DRAFT.pdf

Insbesondere neu ist:
 + Kap. Agentenaufruf aus Formelsprache und Script
 + ein paar weitere neue R6-Features ergänzt
 + Kapitel "Agenten-Baukasten"

Im wesentlichen fehlt noch u.a.:
 - Antwort / Hilfe von Bernhard zu meinem Posting vom 21.05.04 18:00:38
 - AMgr (da fehlt mir leider das Backgroundwissen)
    ----> Kann/möchte das wer von Euch beschreiben?
 - Rechte auf Agent-Basis vergeben
 - evtl. doch noch ausführlicher Logging & Debugging beschreiben (habe ich sehr oberflächlich behandelt - aber Verweis auf entsprechende Infoquellen)


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 22.05.04 - 19:00:17
Noch was zu R7:
Ich habe mir mal die Agenten im R7-Beta1-Client angesehen.
Bezüglich Agenten konnte ich aber nicht wirklich was neues entdecken (außer dass beim Rumklicken 2mal die RBOD kam  ;D ) Als Designerhilfe ist ja auch nur die vom 651er Designer dabei.
Ich denke ich werde daher noch warten mit den R7-Features bis R7 in der Final-Version verfügbar ist.


Titel: Re:BP: Notes Agenten
Beitrag von: koehlerbv am 23.05.04 - 22:05:41
Zitat
Aber kannst Du bitte mal ein konkreteres Beispiel nennen im Zusammenhang Backend-Agent, UI und der Execute-Function? Da komme ich jetzt nicht drauf wie man das in der Praxis sinnvoll verwenden könnte.

Hallo, Matthias,

bitte entschuldige die späte Antwort ...

Folgendes Szenario "from the wild": Eine Routine bearbeitet Dokumente, die von einer Jahreszahl abhängig sind. Normalerweise läuft dies automatisch ab, und bearbeitet werden dann alle Jahre, die als gültig aus einem Konfigurationsdokument ausgelesen werden.
Das ganze und absolut identische Procedere soll aber auch im Dialog mit dem Admin für ein von ihm gewähltes Jahr ablaufen können. Deswegen die ganze Routine identisch nochmals erstellen ohne UI-Klassen ? Blöde Idee ... Aber
Dim ws as New NotesUIWorkspace
darf ja in einem scheduled agent nicht auftreten.

Daher folgendes kleines Code-Snippet in der Lib:
Code:
   If bIsInteractive = True Then
   'Display a prompt to select the desired year:
      szExecuteCode = |
         Dim ws As New NotesUIWorkspace
         szContingentYear = ws.Prompt (PROMPT_OKCANCELLIST, "Auswahl Jahr", "Für welches Jahr sollen Dokumente erstellt werden ?", vSetupValidYears (0), vSetupValidYears) |
      
      Execute szExecuteCode
      
      If szContingentYear = "" Then
         szMsg = "Die Dokumenterstellung wurde abgebrochen !"
         Msgbox szMsg, MB_ICONINFORMATION, "Abbruch"
         Exit Sub
      End If
   End If 'bIsInteractive = true"

Der scheduled agent ruft diese Routine mit bIsInteractive = False auf. Damit bekommt der Server niemals mit, dass da mit dem NotesUIWorkspace gedealt wird.

Hilft Dir das erstmal weiter ? Ansonsten bitte eine eMail schicken an die bekannte Adresse.

Einen guten Wochenstart und viel Erfolg mit Deiner Klasse-Agentdoku wünscht

Bernhard


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 25.05.04 - 19:17:01
Hi Bernhard,

kein Problem, wir sind ja hier nicht in Eile  :)

Danke für die Infos, jetzt ist einiges klarer. Ich werde das mal gelegentlich für die Doku aus/umformulieren - dann kannst Du ja nochmal drüberschauen.


Titel: Re:BP: Notes Agenten
Beitrag von: animate am 25.05.04 - 20:39:47
Hmm, dieses Beispiel von Bernhard finde ich etwas ungeeignet für "Best Practices" (vielleicht sogar den ganzen Anwendungsbereich
Zitat
Wie kann man Code ausführen (zum Bleistift aus einer ScriptLib), der NotesUI-Elemente enthalten muss, da dieser Code auch von client based-Programmen aufgerufen wird (-> Execute).

Es funktioniert so, das steht außer Frage.
Ich denke nur, dass es in diesem Fall unsauber und unelegant ist, UI und Logik zu vermischen.
Kann auch sein, dass ich das Problem nicht blicke.
Persönlich würde ich hier eine Funktion vorziehen, die einmal von einem zeitgesteuerten Agent benutzt wird und einmal von einem Agent mit der GUI für den Admin.

Also für mich kein Best Practice, weil ich die Anwendung selbst nicht für Best Practice halte.


Titel: Re:BP: Notes Agenten
Beitrag von: koehlerbv am 25.05.04 - 23:25:45
Hallo, Thomas,

das ist ja gerade der Punkt - Back- und Frontend vermischen sich NICHT, obwohl sie (fast den) gleichen Code verwenden.

An Diskussionen zu diesem Thema wäre ich logischerweise sehr interessiert ;-)

Bernhard


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 04.06.04 - 19:29:52
Ich habe hin- und herüberlegt bezüglich Verwendung von UI-Klassen im Backend und dem Execute statement.

Letztendlich komme ich auf den Schluss, dass man das Execute-Statement schon mal erwähnen sollte in einer Agenten-Abhandlung, die ab R5 gültig ist.
Ich werde das also auch mit aufnehmen, als Folgekapitel kommt dann "Benutzen eines Agenten mit UI-Klassen auch im Backend ab R6", wo ich auf den ab R6 Laufzeitfehler 217: "Error creating product object" eingehe.

Zumindest wissen sollte man imho, dass es da eine Möglichkeit gäbe in R5, ob man das dann selber umsetzt, sei mal dahingestellt.


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 05.06.04 - 20:46:07
Ich habe gerade v1.00 in den Best Practices veröffentlicht:

http://www.atnotes.de/index.php?board=26;action=display;threadid=16181


Weiterer Input ist jederzeit willkommen, ich habe schon weitere Ideen was da noch rein sollte. Es wird wohl bald schon eine v1.10 geben  :)



Titel: Re:BP: Notes Agenten
Beitrag von: animate am 06.06.04 - 19:04:05
einen hab ich noch hierzu
Zitat
Wie kann man Code ausführen (zum Bleistift aus einer ScriptLib), der NotesUI-Elemente enthalten muss, da dieser Code auch von client based-Programmen aufgerufen wird (-> Execute).


ich habe das Problem, dass in einer DB Dokumente etwas zu lange brauchen, bis sie geöffnet werden.
Das liegt in meinem Fall wahrscheinlich daran, dass in den Masken der Dokumente ziemlich viele ScriptLibs geladen werden. Zum Teil unnötigerweise, aber welche ich genau brauche, erfahre ich erst zur Laufzeit (das Design ist nicht auf meinem Mist gewachsen :D)
Jetzt will ich das ändern und die benötigten Bibliotheken zur Laufzeit dynamisch laden.
Dazu kann ich diesen Execute-Befehl ganz gut brauchen.
Wenn ich nun aber eine größere Menge an Code in einem String unterbringe, der durch Execute ausgeführt wird, dann kann ich mir vorstellen, dass das evtl. etwas unangenehm werden kann, weil ich ja keine Compilerfehler bekomme. Außerdem gibts keine autom. Codeformatierung. Bestimmt gibts da noch ein paar Haken.

Wie ist denn eure Meinung zu diesem Thema?


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 10.06.04 - 19:23:41
Das Problem mit den Ladezeiten umfangreicher Script-Libs habe ich auch.

Wer z.B. mal Normunds' RTLib (www.rtlib.com) eingesetzt hat, kennt das.  Ist in den Globals der Maske ein "Use "RTLib"" drin, dauert es sehr lange beim Öffnen von Dokumenten.

Da wäre es sehr sinnvoll die Lib erst dann zu laden wenn man sie braucht.


Titel: Re:BP: Notes Agenten
Beitrag von: animate am 11.06.04 - 22:22:22
Das Problem mit den Ladezeiten umfangreicher Script-Libs habe ich auch.

Wer z.B. mal Normunds' RTLib (www.rtlib.com) eingesetzt hat, kennt das.  Ist in den Globals der Maske ein "Use "RTLib"" drin, dauert es sehr lange beim Öffnen von Dokumenten.

Da wäre es sehr sinnvoll die Lib erst dann zu laden wenn man sie braucht.

Das ist ja möglich (siehe auch hier (http://www.breakingpar.com/bkp/home.nsf/Doc!OpenNavigator&87256B280015193F87256D8A005C18B4). Schon mal probiert?

Hut ab vor deinem Artikel. Finde ich sehr gelungen!


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 11.06.04 - 23:08:15
Hut ab vor deinem Artikel. Finde ich sehr gelungen!

Danke, Thomas, Dein Feedback freut mich, hat schließlich viel Arbeit bereitet das zusammenzustellen, auch wenn ich viel dabei gelernt habe (was eigentlich mein Ziel war dabei).

BreakingPar hab ich jetzt kurz angelesen, hört sich sehr interessant an.
Selber versucht habe ich das noch nicht, werde ich aber asap mal testen. Die Wartezeiten beim Laden von manchen ScriptLibs nerven mich (und die Anwender) nämlich sehr......


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 12.06.04 - 00:42:30
Noch ein Problem mit mehreren ScriptLibs:

Ich hatte ein %INCLUDE "lsconst.lss" in einer ScriptLib, und wollte zusätzlich die RTLib laden. Beim Kompilieren kam dann "Duplicate PUPLIC name V_EMPTY in USE module.....", weil wohl Normunds auch %INCLUDE "lsconst.lss" in seiner rtlib verwendet.
Also wohl noch ein Grund, manche Libs erst zur Laufzeit zu laden.....


Titel: Re:BP: Notes Agenten
Beitrag von: animate am 12.06.04 - 00:54:55
Das ist ein Problem, das mich auch viel beschäftigt.
Denn jeder, der eigene Script-Bibliotheken erstellt, bindet irgendwo an der Basis die lsconst ein.
Das erschwert die Kombination von ScriptBibliotheken erheblich.
Da fehlt so was wie ein #ifdef in der Sprache.

Ich bin mittlerweile dazu übergegangen, das 'Option Public', das Notes standardmäßig einfügt, bei mir rauszuschmeißen und explizit die Konstanten, Funktionen, etc. als public zu deklarieren, bei denen es wirklich nötig ist, damit ich wenigstens keine Konflikte bekomme, wenn ich meine eigenen Bibliotheken kombiniere.


Titel: Re:BP: Notes Agenten
Beitrag von: TMC am 12.06.04 - 01:15:52
Wenigstens geht's nicht nur mir so  ;D

Ich hab teilweise schon lsconst wieder rausgeworfen aus Libs aufgrund der Problematik....
Option Public rauszuwerfen und dafür die einzelnen Funktionen etc. als solche zu deklarieren ist aber auch eine gute Möglichkeit :-)