18 Version A.04.04.a

18.1 Windows NT

18.1.1 OLE-Ereignisse mit Rückgabeparametern

Bisher hat die OLE-Erweiterung des IDM’s nur Ereignisse (auch Messages genannt) ohne Rückgabeparameter erlaubt. Diese Restriktion ist mit Versions A.04.04.a aufgehoben.

18.1.1.1 OLE-Ereignisse ohne Rückgabeparameter

Die bisherige Definition und Benutzung von OLE-Ereignissen geschah über das message-Objekt auf der Serverseite. Das Ereignis kam als „externes“ Event an der Client-Seite an. Das sah dann bisher wie folgt aus:

Client

dialog OLEClient

window Wi {

  control Co {

    .xauto 0;

    .yauto 0;

    .mode mode_client;

    .uuid "499593d1-a159-11d1-a7e3-00a02444c34e";
    .connect true;
    .active true;
    on extevent „Msg“ (integer I, string S, boolean B) {
      Wi.title :=“Received Msg: „+I+“, „+S+“, „+B;

    }

  }

  on close {
    exit();

  }

}

Server

dialog OLEServer

message Msg(integer I, string S, boolean B);

model control MCo {

  .mode mode_server;

  .uuid "499593d1-a159-11d1-a7e3-00a02444c34e";

  .message[1] Msg;

  pushbutton PbSendEvent {

    .text „Send Event“;

    on select {

      sendevent(this.control, Msg, 123, „hello“, true);

    }

  }

}

18.1.1.2 Rückgabeparameter auf der Serverseite

Diese Vorgehensweise funktioniert immer noch. Um Ereignisse mit Rückgabeparametern zu unterstützen existieren zwei neue Schlüsselwörter in der Regelsprache: extern und public.

Mit extern deklariert man Regeln am Server-Objekt die als Ereignisse behandelt werden sollen und an den Client zu schicken sind. Ein Regelkörper ist für eine solch deklarierte Regel nicht erlaubt. Erlaubt sind hierbei die Datentypen integer, string, boolean und object. Als Parametertypen zulässig sind input, output und input output. Die Rückgabe eines so deklarierten Ereignisses kann also direkt als Rückgabewert erfolgen oder durch Benutzung eines output-Typs. Bei einem Parameter vom Datentyp „object“ können nur das null-Objekt oder IDM-Objekte der Klasse control und subcontrol übergeben werden, da nur diese ein für OLE relevantes IDispatch-Interface besitzen. Objekte anderer IDM-Objektklassen werden als null-Objekt an den Client weitergegeben.

Die Versendung eines solchen Ereignisses kann nun nicht mehr über das sendevent-Builtin erfolgen, da Builtin-Aufrufe keine Rückgabeparameter unterstützen, sondern geht ganz einfach durch direkten Aufruf der als „extern“ deklarierten Regel. Es kann nicht festgestellt werden ob der Client das Ereignis behandelt hat oder nicht, außer an den Rückgabewerten.

Beispiel Server

dialog OLEServer

model control MCo {

  .mode mode_server;

  .uuid "499593d1-a159-11d1-a7e3-00a02444c34e";
  extern rule boolean Msg(integer I, string O output);

  pushbutton PbSendEvent {

    .text „Send Event“;

    on select {
      variable string Str;

      if this.control:Msg(123, Str) then
        this.text := Str;
      endif

    }

  }

}

18.1.1.3 Rückgabeparameter auf der Client-Seite

Auf der Client-Seite einer IDM-OLE-Anwendung dient wiederum das public-Schlüsselwort dazu um Regeln zu kennzeichnen, die als Ereignis-Methoden von „Außen“ (sprich von der OLE-Server-Seite) aufgerufen werden dürfen. Somit ist man vor ungewollten Aufrufen von „privaten“ Methoden geschützt. Bei public-Regeln sind die gleichen Datentypen und Parameter-Typen wie auf der Server-Seite erlaubt. Diese Ereignisse werden im Gegensatz zu den bisherigen „Messages“ synchron aufgerufen. Ist ein Ereignis nicht als „public“-Regel vorhanden, so wird es als externer Event wie bisher auch asynchron weiterverarbeitet, allerdings ohne Unterstützung für Rückgabewerte. Public-Methoden werden auf der Client-Seite wie ganz normale Regeln behandelt und haben nur unter einem control-Objekt im mode_client die zusätzliche Bedeutung als Ereignisse.

Beispiel Client

dialog OLEClient

window Wi {

  control Co {

    .xauto 0;

    .yauto 0;

    .mode mode_client;

    .uuid "499593d1-a159-11d1-a7e3-00a02444c34e";
    .connect true;
    .active true;
    public rule boolean Msg (integer I, string O output) {

      Wi.title :=“Received Msg: „+I;
      O := „hello“;

      return true;
    }

  }

  on close {
    exit();

  }

}

18.1.1.4 Konvertierung zwischen OLE- und IDM-Datentypen

Ein kurzer Hinweis zu Datentypenkonvertierung bei der Übergabe von Daten an die IDM-OLE-Client-Seite. Die Daten kommen als VARIANT (MS Windows Datentyp) beim IDM an und werden entsprechend der nachfolgenden Tabelle in einen IDM-Datentyp umgewandelt:

Variant-Datentyp

IDM-Datentyp

VT_BOOL

Boolean

VT_BSTR

String

 

Integer

 

object  (dynamisch angelegtes subcontrol)

Parameter die Rückgabewerte von der Client-Seite erwarten, werden zusätzlich durch VT_BYREF in der VARIANT-Struktur gekennzeichnet.

18.1.1.5 Tracing der IDM-OLE-Aktivität

Bei eingeschaltetem Tracing auf der Client- wie auch auf der Server-Seite geben die Tracing-Zeilen mit  [OC]- und [OR]-Tags Hinweise zu Aktionen die in der OLE-Schnittstelle des IDM’s ablaufen. Folgende Kurzübersicht soll die Bedeutung des dem Tag nachfolgenden Bezeichner erklären und damit das Debugging verbessern. Das Tracing erfolgt erstmals unabhängig davon ob das Attribut/Methode oder Ereignis tatsächlich existiert um so die Verfolgung der Aktivitäten an der OLE-Schnittstelle zu erleichtern.

OC/OR-Tracing-Ausgabe

Bedeutung

Client

Server

 

DM_OLE_CallMethod

Client ruft auf dem Server eine Methode auf

 

DM_OLE_GetAttr

Client erfragt den Wert eines Attributs vom Server

 

DM_OLE_SetAttr

Client setzt den Wert eines Attributs auf dem Server

DM_OLE_AttributeChanged

 

Client bekommt die Mitteilung, dass sich auf der Serverseite ein Attribut geändert hat

 

DM_OLE_CallEvent

Auf der Serverseite wird ein Ereignis abgeschickt

DM_OLE_HandleEventInvoke

 

Client soll ein Ereignis behandeln

18.2 Motif

18.3 Java-Window-Interface

18.4 Kern

18.5 Editor

18.5.1 Autocomplete-Feature im Regelfenster

Das Regelfenster im Editor ist nun mit einem Auto-Complete-Feature ausgestattet um die Entwicklung zu vereinfachen. Es ist standardmäßig eingeschaltet kann aber im Konfigurations-Fenster ausgeschaltet werden.

Es dient dazu dem Programmierer bei der Eingabe von Attributen und Methoden zu helfen und funktioniert folgendermaßen:

Einschränkungen

Als Objekt wird vor dem . bzw. : ein Pfad-Ausdruck erkannt der keine dynamischen Anteile (z.B. Variablen, Attributwerte, Ausdrücke) besitzt. Auch Schlüsselwörter wie this, thisevent, setup werden erkannt. Die Vervollständigung kann nur innerhalb von Regeln geschehen deren Zugehörigkeiten zu einem Objekt bekannt sind und kein Parsing benötigt; man sollte also sinnvollerweise im Modus „Object Rules“ (Regeln zum Objekt) arbeiten.

Beispiele

dialog Dialog

 

window Wi

{

  object ObjAttr := Pb;

  pushbutton Pb {}

  pushbutton {}

  pushbutton {

    record Rec {}
  }

}

record Rec2 {

  object Attr;
}
on dialog start {

  variable object LocalVar := Dialog;

  variable integer Count := 2;

}

In der start-Regel folgende Pfade vervollständigen lassen:

OK

Nicht OK

this.

LocalVar.

Dialog.Wi.Pb:

Wi.ObjAttr:

Dialog.Wi.PUSHBUTTON[2].Rec.

this.parent.

 

Dialog.lastrecord.Attr.

 

Wi.PUSHBUTTON[Count-1]:

18.6 COBOL-Interface

18.7 Demos

18.8 Netzwerk