Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: schroederk am 20.08.20 - 11:35:32

Titel: Aufruf einer Webseite aus Lotusscript
Beitrag von: schroederk am 20.08.20 - 11:35:32
Hallo,

ich möchte gerne (aus dem Body einer Mail ermittelte) Daten an einen Webserver senden, damit dieser die Daten weiterverarbeitet.
Ich hatte gehofft/gedacht, dass es mit der Lotusscript -Funktion OpenURL funktionieren würde.

Für einen einfachen Test habe ich in einem über den Menüpunkt Aktion aufgerufenen Agenten die folgende Zeile versucht:

Code
Call workspace.URLOpen( "https://meineSeite?test=abcd" , 0)

Meine Erwartung war, dass sich dann der beim OS hinterlegte Browser öffnen würde, oder wird die Seite im Hintergrund geöffnet (was auch nicht schlecht wäre, sofern ich nach dem Aufruf eine Rückmeldung z.B. "war erfolgreich" geben könnte)

Oder befinde ich mich komplett auf dem Holzweg?
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: schroederk am 20.08.20 - 14:36:27
Nachdem ich weiter im Netz gesucht habe, bin ich auch auf WinHTTP gestoßen. Leider komme ich auch hier nicht weiter. Das Script läuft zwar ohne Fehler durch, erzeugt aber nicht die gewünschte/erhoffte Ausgabe:

Code
	Dim WinHttpReq As Variant
	Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
	Call WinHttpReq.open( "GET", "https:/meinServer/meinSeite.php?test=abcde",  False )
	Call WinHttpReq.send( )
	Print WinHttpReq.ResponseText

Das PHP-Script beinhaltet nur ein
Code
echo "geklappt";

Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: eknori am 20.08.20 - 15:35:34
Das sind zwei unterschiedliche paar Schuhe. Dein erstes Beispiel öffnet e8ne URL, das zweite ist ein GET REST request. Und was da zurückkommt ist lediglich der response code. Solange die angefragte Seite keine REST services bereit stellt kommt da auch nichts weiter zurück.

Was willst Du denn überhaupt erreichen?
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: eknori am 20.08.20 - 15:56:46
DerURLOpen Befehl funktioniert ja auch nur in der von Dir verwendeten Weise, wenn die Seite im Note Browserfenster geöffnet wird. Bei einem externen Browser läuft das anders . siehe https://help.hcltechsw.com/dom_designer/11.0.0/appdev/builds/H_URLOPEN.html
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: schroederk am 20.08.20 - 16:49:16
Konkret geht es um als eingehende Mails ankommende Auftragsbestätigungen, deren Mail-Text (und Anhänge) auf einem Contentserver gespeichert werden sollen und in unserem ERP-System verknüpft werden. Die Daten soll je nachdem, was in der Mail gefunden wurde, mit der Bestellnummer, der Materialnummer und der Lieferantennummer verknüpft werden.
Ein Dialog soll die drei Felder abfragen und die ermittelten Werte (Auftragsnummer, Materialnummer, Lieferantenummer) als Vorschlagswerte anzeigen. Der Dialog kann im Notes aber auch schon auf dem Webserver angezeigt werden. Im Idealfall kommt danach eine Rückmeldung, dass der Vorgang erfolgreich abgeschlossen wurde.
Aktuell geht es erstmal um ein "Proof-of-Concept". D.h. ich möchte dafür erstmal aus Notes heraus ein PHP-Script mit Parametern aufrufen und die Ausgabe vom PHP-Script in der Konsole oder Messagebox anzeigen lassen.
Der Webserver und das PHP-Script sind recht einfach aufgebaut, also nichts mit Webservice-Provider oder -Consumer und WSDL-Dateien.

Umgekehrt funktioniert das sehr einfach über cURL und "https://mailserver/maildb.nsf/Agentenname?OpenAgent".

Ein Versuch, den Aufruf über @Formula hat leider auch nicht geklappt:

Code
Evaluate("@URLOpen(""https://meinServer/meineSeite.php?test=abcde','_blank','"")")
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: jBubbleBoy am 20.08.20 - 18:12:40
Ein 'URLOpen' öffnet eigentlich die Seite im Browser, wenn das nicht der Fall ist dann die Arbeitsumgebung prüfen, hier wird der aufzurufende Browser konfiguriert.
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: schroederk am 21.08.20 - 07:19:54
Meinst Du mit "URLOpen" Lotusscript oder Formula oder beides?
Konfiguriert war der Internet Explorer, aber auch eine Umstellung auf Firefox hatte keine Auswirkungen.
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: schroederk am 21.08.20 - 07:35:53
Ich habe es nun mit folgendem Code hinbekommen:
Damit wird zwar kein Fenster geöffnet, somit wird die Business Logic komplett im LS liegen, aber OK.
Und es gibt noch ein Problem mit dem Caching, denn es wird auch nach mehreren Änderungen das Ergebnis von der ersten Version angezeigt.

Code
	Dim XmlHttpRequest As Variant
	Dim session As New NotesSession
	Dim response As String
	Set XmlHttpRequest = CreateObject("Microsoft.XMLHTTP")
	
	Call XmlHttpRequest.Open("GET", "https://meinServer/meineSeite.php?test=abcde", False)
	Call XmlHttpRequest.Send()
	
	response = XmlHttpRequest.responseText
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: jBubbleBoy am 21.08.20 - 09:26:30
Ob LS oder Formel - URLopen macht immer das gleiche ... habe aber festgestellt, dass man den Browser gar nicht so ohne weiteres beim Notes-Client anpassen kann ;)
Ggf. klappt der Aufruf mit:
Code
  Set wsh = CreateObject("WScript.Shell")
  wsh.Run "https://meinServer/meineSeite.php?test=abcde"
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: schroederk am 24.08.20 - 13:15:01
Ich nehme mal an, dass es noch immer keine direkte Methode gibt, den Inhalt der Anhänge zu lesen ohne sie vorher zwischenspeichern zu müssen? Hab zwar etwas mit einer Java-Funktion gefunden, aber nativ im Lotusscript geht es wohl nicht, oder?
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: Peter Klett am 24.08.20 - 13:49:37
Über DXL-Export?

Da hast Du den Inhalt der Dateianhänge Base-64-codiert, habe das einmal umgekehrt genutzt, um Dateianhänge zu erstellen, ohne die Datei vorher auf die Platte schreiben zu müssen
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: schroederk am 25.08.20 - 10:05:07
Ich denke, ich bin mit dem DXL-Export (vielen Dank Peter für den Tipp) ein gutes Stück weiter:

Code
	Set stream = s.CreateStream
	Set export = s.CreateDXLExporter
	export.setInput doc
	export.setOutput stream
	export.process
	txt=stream.ReadText
	start = InStr(1,txt,"<notesbitmap>")
	finish = InStr(1,txt,"</notesbitmap>")
	attData=Mid(txt,start+13, finish-start-13)

Funktioniert im Moment natürlich nicht bei Bildern, sondern nur bei TXT oder PDF.
Das was dem Webserver übergebe, scheint zwar valides Base64 zu sein (getestet bei base64.guru), aber ich bekomme es dennoch nicht umgewandelt, um daraus wieder ein Attachment zu machen (welches dann auf dem Content-Server des ERP-Systems gespeichert werden kann)


Eine Beispiel-Base64-Datei habe ich hier mal angehangen. (Einfache TXT-Datei)
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: schroederk am 25.08.20 - 16:36:22
Wenn ich versuche, den Base64-String bereits im Notes zu dekodieren, dann kommt da leider auch nichts lesbares raus:

Code
	Set doc2 = New NotesDocument( db )	
	Set mime = doc2.CreateMIMEEntity
	Call mime.SetContentFromText(stream, "text/plain;charset=UTF-8", ENC_BASE64)
	Call mime.DecodeContent	
	MessageBox mime.Contentastext, MB_OK, "Inhalt"

Ich werde da wohl einen groben Denkfehler haben.  :-\
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: jBubbleBoy am 25.08.20 - 17:16:12
Nimm mal die Base64-Lib von nsftools - http://www.nsftools.com/tips/Base64v14.lss, damit sollte es gehen.
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: schroederk am 26.08.20 - 06:54:47
Das kann ich gerne mal testen, aber eigentlich würde ich gerne den Base64 String erst am Ziel-Server dekodieren und wieder zu einem Attachment werden lassen.
Titel: Re: Aufruf einer Webseite aus Lotusscript
Beitrag von: jBubbleBoy am 26.08.20 - 19:14:28
Das muss dann mit PHP-Script umgesetzt werden, wenn das dein Ziel-Server ist ... aber einem GET-Request (Webseite öffnen) wird man kein Base64-String mitgeben können, es sei denn die Datei ist sehr klein ;)