• Keine Ergebnisse gefunden

Wie baue ich ein Plug in? Nürnberg,

N/A
N/A
Protected

Academic year: 2022

Aktie "Wie baue ich ein Plug in? Nürnberg,"

Copied!
30
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Wie baue ich ein Plug‐in? 

Nürnberg, 9.11.2010

(2)

I N H A L T

1. Was ist ein Plug‐in ?

fb i l i

2. Der Aufbau eines Plug‐in 3. Ein Beispiel

4. Live im Visual Studio

(3)

Was ist ein Plug‐in ?

(4)

Was ist ein Plug‐in

Ein Plug-in [ pl ʌ g ɪ n] (häufig auch Plugin; von engl. to plug in, „einstöpseln, anschließen“, deutsch etwa

E it d l“) i t i C t d i

„Erweiterungsmodul“) ist ein Computerprogramm, das in ein anderes Softwareprodukt „eingeklinkt“ wird und damit dessen Funktionalität erweitert

dessen Funktionalität erweitert.

Quelle: Wikipedia

(5)

Was ist ein Plug‐in

Die Vorteile eines Plug-In

 Mit einem Plug‐in können

kundenspezifischen Erweiterungen in den Innovator nahtlos

g

kundenspezifischen Erweiterungen in den Innovator nahtlos  eingebunden werden

neue Functions und Features unabhängig von festen Innovator neue Functions und Features unabhängig von festen Innovator  Release ‐Zeitpunkten zur Verfügung gestellt werden

MID Insight 2010 5

© 2010 MID GmbH

(6)

Was ist ein Plug‐in

Die Engineerin‐Aktion Die Engineerin Aktion

C# / Java API Schnittstelle Engineering

Start

d Engineering Aktion Ende

Repository Server

(7)

Was ist ein Plug‐in

 Ein Innovator‐Plug‐in

ist eine interaktive Komponente des Innovator‐Clients

ist eine interaktive Komponente des Innovator Clients

unterscheidet sich nicht von seinen Standardkomponenten

kann einfach in eine vorhandene Innovator‐Installation

kann einfach in eine vorhandene Innovator Installation  integriert werden

MID Insight 2010 7

© 2010 MID GmbH

(8)

Was ist ein Plug‐in

Das Plug‐in Das Plug in

C# API

Schnittstelle Plug-In

Repository Server

C# Plug-in Schnittstelle Schnittstelle

Das Plug-in hat zwei Schnittstellen zur Interaktion!

Das Plug-in hat zwei Schnittstellen zur Interaktion!

(9)

Was ist ein Plug‐in

Einpluggen in den Client Einpluggen in den Client

Tool‐Window

Plug-In Document‐Window

Plug In

MID Insight 2010 9

© 2010 MID GmbH

(10)

Was ist ein Plug‐in

Einpluggen als Tool‐Window Einpluggen als Tool Window

Plug In Plug-In

Repository Server

(11)

Der Aufbau eines Plug‐in

Architektur und Kommunikation

(12)

Der Aufbau eines Plug‐in

Einbindung über Schnittstellen als DLL Einbindung über Schnittstellen als DLL

Ein Plug‐in realisiert eine vordefinierte Schnittstelle I t i DLL (D i Li k Lib )

Ist eine DLL (Dynamic Link Library) 

Liegt im Plugin‐Verzeichnis von Innovator g g

Wird beim Start des Client auf diese Schnittstelle hin untersucht

Wird geladen und aktiviert falls es diese Schnittstelle realisiert

(13)

Der Aufbau eines Plug‐in

3 verschiedene Realisierungsmöglichkeiten

Für die Realisierung eines Plug‐ins gibt es 3 Möglichkeiten

3 verschiedene Realisierungsmöglichkeiten

g g g g

ohne eigenes Fenster

 z.B. für unsichtbare Hintergrundaktionen bei Selektionswechsel

( )

als Tool‐Window (IPluginToolWindow)

 Dockbare Fenster wie z.B. Eigenschaftsbereich, Diagrammübersicht

als Document‐Window (IPluginDocumentWindow) als Document Window (IPluginDocumentWindow)

 Fenster im Dokumentenbereich wie z.B. Diagramme, Tabellen‐ und  Spezifikationseditor

MID Insight 2010 13

© 2010 MID GmbH

(14)

Der Aufbau eines Plug‐in

Die Komponentenschnittstelle

Ein Plug‐in realisiert die Schnittstelle IPluginComponent Die Komponentenschnittstelle

public partial class MyPlugin : IPluginComponent

Identifier Name der das Plug‐in identifiziert Identifier Name der das Plug in identifiziert

Commands Plug‐in spezifische Kommandoliste

RequestHandler Bearbeitet die Nachrichten von Innovator

ModelContext ist der Kontext des aktuellen Modells

R i di I N h i h

Request ist die Innovator Nachricht

(15)

Der Aufbau eines Plug‐in

Der ModelContext Der ModelContext

Der ModelContext

ist der zentrale Ankerpunkt für alle Client‐Windows an einem Modell

ist der Kontext des Modells an dem man gerade angemeldet ist

wird dem Request‐Handler der Komponente übergeben

h h i T l d D Wi d l P b i

steht auch eine Tool‐ oder Document‐Window als Property bereit

liefert die globale Selektion

stellt Funktionalität z.B. zum Senden von Nachrichten zur Verfügung.

stellt Funktionalität z.B. zum Senden von Nachrichten zur Verfügung.

MID Insight 2010 15

© 2010 MID GmbH

(16)

Der Aufbau eines Plug‐in

Die Komponentenschnittstelle

Ein Plug‐in realisiert die Schnittstelle IPluginComponent Die Komponentenschnittstelle

public partial class MyPlugin : IPluginComponent

Identifier Name der das Plug‐in identifiziert Identifier Name der das Plug in identifiziert

Commands Plug‐in spezifische Kommandoliste

RequestHandler Bearbeitet die Nachrichten von Innovator

ModelContext ist der Kontext des aktuellen Modells

R i di I N h i h

Request ist die Innovator Nachricht

(17)

Der Aufbau eines Plug‐in

Der RequestHandler einer Komponente Der RequestHandler einer Komponente

Der Request‐Handler für die Bearbeitung von Innovator‐Nachrichten

void IPluginComponent.RequestHandler(ModelContext context, Requestreq) {

switch(req.Type) {{

caseRequestType.CreateComponent:

{

#regionHier wird das Tool-Window erzeugt

context.CreateToolWindow(„MyPlugin“, newMyToolWindow());

#endregion }}

break;

caseRequestType.CanExeCommand:

{{

}

break;

.

MID Insight 2010 17

© 2010 MID GmbH

. .

(18)

Der Aufbau eines Plug‐in

Die RequestTypes für Komponente Die RequestTypes für Komponente

RequestType.CreateComponent Die Komponente wird initalisiert Hier kann das ToolWindow erzeugt  werden!

werden!

RequestType.OpenDocument Dokument öffnen

(nur bei Document‐Window Plug‐ins) RequestType.Reopen Dokument wieder öffnen

(nur bei Document‐Window Plug‐ins) RequestTypeCanExeCommand Vorbedingung für Innovator Kommandos RequestType.CanExeCommand Vorbedingung für Innovator Kommandos RequestType.ExecuteCommand Ausführung von Innovator Kommandos RequestType.ExpandRibbon Erweiterung der Ribbonbar mit eigenen 

Kommandos

(19)

Der Aufbau eines Plug‐in

Die Tool‐Window Schnittstelle Die Tool Window Schnittstelle

Plug‐Ins mit eigenem Tool‐Window realisieren IPluginToolWindow

. .

caseRequestType.CreateComponent:

{

#regionHier wird das Tool-Window erzeugt

#regionHier wird das Tool-Window erzeugt

context.CreateToolWindow(„MyPlugin“, new MyToolWindow());

#endregion

#endregion }

. .

public partial class MyToolWindow: ContentControl, IPluginToolWindow {

. .

MID Insight 2010 19

© 2010 MID GmbH

(20)

Der Aufbau eines Plug‐in

Die IPluginToolWindow Schnittstelle Die IPluginToolWindow Schnittstelle

ComponentIdentifier Identifikator der Komponente Context Kontext des aktuellen 

Modells

WorkingMode Modus bzgl. Selektion Selection Selektion im Tool‐Window MessageHandler Bearbeitet die Nachrichten 

von Innovator

CanExeCmd Vorbedingung für Innovator  Kommandos wenn Tool Kommandos wenn Tool‐

Window aktiv

ExecuteCmd Ausführung von Innovator  Kommandos wenn Tool‐

Kommandos wenn Tool‐

Window aktiv

ToolWindowType Identifier zur Identifikation  des Tool‐Windows

WorkingMode.SelectionDependence Reagiert auf Selektion WorkingMode.SelectionPropagation Setzt Selektion

des Tool‐Windows

(21)

Der Aufbau eines Plug‐in

Der Message‐Handler eines Tool‐Windows Der Message Handler eines Tool Windows

boolIPluginToolWindow.MessageHandler(WindowMessagemsg) {

switch(msg.Type) {{

caseWindowMessageType.SelectionChanged:

{

ELElementselectedElement = this.Context.Selection.GetSingleElement();

this.DoMyPluginWork(selectedElement);

returntrue;

returntrue;

} break;

caseWindowMessageType.Refresh:

{

RefreshWindowMessagermsg = msg asRefreshWindowMessage;

switch(rmsg.Mode) {{

caseRefreshMode.Delete:

break;

caseRefreshMode.Rename:

break;

break;

. . . }

MID Insight 2010 21

© 2010 MID GmbH

} break;

. .

(22)

Der Aufbau eines Plug‐in

Die WindowMessageTypes für Plug‐in Windows Die WindowMessageTypes für Plug in Windows

WindowMessageType.Activated Fenster wird aktiviert WindowMessageType Deactivated Fenster wird deaktiviert WindowMessageType.Deactivated Fenster wird deaktiviert

WindowMessageType.Refresh Fensterinhalt muss gemäß dem übergebenen  RefreshMode aktualisiert werden

Wi d M T S l i Ch d S l k i d ä d

WindowMessageType.SelectionChanged Selektion wurde geändert WindowMessageType.Deleting Element wird gelöscht WindowMessageType.Unlocking Element wird entsperrt WindowMessageType.Unlocking Element wird entsperrt

WindowMessageType.Closing Fenster wird geschlossen (nur für DocumentWindows) WindowMessageType.LoggingOut Abmeldung vom Modell

(23)

Der Aufbau eines Plug‐in

RefreshMode für WindowMessageType.Refresh RefreshMode für WindowMessageType.Refresh

RefreshMode.Command Expliziter Refresh (Aktualisieren, F5) RefreshMode.Add Element wurde neu erstellt

RefreshMode.Delete Element wurde gelöscht RefreshMode.Rename Element wurde umbenannt

RefreshMode.ChangeStereoProperty Elementeigenschaften wurden geändert RefreshMode.ChangeLabel Labelwert wurde geändert

R f hM d Ch S ifi ti S ifik ti t t d ä d t

RefreshMode.ChangeSpecification Spezifikationstext wurde geändert RefreshMode.ChangeAccess Zugriffsrecht wurde geändert RefreshMode.ChangeLockg Sperrzustand wurde geändertp g

MID Insight 2010 23

© 2010 MID GmbH

(24)

Der Aufbau eines Plug‐in

Ein Beispiel für das Senden von Nachrichten Ein Beispiel für das Senden von Nachrichten

In einem Plug‐in wird ein Modellelement umbenannt

try {

stringnewName = null;

ELNamedElementrenameElement = null;

ELNamedElementrenameElement null;

boolsupressCheckConstraints = false;

#regionHier das Element und den neuen Namen bestimmen .

.

#endregion

if(renameElement != null&& newName != null) {

// Element im über Server C#-API im Repository umbenennen renameElement.Rename(newName, supressCheckConstraints );

// Refresh an alle Fenster, die zu diesem ModelContext gehören

this.Context.RefreshModel(RefreshMode.Rename,newElementSet(renameElement));

this.Context.RefreshModel(RefreshMode.Rename, newElementSet(renameElement));

} } catch {

// Fehlerbehandlung // Fehlerbehandlung

(25)

Ein Beispiel

Anzeige von Spezifikationstexten

(26)

Ein Beispiel

Anzeigen von Spezifikationstexten für ein selektiertes Modellelement

Die Anforderungen

Das Plug‐in soll auf die Selektion reagieren

Die Spezifikationstexte des selektierten Modellelements werden angezeigt

Die Spezifikationstexte des selektierten Modellelements werden angezeigt

Die Anzeige erfolgt in einem Tool‐Window

Verschiedene Texte werden über Expander‐Controls gruppiert

Zur Anzeige soll keine weitere Benutzeraktion mehr erforderlich sein g

(27)

Ein Beispiel

Das Klassenmodell von SpecViewer Das Klassenmodell von SpecViewer

MID Insight 2010 27

© 2010 MID GmbH

(28)

Ein Beispiel

Der gesamte Source‐Code des Plug‐in passt auf 2 Seiten ! Der gesamte Source Code des Plug in passt auf 2 Seiten !

(29)

Das Beispiel Live im Visual Studio

(30)

Hauptverwaltung Nürnberg Eibacher Hauptstraße 141

90451 Nürnberg

Niederlassung Stuttgart Silberburgstraße 187

70178 Stuttgart

Niederlassung Köln Ettore‐Bugatti‐Straße 6‐14

51144 Köln

Niederlassung München Keltenring 7 82041 Oberhaching Tel.: +49 (0)911 ‐968 36‐0

Fax: +49 (0)911 ‐968 36‐10

www mid de

Tel.: +49 (0)711 633859‐0 Fax: +49 (0)711 633859‐10

Tel.: +49 (0)2203 20271‐0 Fax: +49 (0)2203 20271‐10

Tel.: +49 (0)89 95476831‐0

Fax: +49 (0)89 95476831‐9       

www.mid.de

Referenzen

ÄHNLICHE DOKUMENTE

Der Generalstabschef, der persönlich für das Kommando und die Ausbildung der Armee verantwortlich wäre, hätte zu seiner direkten Verfügung : den Kommandanten der Zentralschulen und

Editor Dateibearbeitung less Ansehen einer Datei cp Kopieren einer Datei mv Verschieben einer Datei rm Löschen einer Datei diff Vergleich von Dateien cat Konkatenieren von Dateien

Bei der Umsetzung der 2030-Agenda für nachhaltige Entwicklung stellt sich nun die Frage, ob sich aufgrund der Nutzung zusätzlicher und neuer Finanzierungsquellen die

Alle Kathoden der LEDs werden miteinander verbunden und dann mit einer gemeinsamen schwarzen Leitung an den Masse-Anschluss der Innovator Hubs angeschlossena. Da die Anordnung

Nun mache dir eine Liste, welches Segment der Anzeige du mit welchem BB-Pin des Hubs verbunden hast.. Das Programmieren

Jetzt sollte Deine Fußgängerampel von Grün nach Rot gehen, dann Deine Ampel von Rot nach Grün und Alles so bleiben, bis Du das Kabel wieder von der Minus(-) Buchse abziehst.

Seit knapp neun Jahren leitet Christian Ramsauer das Institut für Innovation und Industrie Management (IIM) an der TU Graz, das seine Innovationskraft nicht zuletzt während

Quelle: sass-lang.com/guide (siehe auch Unterschiede zwischen SASS und SCSS). Node.js