Autor Thema: Script Librarie Routine per Javascript aufrufen  (Gelesen 2644 mal)

Offline Phate

  • Frischling
  • *
  • Beiträge: 9
  • Ich liebe dieses Forum!
Script Librarie Routine per Javascript aufrufen
« am: 10.09.04 - 18:47:09 »
Hallo,

Ist es möglich eine Script Librarie Routine per Javascript aufrufen? Falls ja wie?

Dank im Vorraus

Marinero Atlántico

  • Gast
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #1 am: 10.09.04 - 19:29:50 »
Nein.
Und: In welchem Kontext willst du das haben?

Es muss ja vom Client aufgerufen werden, weil JavaScript nur clientseitig geht.
Im Webclient (Browser) laufen keine LotusScript Routinen.

Bleibt übrig:
a) Im NotesClient mit JavaScript eine auf dem Server laufende Scriptlibrary laufen lassen.
b) Im NotesClient mit JavaScript eine auf dem NotesClient laufende LotusScriptlibrary laufen lassen.
c) Im Browser mit JavaScript eine auf dem Server lafuende LotusScriptlibrary aufrufen.

Was willst du?
b) geht glaub ich nicht und a) und c) machen nicht so viel Sinn.

Offline Phate

  • Frischling
  • *
  • Beiträge: 9
  • Ich liebe dieses Forum!
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #2 am: 10.09.04 - 23:46:02 »
Ich habe ein Webformular in dem ich eine Emailadresse eintrage mit dieser möchte ich ein neues Document erzeugen. Da ich nicht weiß wie man mit Javascript ein neues Document einer bestimmten Form erzeugt habe ich es in Lotusscript gemacht und gehofft das ich von der Javascript anweisung die Lotusscript Function aufrufen kann und ihr die emailadresse als Parameter übergeben kann.

Marinero Atlántico

  • Gast
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #3 am: 11.09.04 - 06:28:44 »
Nein. So läuft das nicht.
Webprogrammierung läuft in request, response Zyklen ab.
Kauf dir am besten ein Buch wie z.B. das von Rocky Oliver.

Fürs erste:
Mach in die Maske eine Aktion oder einen Button und lege dahinter die @Commands
Code
@Command([FileSave]);
@Command([FileCloseWindow]);

Drück dann mal im Browser auf besagte Aktionsschaltfläche oder besagten Button.
Schaue danach mit dem NotesClient nach, ob ein neues Dokument erzeugt worden ist.





Glombi

  • Gast
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #4 am: 11.09.04 - 10:02:11 »
Bei der Web-Entwicklung macht man i.d.R. massiv von Agenten Gebrauch, damit man in LotusScript entwickeln kann. Die kannst Du auf verschiedenste Arten aufrufen - am besten liest Du mal die Designer Hilfe unter dem Stichwort Web.-Anwendungen durch.

Andreas

Marinero Atlántico

  • Gast
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #5 am: 11.09.04 - 11:06:32 »
... vor allem könntest du dir auch mal Gedanken darüber machen, wie Browser und Notesserver eigentlich miteinander kommunizieren.

NotesServer --> Browser
Ein (oder mehrere) NotesElemente (Maske, Dokument, View, Page, Page mit embedded View wird stets von der Notes-httpEngine auf dem Server in ein HTML(oder XML)-Dokument umgesetzt und an den Browser geschickt. Der Browser zeigt das dann an.

Browser --> NotesServer
Der Browser kann an den NotesServer stets nur Nachrichten im http(s) Format schicken (es sei denn du verwendest plug-ins für Applets oder Swing).
In HTTP gibt es gebau 2 wichtige Befehle:
HTTP-GET: Anforderung einer Ressource über eine URL
HTTP-POST: Nachricht an Ressource mit key-value pairs und gegebenenfalls Attachments.

Das läuft nicht so direkt, dass du direkt vom Browser NotesObjekte ansprichst.

hoffe es hilft

Axel

Offline Phate

  • Frischling
  • *
  • Beiträge: 9
  • Ich liebe dieses Forum!
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #6 am: 11.09.04 - 15:00:18 »
Wie ist es denn möglich einen Agenten per javascript aufzurufen? Damit wäre mein Problem gelöst. Aber ich weiß nur wie es per Formula oder Lotusscript oder Java geht.

Außerdem müste ich dem Agenten beim aufruf auch noch einen Parameter übergeben.
« Letzte Änderung: 11.09.04 - 15:23:49 von Phate »

Marinero Atlántico

  • Gast
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #7 am: 11.09.04 - 22:49:59 »
Phate,

hast du versucht diese JavaScript eine Weile zu vergessen und einen Button in die Page zu tun und dahinter die Formelsprachenbefehle:
Code
@Command([FileSave]);
@PostedCommand([FileCloseWindow]);

Vorher kannst du noch eine Ansicht mit @All als Selektionsformel (oder wie das noch mal hies).

Auf diesen Button klicken und dann in die Ansicht schauen?

Du brauchst für diese Aufgabe kein JavaScript.
JavaScript ist überhaupt nicht dafür da um mit dem Server zu kommunizieren.
JavaScript ist dafür da, um die Objekte der Objektrepräsentation des (oder der) html Dokuments(e) zu manipulieren, das (die) im Browser ist (sind).

Gruß Axel
« Letzte Änderung: 11.09.04 - 22:52:30 von Marinero Atlántico »

Marinero Atlántico

  • Gast
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #8 am: 11.09.04 - 23:26:56 »
<ich_meine_das_Gesagte_nicht_böse_oder_arrogant/>
O.k. die Geschmäcker sind verschieden. Menschen haben die seltsamsten Obsessionen  ;D
Falls dir die Benutzung von JavaScript für diese Aufgabe eine Befriedigung verschafft (obwohl es eigentlich nicht hier hingehört).  
Du kannst einen Button da hintun und in das onClick()-Event:
<script>document.forms[0].submit();</script>
Das macht aber wie gesagt eigentlich dasselbe wie ein normaler html Submit button (der automatisch generiert wird, wenn obige Formeln dahinterstehen.

Falls du unbedingt einen Agenten aufrufen willst, kannst du sowas machen. In PassThruHtml:
<a href="/computedText mit Formel: @Subset(@Substring(@dbName();"\\";"/");-1) /nameDesAgenten?openAgent">Agenten aufrufen</a>
Parameter könntest du hinter openAgent mit & anhängen.
Es ist aber viel besser den Agenten in das WebQuerySave Kästchen zu schreiben. Such nach WebQuerySave in der Designerhilfe.
An das aufrufende Dokument kommst du über
Code
Dim session as new NotesSession
Dim doc As NotesDocument
set doc = session.getDocumentContext()
[/url]
Aus diesem doc kannst du alle Parameter auslesen. Ich halte das für die sauberste Lösung, wenn du einen Agenten brauchst. 

Gruß Axel


Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #9 am: 12.09.04 - 22:50:13 »
Es gibt schon eine ganze Menge Anwendungsfälle, wo es Sinn macht, einen Agenten per JavaScript aufzurufen, auch ohne ständig zu "Submitten" und WQSave und WQOpen zu nutzen.

Zb:
- Felder füllen in einem geöffneten Webformular mit einer analogen Picklist wie in Notes
- Schnellsuche in Ansichten
- Starten von Agenten im Server-Background
- On-the-fly-Erweiterung von Schlüsselwortlisten
- etc.


Den Agenten rufst Du auf wie jedes andere Notes-Element

"agentenname?openagent"

z.B. in einem "window.open" (mit html rückgabewert)
oder versteckt in einem <img src="agentname?openagent"> mit einem Bild als rückgabewert (unsichtbar)


Parameter hängst Du mit "&parameter1=x&parameter2=y" an.
Die liest Du wieder aus (auch wenn es kein explizites Document gibt) in LS über:

Set Document = Session.DocumentContext
string = Document.QUERY_STRING_DECODED(0)


Den String explodierst Du am "&" und replacet diese Liste mit Word am Parametername - schon hast Du jeden und so viele Parameter wie Du möchtest übergeben.

Wichtig ist dabei nur, dass die Parameter selbst nur Zeichen enthalten dürfen, die über eine URL übertragbar sind.
Du mußt also möglicherweise die Parameter in Javascript encoden und in LS wieder decoden mit einer Übersetzungsliste wie z.B die hier:

( " " : "\"" :  "&" : "|" : "(" : ")" : "ü" : "ä" : "ö" : "ß" :  "?" : ":" : "Ä" : "Ö" : "Ü" : "," : "\'" ) ;

( "%20" : "%22" : "%20AND%20" : "%20OR%20" : "%28" : "%29" : "%FC" : "%E4" : "%F6" : "%DF" : "%3F" : "%3A" : "%C4" : "%D6" : "%DC" : "%2C" : "%27" )




« Letzte Änderung: 13.09.04 - 09:36:04 von datenbanken24 »

Marinero Atlántico

  • Gast
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #10 am: 13.09.04 - 10:14:40 »
Deine "JavaScript" Aufrufe betreffen aber jeweils ein ganz eigenständiges Html-Dokument (window.open()) oder ein eingebettetes Grafikelement (<img> tag).
Ich bin hier deshalb so drauf eingestiegen, da aus meiner Sicht ein irgendwie grundsätzlicher Mangel an Verständnis für http bestand. Davor kann ich nur warnen.  

Vor diesen Austauschlisten kann ich auch nur warnen. Es gibt in JavaScript und innerhalb von Lotus in CGI Variablen die Möglichkeit einen String automatisch urlencoded zu machen. Das heisst die Funktion kümmert sich darum.

Gruß Axel

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #11 am: 13.09.04 - 10:43:14 »
Das stimmt.

Wir nutzen die Translations auch nur, wenn wir neue URLs in @Formeln zusammenbauen, deshlab auch der Ausschnitt aus einem @ReplaceSubstring-Befehl.

Auch mit dem HTML gebe ich Dir vollkommen recht.
In 90% der Fälle ist immer ein WQSave oder ein WQOpen sinnvoller, meist sogar in Verbindung mit einem SaveOptions="0".

Aber ab und zu ist so ein Agentenaufruf aus JS doch ganz interessant.
So habe ich das auch gemeint
« Letzte Änderung: 13.09.04 - 10:46:44 von datenbanken24 »

Marinero Atlántico

  • Gast
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #12 am: 13.09.04 - 13:58:25 »
nein. nein. nein.

Das ist mir zu Unscharf.
Zwischen dem JavaScript und dem Agenten sind mindestens 2 Layer von anderem Zeug. Deshalb ist der Ausdruck JavaScript Aufruf eines Agenten extrem problematisch (für mich jedenfalls).

JavaScript ist eine SkriptSprache für den Browser. Mehr nicht. Man kann da also aus JavaScript unmittelbar keine remote calls auf Notes Gestaltungselemente ausführen.

Man kann höchstens mit JavaScript den Browser instruieren gegen den Domino Server einen http-Aufruf zu starten, der die Domino Web Engine (?) dazu veranlasst einen Agenten aufzurufen, dessen Ergebnis wiederum an den Browser zurückgesendet wird.

Bei window.open(url, stuff) passiert folgendes:
Browser öffnet ein Pop-Up Fenster.
Unmittelbar nach dem Öffnen sendet dieses PopUp Fenster ein http-GET gegen den Domino Server, der dort bewirkt, dass ein Agent gestartet wird.

<img url="/pfad/database.nsf?openAgent"> hat mit JavaScript nix zu tun. Das ist reines html.

Ich klinge vermutlich ein bischen fanatisch. Ich halte nur wie gesagt so Aussagen wie "aus JavaScript einen LotusScript Agenten" aufzurufen für extrem irreführend, für meine Ohren jedenfalls.  

Axel
« Letzte Änderung: 13.09.04 - 13:59:12 von Marinero Atlántico »

Offline Phate

  • Frischling
  • *
  • Beiträge: 9
  • Ich liebe dieses Forum!
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #13 am: 13.09.04 - 16:16:32 »
OK OK,
Ich merke das der Aufruf eines Agenten über Javascript wahrscheinlich der falsche Weg für mein Problem ist. Eigentlich müsste es dafür nämlich eine einfache Lösung geben.
Daher werde ich mein Problem einmal als ganzes beschreiben. Vorher möchte ich noch sagen das ich von diesem Forum begeistert bin, es ist das erste mal das ich etwas hier poste aber ich habe schon gemerkt das es hier Leute gibt die wirklich Ahnung haben.

Also folgendermaßen, ich habe eine Form die aus einem Eingabefeld und einem Sendebutton besteht, ich habe diese Form selbst in HTML geschrieben, es hilft mir gar nichts wenn mir jemad vorschlägt ich solle mit Notes eine Form erstellen so das es automatisch als HTML document gerendert wird.
Das ganze sieht so aus
dxemailenterform="<form method=""get""  id=""emailenterform"" name=""emailenterform"" action=""javascript:enteremail();"">"&_
configdoc.email_enter_form_label(0) & _
"<input type=""text"" id=""emailenter"" name=""emailenter"" />"&_
configdoc.email_enter_form_submit_button(0) & "</form>"

die action enteremail war dafür gedacht die Eingabe zu überprüfen und einzutragen.

so außerdem habe ich im Designer eine Form (newEmail) erstellt in der man eine Emailadresse eingeben kann. Nun möchte ich gerne, dass wenn ein User im Web in dem Eingabefeld seine Emailadresse eingibt und auf senden klickt ein neues Document von der Form newEmail erzeugt die Emailadresse in das Feld emailadresse eingetragen wird und das ganze gespeichert wird.

Ich hoffe ihr könnt nachvollziehen was ich möchte. Ich könnte mir vorstellen das es mit einem URL Command gehen könnte allerdings weiß ich nicht so genau wo ich dieses dann anbringen muss, wie ich es aufrufe und wie ich es genau zusammensetze.


Marinero Atlántico

  • Gast
Re:Script Librarie Routine per Javascript aufrufen
« Antwort #14 am: 13.09.04 - 17:24:02 »
Sorry, aber das ist sehr merkwürdig, was du da sagst.

Wie willst du den String dxemailenterform an den Browser senden?

Ich würde in die action property des form-elements keine JavaScript Funktion schreiben, sondern die Target-URL
--> http://derServername/pfad/dbname.nsf/agent?openAgent <---
Die Validierung dann in einem Validierungsskript, dass im Event-handler onSubmit des form Elements steht.

Im Agenten kannst du es dann mit

Dim docContext as NotesDocument
Dim session as NotesSession
dim decodedUrlQuery As String

session = new NotesSession();
docContext = session.getDocumentContext();
decodedUrlQuery = docContext.getItemValue("Query_String_Decoded")(0)
print "decodedUrlQuery=" + decodedUrlQuery

versuchen.

Du erzeugst die html-form mit einem Agenten. Warum?
Es ist vermutlich viel einfacher, das mit einer Notes-Form zu machen. Domino kümmert sich um die html-generierung. Du kannst das auch soweit mit css beeinflussen, dass es gut aussieht.

Ausserdem finde ich diese doppelten "" unübersichtlich. Ist vielleicht Geschmackssache.
Du kannst in LotusScript aber auch ein pipe-Zeichen als äußeren String-Delimiter verwenden.
Also:
dxemailenterform=|<form method="GET"  id="emailenterform" name="emailenterform" action="http://derServername/pfad/dbname.nsf/agent?openAgent" onSubmit="doValidationAndStuff();">|&_

wobei der serverServername natürlich nicht hartkodiert da reingehört. Aber das ist eigentlich schon das nächste Thema.

'Gruß Axel
« Letzte Änderung: 13.09.04 - 17:43:51 von Marinero Atlántico »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz