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:
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?
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:
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
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:
Evaluate("@URLOpen(""https://meinServer/meineSeite.php?test=abcde','_blank','"")")
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.
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
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:
Set wsh = CreateObject("WScript.Shell")
wsh.Run "https://meinServer/meineSeite.php?test=abcde"
Ich denke, ich bin mit dem DXL-Export (vielen Dank Peter für den Tipp) ein gutes Stück weiter:
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)
Wenn ich versuche, den Base64-String bereits im Notes zu dekodieren, dann kommt da leider auch nichts lesbares raus:
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. :-\