Schnittstellen zum Internet

Zugriff auf das Internet und seine verschiedenen Protokolle und Datenformate von ClassiX® aus kann mit Hilfe einiger COM-Objekte realisiert werden. Diese werden im Folgenden kurz vorgestellt, einhergehend mit einigen Beispielen.

WinHTTP

Offizielle Dokumentation von Microsoft

Die WinHTTP-Schnittstelle von Windows bietet, wie der Name schon sagt, Zugriff auf das HTTP-Protokoll. Dieses kann so verwendet werden, um beliebige Dateien aus dem Internet herunter zuladen (z.B. zur Aktualisierung von Daten) oder generell um jede Art von Internetseite irgendwie zu benutzen. Die Verwendung ist denkbar einfach:

Var(winhttp)
CreateTransObject(CX_COM_OBJECT) -> winhttp
"WinHttp.WinHttpRequest.5.1" winhttp Call(CreateFromProgID)

Hier wird das COM-Objekt erzeugt und dann als WinHTTP initialisiert.

"GET" "http://www.classix.de" FALSE winhttp Call(Open)
winhttp Call(Send)

Jetzt wird die zu öffnende Adresse an WinHTTP übergeben, der erste Parameter ("GET") steuert, welche Art des HTTP-Request (GET oder POST) verwendet werden soll, danach folgt die Adresse und der letzte Parameter gibt an, ob der Aufruf  asynchron erfolgen soll. Hier sollte immer FALSE übergeben werden und somit der synchrone Aufruf benutzt werden. Mit dem Aufruf von Send wird dann der eigentlich Request abgesendet. Im synchronen Modus kehrt die Send-Methode erst wieder zurück, wenn ein Ergebnis des Requests feststeh. Im asynchronen Fall geht es sofort weiter, d.h. man kann sich im weiteren Verlauf nicht sicher sein, ob schon Daten vorliegen oder nicht. Daher sollte, wie oben schon beschrieben, der synchrone Modus verwendet werden.

winhttp Call(GetStatus) "200" = if {
winhttp Call(GetResponseText)
...
}

Mit einer Statusabfrage kann nun geprüft werden, ob der HTTP-Request erfolgreich war. Hier werden die in RFC 2616 spezifizierten HTTP-Status-Codes zurückgeliefert. Mit der Methode GetResponseText kann dann das Ergebnis als String geholt werden und eine Weiterverarbeitung erfolgen.

Beispiele

WDDX

Offizielle Dokumentation findet sich im SDK von OpenWDDX.org

Bei WDDX handelt es sich um ein XML-Basiertes Datenformat um den Datenaustausch speziell zwischen Webanwendungen zu vereinfachen. Es finden sich im Internet diverse Webanwendungen, welche eine WDDX Schnittstelle anbieten um somit ihre Funktionalität zur Verfügung zu stellen. Dabei werden Anfragen an die Webanwendung meist als ganz normaler HTTP-Request gesendet und die Antwort erfolgt dann als WDDX-kodierter Datenstrom. Um solche Webanwendungen aus ClassiX® heraus nutzen zu können, kann die WDDX Schnittstelle über ein frei verfügbares COM-Objekt genutzt werden. Die eigentliche Kommunikation auf HTTP-Ebene kann mit der oben beschriebenen WinHTTP Schnittstelle erfolgen.

Var(deserializer, response)
CreateTransObject(CX_COM_OBJECT) -> deserializer
"WDDX.Deserializer" deserializer Call(CreateFromProgID)

Hier wird das COM-Objekt erzeugt und dann als WDDX Deserializer initialisiert.

winhttp Call(GetResponseText) deserializer Call(deserialize) -> response

Hier wird von einer bereits erfolgten Abfrage über WinHTTP die Antwort geholt und dann mit Hilfe der WDDX Schnittstelle in eine leicht weiterverarbeitbare Antwort umgewandelt.

"datum" response Call(getProp)

Über eine Methode des Antwort-Objekts kann dann auf die einzelnen Datenfelder zugegriffen werden. Welche Namen diese tragen ist von der jeweiligen Webanwendung abhängig und sollte in der Dokumentation zu der Anwendung beschrieben sein.

Beispiele

SMTP

Offizielle Dokumentation von Microsoft

SMTP (Simple Mail Transfer Protocol) ist das Standardprotokoll im Internet um E-Mails zu versenden. Über das Protokoll wird die E-Mail an den SMTP-Server des Internet Providers übertragen, welcher sie dann an den Empfänger verschickt. Auch aus ClassiX® heraus lässt sich SMTP nutzen, und zwar über ein entsprechendes COM-Objekt. Es kommen hier die Collaboration Data Objects (CDO) von Microsoft zum Einsatz, welche teilweise Bestandteil des Betriebssystems sind (für weitere Informationen siehe Dokumentation von Microsoft).

Var(iMsg, iConf)
DropAll

CreateTransObject(CX_COM_OBJECT) -> iMsg
"CDO.Message" iMsg Call(CreateFromProgID)

CreateTransObject(CX_COM_OBJECT) -> iConf
"CDO.Configuration" iConf Call(CreateFromProgID)

Hier wird zuerst das Nachrichten-Objekt erzeugt, welches später die E-Mail Nachricht aufnimmt. Zusätzlich wird noch ein Konfigurations-Objekt erstellt, welches zum konfigurieren des SMTP-Servers dient.

iConf Call(GetFields) "http://schemas.microsoft.com/cdo/configuration/sendusing"
Swap Call(GetItem) 2 Swap Call(PutValue)

iConf Call(GetFields) "http://schemas.microsoft.com/cdo/configuration/smtpserver"
Swap Call(GetItem) "smtp.1und1.de" Swap Call(PutValue)

iConf Call(GetFields) "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"
Swap Call(GetItem) 10 Swap Call(PutValue)

iConf Call(GetFields) Call(Update)

Jetzt wird mit Hilfe des Konfigurations-Objektes der SMTP-Server und ein Timeout eingestellt.

iConf iMsg Call(PutConfiguration)
"test@classix.de" iMsg Call(PutTo)
"max.muster@classix.de" iMsg Call(PutFrom)
"This is the subject" iMsg Call(PutSubject)
"This is the message body" iMsg Call(PutText)
iMsg Call(Send)

Nachdem die Konfiguration der Nachricht zugeordnet wurde, werden noch die Absender- und Empfängeradressen gesetzt, sowie der Betreff und der eigentliche Text der E-Mail. Zum Schluss wird die E-Mail schließlich gesendet.