Thomas Schmoldt

Thomas
Schmoldt

About the Author

Make it Your Own: Eigene Add-Ins für objectiF entwickeln

Written by Thomas Schmoldt on 10/15/2008 1:12:00 PM

Ich möchte Ihnen heute anhand der Implementierung eines Add-Ins erläutern, wie Sie objectiF über dessen COM-Schnittstellen erweitern können. Mein Beispiel ist in C# entwickelt, es kann jedoch auch eine beliebige andere COM-fähige Programmiersprache verwendet werden (z.B. VB6 oder VB.NET).

Bevor Sie weiterlesen: Was ist eigentlich ein Add-In? Ein Add-In ist eine Komponente, die eine Klasse enthält, die die Schnittstelle IAddIn von objectiF implementiert. Ein Add-In wird objectiF zugeordnet und nicht einem objectiF-System. Es steht also nur den Anwendern zur Verfügung, die das Add-In explizit in objectiF zugewiesen haben. Das Add-In ist dann aber auch in jedem objectiF-System verfügbar, das der Anwender öffnen kann.

Und jetzt zu meinem Beispiel: Als erstes lege ich ein neues objectiF-System auf Basis der Vorlage UML mit C# an. Darin erzeuge ich eine neue Projektmappe und ein neues NET-Projekt (Klassenbibliothek mit dem Namen SampleAddIn).

Im nächsten Schritt lege ich in dem Package SampleAddIn eine neue Klasse AddIn an, die die Schnittstelle IAddIn aus dem Package Microtool.Objectif.Interop implementiert:

Wie Sie im nächsten Bild sehen werden, ist die Schnittstelle eines Add-Ins recht überschaubar. Sie besteht lediglich aus zwei Methoden und einem Property. Die Bedeutung der einzelnen Schnittstellen habe ich im Code als Kurzbeschreibung hinterlegt.

Nun generiere ich das Projekt von objectiF nach Visual Studio. In den Eigenschaften des .NET-Projekts sind noch  einige Anpassungen nötig, damit die Komponente via COM mit objectiF kommunizieren kann bzw. von objectiF erkannt wird:

  • Die Projekteigenschaft Für COM-Interop registrieren unter Erstellen aktivieren.



    Dadurch wird neben dem Assembly eine Typbibliothek erstellt.
  • Einen COM-Verweis auf die microTOOL objectiF 7.0 Object Library anlegen.
  • Die Klasse Add-In bekommt das Attribute ComVisible(true), damit das Add-In über COM sichtbar ist.
  • Außerdem wird über das Attribut Guid (Globally Unique Identifier) der Klasse eine eindeutige ID zugeordnet. Die GUID erzeuge ich über Extras/GUID erstellen/Registry Format, wobei ich die geschweiften Klammern entferne.

Der Kopf der Klasse sieht dann so aus:

Nachdem ich das Projekt übersetzt habe, könnte ich es bereits in objectiF als Add-In verwenden. Da ich jedoch noch keine Implementierung der Run-Methode vorgenommen habe, wäre dieser Vorgang sehr unspektakulär. Deshalb folgt noch eine Beispielimplementierung der Run-Methode. Dabei habe ich mich an häufigen Fragen zur COM-Schnittstelle orientiert.

Den Source-Code finden Sie hier zum Download: AddIn.cs.zip (2,17 kB)

Jetzt kann das Projekt übersetzt werden. In meinem Beispiel wird dabei das Assembly SampleAddIn.dll und die Typbibliothek SampleAddIn.tlb erzeugt.

Um das Add-In in objectiF zuzuweisen, sind folgende Schritte notwendig: Zuerst wird ein beliebiges objectiF-System geöffnet. Über den Hauptmenüpunkt Extras/Add-In Manager starte ich den Add-In Manager. Dieser ist für die Verwaltung der Add-Ins zuständig. Über die Schaltfläche Hinzufügen öffne ich dann den Dateidialog, in dem ich die SampleAddIn.tlb auswählen kann.

Anschließend steht unter Extras einer neuer Menüpunkt Beispiel-Add-In zur Verfügung.

Bei meiner Implementierung wird beim Ausführen ein Package mit dem Namen Neues Package und der Klasse MyClass sowie eine benutzerdefinierte Eigenschaft TestEigenschaft für den Stereotyp Class angelegt werden. Außerdem erhält die neue Klasse den Wert „Wert“ bei der Eigenschaft TestEigenschaft.

Probieren Sie mithilfe meiner Beispiel-Implementierung doch einmal, ein eigenes Add-In zu entwickeln und schildern Sie mir Ihre Erfahrungen.

Das müssen Sie wissen, wenn Sie eigene Add-Ins erstellen

Wenn Sie eigene Add-Ins erstellen und anderen Anwendern zur Verfügung stellen möchten, sind folgende Schritte auf dem jeweiligen Client erforderlich:

Das erstellte Assembly muss in den Ordner Assemblies und die Typbibliothek in einen beliebigen Ordner kopiert werden. Ich speichere die Typbibliothek z.B. immer im Installationsverzeichnis von objectiF.
Anschließend muss das Assembly über die regasm.exe und den Schalter codebase sowie die Typbibliothek über die regtlibv12.exe unter Windows registriert werden. Dazu geben Sie die beiden folgende Aufrufe nacheinander über die Kommandozeile ein:

%WINDOWS%\Microsoft.NET\Framework\v2.0.50727\regasm.exe “%objectiF-Installationsverzeichnis%\Assemblies\%Add-In-Name%.dll” /codebase

%WINDOWS%\Microsoft.NET\Framework\v2.0.50727\ regtlibv12.exe “%objectiF-Installationsverzeichnis%\%Add-In-Name%.tlb”

Nachdem beide Komponenten erfolgreich registriert wurden, kann der Anwender das Add-In wie oben beschrieben hinzufügen.

Wann würde man diese Schnittstelle verwenden?

Wie in der Run-Methode zu sehen, wird immer das System-Objekt des objectiF-Systems übergeben, auf dem Sie den Befehl ausführen. Dementsprechend bietet sich die Add-In-Schnittstelle in erster Linie dann an, wenn Sie Operationen auf dem Gesamtsystem ausführen möchten. Für elementbezogene Operationen würden Sie eher auf die Aktions-Skript-Server- oder Command-Server-Technik zurückgreifen, über die Sie einzelne Kontextmenübefehle auf Elementen anbieten können.

 

Tags: ,

Add comment

Bitte beachten Sie unsere Kommentarrichtlinien



biuquote