Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: aoibhneach am 03.12.07 - 21:00:59

Titel: Start eines Agenten aus JavaScript
Beitrag von: aoibhneach am 03.12.07 - 21:00:59
Hallo Forum!

Es gibt zwar schon einige Verweise auf dieses Thema. Trotzdem komme ich nicht weiter.
Zum Thema Dialogbox im Webbrowser habe ich mir das Beispiel aus jNotes angesehen. Nun möchte ich nach der Auswahl einen Agenten starten.
Dieser soll nach "Rückkehr" in die aufrufende Methode gestartet werden.

Nur weiß ich mir keinen Rat-wie "verpacke" ich die URL zum Aufruf in JavaScript?  ???

Vielen Dank für Eure erneute Hilfe!!!!!

Grüße, Nils
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: ata am 03.12.07 - 21:38:09
... wie wäre es mit document.location ?

Toni
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: aoibhneach am 04.12.07 - 08:16:08
@ata
Hallo und Moin Toni! Hallo Forum!

Danke Dir! Ist es denn so, dass ich "?OpenAgent" direkt darauf anwenden kann?

Sollte meine Frage Entsetzen auslösen, bitte ich um Nachsicht!  ^-^

Erstmal Danke für das Stichwort!!! Ich werde damit erst einmal weiter suchen!! Ist aber schonmal ein Hinweis auf eine Richtung!!!

Grüße, Nils.
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: dirk_2909 am 04.12.07 - 08:27:25
"?OpenAgent" kannst Du so benutzen ... ;)
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: aoibhneach am 04.12.07 - 11:24:08
Hallo Forum!

Der Agent startet!
Da ich aber den Aufruf direkt hinter den Aufruf der Methode zum Öffnen des Auswahlfensters gestellt habe, startet der Agent sofort startet, ohne dass eine Auswahl getroffen werden konnte.
Wie könnte ich dass Auswahlfenster modal öffnen?

Wäre es eine Lösung, wenn ich den Agent aus dem Auswahlfenster startete?
"document.location = URL" klappt dann aber nicht.

Muß ich das document-Objekt an die Methode zum Aufruf des Auswahlfensters übergeben???

Danke für Hilfe!!!  ???

Grüße, Nils.


Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: ata am 04.12.07 - 11:39:38
... das lässt sich nicht einfach beantworten, dazu sollte man deinen Code sehen:

- Mittels der Dialogbox triffst du eine Auswahl. Diese Auswahl solltest du mit if abfragen und dann die location-Methode verwenden. Dann sollte der Aufruf des Agenten in der richtigen Reihenfolge kommen...

Nur ohne deinen Code lässt sich so was nur ahnen...

Toni
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: aoibhneach am 04.12.07 - 12:02:11
@ata
Hallo Toni!

Du hast natürlich Recht! Nur experimentiere ich hier mit einem Beispiel, welches ich bei www.jNotes.de (http://www.jNotes.de) gefunden habe.

Hier der link
http://www.jnotes.de/JNotes/jnotes_webware.nsf/0/3D61CB985812D11EC1256E1400351407?openDocument (http://www.jnotes.de/JNotes/jnotes_webware.nsf/0/3D61CB985812D11EC1256E1400351407?openDocument)

Der Aufruf des Auswahlfensters erfolgt so:
Code
addSingleName("Selection_2", "no", 250, 420, "comma");

Code
function addSingleName(FieldName, Groups, width, height, sChar) {
      var left = Math.floor( (screen.width - width) / 2);
      var top = Math.floor( (screen.height - height) / 2);
      var params = "top=" + top + ",left=" + left + ",height=" + height + ",width=" + width;
      var URL1 =  "/MsingleSelect?openform&sChar="+ sChar;  //pfad des auswahlmenus
      var URL2 = "/MsingleSelect?openform&groups=yes&sChar="+ sChar;

      accessField = FieldName ;
      if ( Groups != "yes" ) {
            var w = window.open( url + URL1 ,"Select", params);   //öffnet ein pop-up 
            } else {
            var w = window.open(url +  URL2,"Select", params);    //öffnet popup
      }
}

Der OK-Button im popup-Fenster ruft ready() auf.

Code
var accessFieldName = window.opener.accessField;
var accessField = window.opener.document.forms[0][accessFieldName];
var href = new String();//dieser zeilenblcok liest die adresse der datenbank aus
href = window.location.href;        //adresszeile im browser
var pos_nsf = href.lastIndexOf(".nsf"); //position von ".nsf" wird gesucht
var url = href.substr(0, pos_nsf + 4)        //alles hinter ".nsf" wird abgeschnitten

function ready() {
      var sIndex = document.forms[0].Namen.selectedIndex;
      if (sIndex!=-1) {
            accessField.value = document.forms[0].Namen[sIndex].text;
      };
      window.close();
}

Ich hatte auch versucht, den Agent im If-Block (sIndex!=-1) über window.location und auch document.location zu starten, aber es klappt icht.

So, ich hoffe die code-Ausschnitte sind so ausreichend und verwirren nicht.

Danke für weitere Tips!!!

Nils
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: Glombi am 04.12.07 - 13:16:12
Auf meiner Hausaufgabenliste steht das gleiche Problem, daher verfolge ich den Thread mit großem Interesse und versuche meinen Teil dazu beizutragen.

Aufgabe: Im Web ist ein Dokument geöffnet. Dort gibts die Aktionen "Genehmigen" und "Ablehnen". Bei "Ablehnen" soll ein Fenster zur Eingabe der Begründung aufgehen. Wenn man diese dann eingetippt hat, soll mit OK das Begründungsfenster geschlossen und ein Agent aufgerufen werden. Der Agent soll Werte im Ursprungsdokument setzen.

Folgendes hatte ich mir überlegt:
Ich rufe das Dialogdokument auf und übergebe mit der URL die Dok-ID des Dokuments. Diese ID wird dann in ein Feld SourceDocID geschrieben, welches über die CGI-Variable "Query_String" geholt wird.

Jetzt muss ich den Agenten so aufrufen, dass er das Dialogdokument mit dem Feld "SourceDocID" "kennt", d.h. sowas wie
paramid$ = notesAgent.ParameterDocID

Aber: Wie mache ich das denn mit JavaScript? Wie kann ich eine NoteID mitgeben?

tbc...

Andreas
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: umi am 04.12.07 - 14:15:58
Die NoteID oder DocumentID muss bereits im HTML Code vorhanden sein.
Dabei kann es als Feld oder eleganter als Computed Text im übergeben werden.
Falls das JS im Body der Maske übergeben wird, kann somit direkt die ID in eine Funktion geschrieben werden.
Code
<script type="text/javascript">
function getID() { return "<computedTExt=@text(@Documentuniqueid)>";}</script>

Evtl. wäre die CGI-Variable Query_String_Decoded besser geeignet, da alle Sonderzeichen wieder zurückübersetzt wurden z.B: %20 -> " "

Deinen Agent kannst Du ja wie folgt aufrufen

http://server/pfadzurDB/db.nsf/AgentNAme?OpenAgent&docunid=0918208201298310812313&Parameter1=yes&parameter2=rot

Im Agent kannst Du dann folgendes machen
Code
dim s as notessession
dim context as notesdocument
dim querystring as string

set s = new notessession
set context = s.documentcontext
querystring = context.getitemvalue("Query_string_decoded")(0)

Im Agent brauchst Du dann nur die Variable "QueryString" zu parsen um die einzelnen Parameter (docunid,parameter1,parameter2) auszulesen.

Um am Ende des Agent etwas zu erhalten kann mit einem entsprechenden Print eine URL zurückgegeben werden z.B. auf das geändert Dokument oder eine Bestätgungsmeldung

Code
print "[/pfad/db/view/docid?Open"]
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: Glombi am 04.12.07 - 14:20:32
Zitat
set context = s.documentcontext
Ja klar!  :D
Manchmal stört das Brett vorm Kopf doch etwas  ;)

Merci! Auch für die anderen Tipps!

Andreas
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: aoibhneach am 04.12.07 - 14:47:23
@umi

Andreas hat's geholfen. Mir leider noch nicht! :-\
Ich versuche es weiter...

Grüße, Nils.

Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: umi am 04.12.07 - 15:26:14
Evtl. solltest Du dich mal mit modernen JS Framworks auseinandersetzen
YUI, EXTJS, Prototype, DOJO oder ähnliches.
Du könntest nämlich den Agent via AJAX starten.
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: ata am 04.12.07 - 15:36:08
... du setzt vermutlich an der falschen Stelle an. Wie hattest du den Code dort eingebaut? Vor oder nach dem window.close?

Toni
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: aoibhneach am 05.12.07 - 08:17:24
Guten Morgen!

@umi
Hallo Urs,
Ja! Danke für den Tip! Ich werde mich darum kümmern! Allerdings dann unabhängig von meiner jetzigen Aufgabe (Zeit....)

@ata
Hallo Toni,

ich habe dies direkt hinter accessfield.Value geschrieben:
Aber dies führte nicht zum Start des Agenten.

Grüße, Nils
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: ata am 05.12.07 - 08:23:20
... probier es mal hinter dem window.close

Toni
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: pete_bla am 05.12.07 - 09:55:07
Hi,

machst Du zufällig einen "Submit" beim schliessen?
dann kannst Du den Agenten auch direkt in der Maske als "WebquerySave"-Agent starten:
im "WebquerySave" der Maske
@Command([ToolsRunMacro]; "<Your agent goes here>")
einbauen.

Session.DocumentContext ist dann das gerade "submittete" Dokument / Form ....
(mit SaveOptions="0" und keinem doc.save  wirds dann auch nicht gespeichert)

Gruss, Pete(r)
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: aoibhneach am 05.12.07 - 10:38:54
@ata
Hallo Toni,

Nein, geht auch noch nicht. Zwar könnte an der URL etwas nicht stimmen, aber dann würde ich das ja im ServerLog sehen. Ich habe "document.location = "...\test?OpenAgent" verwendet.


@pete_bla
Hallo Peter,
Nein, kein submit. Ich führe eine JavaScript Methode aus, die window.close() enthält. Dachtest Du an den Standard-Submit-Button? Der ist im hier benutzten jNotes-Beispiel (PopUp-Fenster) durch einen kommentierten button (HTML-PassThrue) ausgeblendet.

Vielen Dank für die Ratschläge. Ich forsche parallel weiter.  :)

Grüße, Nils.
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: pete_bla am 05.12.07 - 10:57:21
Hi,

ich vermute so langsam zu verstehen was Du erreichen willst:  :)
 :) im web ein zweites window als dialogbox öffnen, 
 ;) dort etwas auswählen
 ??? und dann den ausgewählten Wert in das ursprüngliche Dokument (Window) zurückliefern - oder irre ich mich da ?

ich denkte das könnte mit einem Agentenaufruf im "Dialog-Window" etwas kompliziert werden -
zumal du ja dann deine Änderung am ursprünglichen Dokument (Window) machen musst, und das muss dass ja auch erfahren.
(allerdings hab ich mir das jnotes noch nicht angesehn) - bitte korrigiere mich wenn ich hier abschweife.

Gruss, Pete(r)

PS: sorry für die emoticons - wollte ich nur mal austesten...
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: Glombi am 05.12.07 - 11:01:40
Das zurückschreiben macht er ja schon:

accessField.value = document.forms[0].Namen[sIndex].text;

accessField ist window.opener.document., d.h. das Dokument, aus dem die Dialogbox aufgerufen wurde.
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: pete_bla am 05.12.07 - 11:10:14
Hi,

danke für die info -  wolle es (jnotes) nachvollziehen, bin aber noch nicht dazugekommen.  :-X

Mir stellt sich noch die Frage, wo Nils jetzt den Agenten "Starten" will (ok im window.close) und die Daten übergeben will ?
- er könnte dann doch einen "Submit" bei der dialogbox machen,
hier liefert der Agent die daten (in die "dialogbox")
und diese gibt es entsprechend zurück und
schliesst sich selbst ?

sonst muss er ja den agenten "auf das übergeordnete dokument" starten.

oder bin ich immernoch zu weit weg  :-[

Gruss, Pete(r)
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: aoibhneach am 06.12.07 - 08:40:04
Guten Morgen Pete(r) and Andreas!

Entschuldigung, ich konnte nicht eher antworten, weil ich gestern Nachmittag wegen plötzlich streikender Server geflüchtet bin. (Ich war auch kurz vor'm Neustart  ;)
Pete, es ist genau so, wie Du angenommen hast. Es exisitiert ein erstes Window, aus dem heraus ich ein zweites öffne. Nach Auswahl dort und Schließen soll der kleine Agent los laufen. Aber erst dann.

Erstmal vielen Dank!!

Hier muß ich nochmals betonen, dass ich das Beispiel aus jNotes benutze. Und ich merke, dass nach anfänglichen Fortschritten mit JS (autodidaktisch), jetzt an Grenzen stoße, die zu überwinden mir die Zeit fehlt.

@Administratoren und Forum
Ich muß aus Zeitgründen jetzt eine schnelle, einfachere Lösung implementieren (Kombinationsfeld in der Maske, ohne JavaScript). Obwohl das nicht so elegant ist.
Ich möchte den thread deswegen fairer Weise hier erst einmal stoppen.
Wenn ich wieder "Luft habe" aber sehr gerne nochmals aufnehmen.

Ist das in Ordnung?

Sollte ich das Thema dann nochmals neu einstellen und dieses hier zitieren?

Viele Grüße,

Nils  :)
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: Glombi am 06.12.07 - 10:16:24
Ich bin gestern etwas weiter gekommen, habe aber noch nicht die optimale Lösung.

Wenn ich Zeit habe werde ich mal etwas Code posten.
Soviel vorab: Der Agent, der aus dem Dialogdok, aufgerufen wird, kennt zwar über DocumentContext das Dialogdok., nicht aber das ursprüngliche Dokument. Daher muss man beim Aufruf des Dialogdokument über die URL die DokID des Dokuments mitgeben.
Den Agenten muss man dann im Dialogdok. mit der DokID füttern - ebenfalls über die URL.

Andreas
Titel: Re: Start eines Agenten aus JavaScript
Beitrag von: aoibhneach am 06.12.07 - 10:23:05
@Glombi

Hallo Andreas!

Ja, ein code-Beispiel wäre prima!

Vielen Dank!

Grüße, Nils  :)