Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: FRANKI am 09.12.02 - 12:05:39
-
Hallo,
ich möchte einen Agenten aus einer Maske heraus aufrufen.
Der Agent ist in JAVA geschrieben.
Der Aufruf erfolgt nach dem abspeichern des Dokument's.
Beim Aufruf möchte ich die DocUID dem Agenten mitgeben.
Kann mir je erklären, wie ich dem Agenten Parameter mitgeben kann (hier die DocID)
Danke
FRANKI
-
Hi,
ist zwar schon ewig her, seit das Thema erstellt wurde... Aber ich habe mir bereits die gleiche Frage gestellt!
Ich habe genau das gleich vor - hast bzw. wie hast Du das gelöst?
Gruß
-
Einem Agenten kann man optional eine DocId beim Aufruf der run-Methode via Script oder auch Java mitgeben:
notesAgent.Run( [ noteID$ ] )
Das steht alles in der Desingerhelp beschrieben.
-
Hi,
ich mach es mittlerweile immer so, dass ich dem Aufruf des Agenten Parameter mitgebe
(so in der Art: datenbank+"/Agentenname?OpenAgent&action="+action )
Die URL werte ich dann im Agenten mit session.evaluate aus.
Aufrufen kannst Du den Agenten durch ein Ereignis, z.B. onSubmit o.ä.)
Gruß
FRANKI
-
Mh, ich präzisiere mal mein Vorhaben:
Ich möchte aus einer Maske per Buttonklick einen Java-Agent aufrufen. Dieser Agent sollte aus der Maske einige Feldinhalte als Übergabeparameter erhalten und diese dann intern weiterverarbeiten.
1. Wie übergebe ich solche Feldinhalte an einen Java-Agent?
2. Wie würde der Aufruf des Agent mittels @Command dann aussehen?
Danke und Gruß
-
also:
Du erstellst in Deiner Maske einen Button.
Die "Click"-Eigenschaften des Button könnten in Formelsprache so aussehen:
@Command([ReloadWindow] );
@Command([FileCloseWindow]);
@URLOpen(datenbank + "/Agentenname?OpenAgent&ID=" + @Text(@DocumentUniqueID))
Im Agenten holst Du Dir über session.evaluate die DocID und list dann z.B. per dok.getItemValueString("Feldname") die Feldwerte aus.
Gruß
Frank
-
Danke erstmal... ich meine aber keinen Browser Client, sondern den Notes-Client, an dem das mittels eines importierten Java-Agent realisiert werden soll! Nur zur Info... weil mich der @URLOpen-Aufruf hierbei stutzig macht. ???
-
Wenn du das mit der Maske geöffnete Dokument gespeichert hast, kannst du den Agent via Button und den oben von mir erwähnten Methodenaufrufen samt Parametern aufrufen. Und lies mal in der Designerhilfe nach. Mit dem Parameter DocId hast du das Dokument in dem aufgerufenen Agent im Kontext und kannst dir die benötigten Werte über die Methoden der Klasse Notesdocument auslesen.
-
genau so .....
Viel Erfolg!
Gruß
-
Ok, danke. Hier mal ein simples Beispiel, ob ich´s denn auch wirklich verstanden habe: ::)
importierten Java-Agent bei Buttonklick aufrufen:
@Command([ToolsRunMacro]; myAgent)
myAgent sieht dann so aus (liest bspw. einen Feldwert des aktuell geöffneten Dokuments aus):
public class JavaAgent extends AgentBase {
public void NotesMain() {
try{
Session session = getSession();
AgentContext ac = session.getAgentContext();
Database db = ac.getCurrentDatabase();
// über DocID an geöffnetes Dokument bei Agent-Ausführung gelangen und dann evtl. Dokumentwerte auslesen
Agent ag = ac.getCurrentAgent();
Document curDoc = db.getDocumentByID(ag.getParameterDocID());
// bspw. StringValue vom Feld "Subject" auslesen
String sSubject = curDoc.getItemValueString("Subject");
}catch(Exception e){
e.printStackTrace();
}
}
War das so gemeint... konnte es leider noch nicht testen, da ich im Vorfeld erst abklären muß, wie einige Sachen in Notes funktionieren. ;)
Danke und Gruß
-
Liest du auch, was wir schreiben? Bei uns war bisher nicht von einem @Command die Rede. So wie du es da jetzt hast, meinte ich es zumindest nicht. Ich weiß nämlich nicht, ob der Agent da das aktuelle Dokument mitbekommen hat.
-
ich kann auch nicht sagen, ob das so funktioniert.
verscuhe doch mal folgendes:
1. Dokument abspeichern mit @Command([FileSave]);
2. Agent aufrunfen mit @URLOpen(datenbank + "/Agentenname?OpenAgent&ID=" + @Text(@DocumentUniqueID))
3. Im Agenten mit session.evaluate die DOCID aus der URL lesen.
4. Felder mit getItemValueString vom Agenten lesen.
so ungefähr sollte es klappen.
melde Dich wieder, wenn Du das mal ausprobiert hast.
Gruß
Frank
-
Ok, danke... ich melde mich.
-
Sorry, aber ich glaube, wir haben uns grundsätzlich falsch verstanden, was den Aufruf und die Verwendung des Agent anbelangt!
Der Java-Agent soll kein WebAgent sein und auch nicht aus dem Browser aufgerufen werden!
Es soll ein Java-Agent sein, der von einem Notes-Client aus aufgerufen wird.
@URLOpen([...]) habe ich bisher nur in Zusammenhang mit Websites und Notes gelesen! ???
DominoDesigner Hilfe meint dazu: Retrieves a World Wide Web page specified by its URL.
Hab ich da bisher was falsch verstanden?!
-
Hast du meine Postings genau gelesen? Da habe ich dir schon eine Antwort gegeben.
-
Markus, er will/kann/darf aber nicht LotusScript, sondern nur @-Formulas und Java (und das alles am Besten, ohne mit Notes überhaupt nur in Berührung zu kommen). Da is er mit 5 Zeilen Lotusscript überfordert!
-
...Sorry, wenn ich anscheinend ein geistiger Spätzünder oder Nullchecker bin!
Ich setze mich halt leider erst seit paar Tagen mit Notes, Agents usw. auseinander und bekomme immer neue Inputs wie man was machen kann. :-:
Wenn du das mit der Maske geöffnete Dokument gespeichert hast, kannst du den Agent via Button und den oben von mir erwähnten Methodenaufrufen samt Parametern aufrufen. ... Mit dem Parameter DocId hast du das Dokument in dem aufgerufenen Agent im Kontext und kannst dir die benötigten Werte über die Methoden der Klasse Notesdocument auslesen.
OK...
1. Ich weiß nunmal leider (noch) nicht, wie der Agentaufruf mit mit 'notesAgent.Run( [ noteID$ ] )' hinter einem Button aussehen soll, da ich bisher immer nur was von @Command gelesen habe.
2. Ist mein Java-Quellcode denn nun falsch, oder nur mein AgentAufruf (siehe mein obiges Posting)?
3. Die Klasse 'Notesdocument' existiert (bei mir) im Notes.jar nicht?! Edit: Ahh, gibts nur in LotusScript!
Markus, er will/kann/darf aber nicht LotusScript, sondern nur @-Formulas und Java (und das alles am Besten, ohne mit Notes überhaupt nur in Berührung zu kommen). Da is er mit 5 Zeilen Lotusscript überfordert!
...ich möchte einfach soviel wie möglich durch Java realisieren, um relativ unabhängig von Eingriffen in Notes zu sein, wenn´s später mal irgendwie auf einem noch jungfräulichen Notes analog realisiert werden soll.
Gruß
PS: Ich hoffe, ich lag nun nicht wieder meilenweit mit meinen Gedanken daneben...
-
Notesdocument ist in Java Document
Grüße
Ralf
-
Ich setze mich halt leider erst seit paar Tagen mit Notes, Agents usw. auseinander und bekomme immer neue Inputs wie man was machen kann.
OK, aber ohne sich mal hinzusetzen, den Designer zu starten und einfach mal ein paar Sachen ausprobieren wird das nie und nimmer was.
-
...ich möchte einfach soviel wie möglich durch Java realisieren, um relativ unabhängig von Eingriffen in Notes zu sein, wenn´s später mal irgendwie auf einem noch jungfräulichen Notes analog realisiert werden soll.
Dieses Argument greift hinsichtlich Notes / Domino auch vollkommen daneben. Entweder, die Java-Elemente stecken a) sowieso in den Notes-Anwendungen (Datenbanken) oder sind b) komplett extern. In Fall a) ergibt sich keinerlei Unterschied zwischen den Programmiersprachen, in Fall b) erhöht sich der Aufwand sogar.
Zwei prinzipielle Ratschläge:
- Zuerst die Auseinandersetzung mit der Middleware Notes / Domino - dann die Details
- Auf jeden Fall die jeweils adäquaten / einfachen (und einfach zu portierenden) Mittel zur Erreichung des Ziels einsetzen und sich nicht auf eine Art der Programmierung stürzen und die anderen ausser Acht zu lassen.
Bernhard
-
...Sorry, wenn ich anscheinend ein geistiger Spätzünder oder Nullchecker bin!
Ich setze mich halt leider erst seit paar Tagen mit Notes, Agents usw. auseinander und bekomme immer neue Inputs wie man was machen kann. :-:
2) Du solltest Dir von einem Notes-Entwickler im Haus einen Crashkurs über Notesentwicklung im Backend geben lassen.
ad 2) Dann holt Euch zumindest einen externen, der euch ein wenig Coached, sonst wird das nix.
Es geht nicht ums "heftig", das bekommt ein guter Java-Coder schon gebacken, aber der muss zuerst mal die Notes/Domino Welt verstehen.