7 application
Mit Hilfe der Netzwerkversion können Dialog Manager-Anwendungen in zwei Teile oder in beliebig viele Teile aufgeteilt werden.
Die Teilung von Anwendungen in mehrere Anwendungsteile ist von großer Bedeutung, da es dadurch möglich ist, die Display-Rechner besser auszulasten und den Server zu entlasten. Des Weiteren ist es dadurch möglich, beliebige Aktionen wie Zeichnen von Grafik, Abfragen von externen Schnittstellen usw. auf dem Display-Rechner durchzuführen.
Dieses Objekt für die Verarbeitung verteilter Anwendungen enthält Informationen über die Anwendung, deren Funktionen und die Art der Kommunikation. Diese Anwendungen können dann einzeln gestartet und wieder beendet werden.
Definition
{ export | reexport } application { <Bezeichner> } { <Objektspezifische Attribute> }
Ereignisse
Kinder
Vater
Menü
keins
7.1 Attribute
7.2 Spezifische Attribute
Das Objekt Application besitzt keine Display-Attribute, sondern nur die folgenden Attribute:
Attribut | Beschreibung |
---|---|
Mit Hilfe dieses Attributs kann definiert und abgefragt werden, ob die Anwendung gerade läuft. Eine Änderung dieses Attributes von false auf true bewirkt, dass die Anwendung gestartet wird. Wird dieses Attribut von true auf false geändert, so wird die Anwendung wieder beendet. |
|
.certificatefile
|
In diesem Attribut wird die Zertifikatsdatei definiert, die für eine SSL-Verbindung verwendet wird. |
.codepage
|
Dieses Attribut definiert die Codepage, mit der Applikationsfunktionen aufgerufen werden. |
Dieses Attribut definiert, dass sich die Anwendung mit einem laufenden Server-Prozess in Verbindung setzen soll, der auf dem Host gestartet worden ist (definiert durch Name oder IP-Adresse und der Portnummer). Bitte beachten Sie auch Kapitel „Abhängigkeit der Attribute .connect und .exec von der Transportschicht“. Das Attribut kann nur geändert werden, wenn .active = false ist. |
|
.errorcode
|
Das Attribut zeigt die Fehlerart an, welche bei der Aktivierung/Deaktivierung bzw. der Nutzung von Applikationsfunktionalitäten aufgetreten ist. Zurückgesetzt wird dieses Attribut intern bei der Aktivierung einer Applikation über das .active-Attribut (näheres siehe „Attributreferenz“). |
Dieses Attribut definiert, dass die Anwendung einen Prozess auf dem Host starten soll, der durch den Pfad gegeben ist (definiert durch Name oder IP-Adresse). Der Wert des Attributes beinhaltet den Programmnamen, Pfad, Rechnernamen und sonstige Informationen. Bitte beachten Sie auch Kapitel „Abhängigkeit der Attribute .connect und .exec von der Transportschicht“ und „Hinweis bei Verwendung von .exec zum Starten des Servers“. Das Attribut kann nur geändert werden, wenn .active = false ist. |
|
Interner Name der Anwendung, Identifikator. |
|
Dieses Attribut definiert, ob die Anwendung lokal oder über ein Netzwerk laufen soll. Das Attribut kann nur geändert werden, wenn .active = false ist. |
|
Optionen für eine SSL-Verbindung.
Verfügbarkeit
|
|
.password
|
In diesem Attribut kann das Passwort definiert werden, das zum Starten der Anwendungsseite beim RSH- oder SSH-Protokoll verwendet wird. |
.privatekeyfile
|
In diesem Attribut wird die Datei mit dem privaten Schlüssel definiert, der für das SSH-Protokoll verwendet wird. |
.publickeyfile
|
In diesem Attribut wird die Datei mit dem öffentlichen Schlüssel definiert, der für das SSH-Protokoll verwendet wird. |
.systemerror
|
Dieses Attribut wird beim Auftreten eines Fehlers mit dem Fehlerstring, den das System liefert, gesetzt und kann dann im Fehlerfall abgefragt werden. |
Mit Hilfe dieses Attributes wird definiert, welchen intern vorhandenen Transportmechanismus die Kommunikationsschicht verwenden soll. Dabei gibt es folgende Möglichkeiten:
Das Attribut kann nur geändert werden, wenn .active = false ist. |
|
.username
|
In diesem Attribut kann der Benutzername definiert werden, das zum Starten der Anwendungsseite beim RSH- oder SSH-Protokoll verwendet wird. |
7.2.1 Abhängigkeit der Attribute .connect und .exec von der Transportschicht
Die Attribute .connect und .exec sind vom verwendeten Transport abhängig, d.h. zukünftige neue Arten einer Transportschicht können andere Arten des Verbindungsaufbaus enthalten.
Im Falle des Protokolls "tcpip" sieht die Syntax von .connect wie folgt aus:
Im Parameter host wird der Rechnername, im Parameter portnumber die zu verwendende Portnumber angegeben.
Im Falle des Protokolls "tcpip" sieht die Syntax von .exec wie folgt aus:
"<host>[%<username>[%<password>]]:<path>"
Im Parameter host wird der Rechnername angegeben, auf dem das Programm gestartet werden soll.
Im Parameter username kann der Name des Users angegeben werden, unter dem der Benutzer auf dem Host-Rechner eingeloggt werden soll.
Im Parameter password kann das dort gültige Password des Benutzers angegeben werden. Diese beiden Parameter sind optional.
Im Parameter path wird der Pfad des zu startenden Programms angegeben.
Ab IDM-Version A.05.02.i unterstützt der Distributed Dialog Manager (DDM) das IPv6-Protokoll auf allen Architekturen, die IPv6 nativ unterstützen.
7.2.2 Hinweis bei Verwendung von .exec zum Starten des Servers
Bei Verwendung von .exec wird auf dem Anwendungsserver mittels rexec-Protokoll eine IDM-Anwendung gestartet, und der Darstellungsrechner wartet darauf (entsprechend ‑IDMlisten), dass sich diese Anwendung verbindet. Die Anwendung auf dem Anwendungsserver öffnet dann eine neue Verbindung (entsprechend .connect) um sich mit dem Darstellungsrechner zu verbinden. Dies wird im Normalfall eine normale
Verbindung sein, unabhängig davon, wie die Verbindung zum rexecd-Service aufgebaut wurde.
7.3 Beispiel
application TestAppl
{
.active false;
.connect "localhost:4711";
/* function definitions */
function callback CheckFilename() for deselect, modified;
function boolean FillListbox(object, string,
integer, integer,
string input output);
function integer FillContinue(object, integer, integer,
string input output);
function void QueryListbox (object, string);
}
7.4 Funktionen von dynamischen Bibliotheken anbinden
Über das Applikationsobjekt besteht auch die Möglichkeit, Funktionen einer dynamischen Bibliothek direkt in der Regelsprache anzubinden. Dieses Funktionalität ist aber nur auf Unix-Plattformen mit dl- oder shl-Support möglich, oder unter Microsoft Windows (als DLL). Erlaubt sind nur Funktionen ohne record-Parameter.
Unter Unix muss die IDM-Bibliothek libIDMdl.a mit –lIDMdl (vor libIDMinit.a) sowie die dl-Systembibliothek dazu gelinkt werden, um das dynamische Anbinden zu ermöglichen, unter Windows ist dies nicht notwendig.
Um zu Kennzeichnen, dass die unter dem Applikations-Objekt angegebenen Funktionen zu einer dynamischen Bibliothek gehören, ist das .transport-Attribut auf den Wert "dynlib" zu setzen.
Im .exec-Attribut hinterlegt man den Pfad zur Bibliothek. Die Suchreihenfolge ist systemabhängig und kann folgendermaßen erklärt werden:
Microsoft Windows |
Unix |
---|---|
|
Enthält der Pfad ein ‚/‘-Zeichen:
Ansonsten:
|
Die Anbindung der Funktionen erfolgt erst beim Aktivieren der Applikation über das .active-Attribut. Falls die Bibliothek nicht gefunden wurde, ist das Attribut trotz Setzung auf true danach false. Es können mehrere Applikationsobjekte auf ein und dieselbe Bibliothek zugreifen, dabei wird aber die Bibliothek auch nur ein mal geladen.
Beispiel
Dialog-Teil
dialog D
application Appl
{
.transport "dynlib";
.exec "./fib.so";
function integer Fib(integer);
}
on dialog start
{
case setup.opsys_type
in os_nt:
Appl.exec := "fib.dll";
endcase
Appl.active := true;
if Appl.active then
print "Fibonacci-Zahl von 7 ist: "+Fib(7);
else
print "Bibliothek "+Appl.exec+" nicht ladbar.";
endif
exit();
}
C-Teil
#include "IDMuser.h"
#if defined(WIN32)
__declspec(dllexport) DM_Integer DML_default DM_ENTRY Fib(DM_Integer i);
#endif
DM_Integer DML_default DM_ENTRY Fib(DM_Integer i)
{
if (i <= 2)
return 1;
else
return Fib(i-1)+Fib(i-2);
}
Unter Windows müssen bei der Generierung einer DLL die Funktionen noch über __declspec(dllexport)
als exportiert gekennzeichnet werden, damit sie dynamisch vom IDM angebunden werden können.
Zu beachten
Um innerhalb einer DLL auf DM-Funktionen konsistent mit der Anwendung zugreifen zu können, muss die Anwendung wie auch die DLL die DM-Bibliothek als dynamische Bibliothek (dmdll.lib) dazu gelinkt haben.