Enterprise Architect Datenmodell (EA API)

 

Viele wissen bereits, dass der Enterprise Architect über
eine API verfügt mit der man das gesamte Modell und noch vieles mehr
programmatisch verändern kann.

In diesem Artikel möchte ich gerne die Grundlagen der API beleuchten.

 Einstiegspunkt ist in der Regel die Klasse Repository. In
ihr sind alle anderen Modellelemente, etc. enthalten. Das Repository entspricht
der Clientapplikation (dem EA) und dem geladenen Modell (dem EAP-File oder
einem DBMS).

Navigieren durch das Objektmodell

Das Repository enthält „Models“ vom Typ Package (rep.Models). Das sind alle Root Packages im Enterprise Architect. Für den EA sind das also auch „nur“ Pakete.

Ein Paket kann nun Diagramme (package.Diagrams), Elemente (package.Elements) oder wiederum Sub-Pakete enthalten (package.Packages).

Als Ergebnis erhält man immer eine Collection. Diese Collection ist allerdings kein Programmiersprachen spezifischer Container, sondern ebenfalls Teil der EA API. In dieser Collection findet man immer Elemente vom referenzierten Typ (Package, Element, Diagram, etc.)

Die in der Collection enthaltenen Elemente beinhalten jeweils eine ID des Elements in dem sie selbst enthalten sind. Mit element.PackageID erhält man z. B. die ID des Paketes, in dem das Element enthalten ist.

Will man wieder das korrespondierende Objekt zur gefundenen ID, verwendet man das Repository. Mit repo.GetPackageByID(element.PackageID) erhält man die korrespondierende Objektreferenz.

Manipulationen am Objektmodell

Will man das Modell programmatisch manipulieren, tut man dies ebenfalls über die Collection. Neue Elemente werden mittels myCollection.Add(,) hinzugefügt. Wobei die Parameter in der Regel (abhängig vom zu erstellenden Element) der Name und der Typ sind.

Will man eine neue Klasse in einem Paket anlegen geht man folgendermaßen vor:

myClass = myPackage.Elements.Add( "myNewClassName", "Class")

Über die Collection der Elemente eines Paketes erhält man eine neue Instanz, die in der Variable myClass gespeichert wird, mit Namen myNewClassName vom Typ Class.

Will man ein neues Attribut an einem Element hinzufügen verwendet man ebenfalls die Collection der Attribute des Elements:

myNewAttribute = myElement.Attributes.Add( "AttName", "int")

Somit erhält man ein neues Attribut mit dem Namen AttName vom Typ int. Mittels des erzeugten Objektes myNewAttribute können weitere Eigenschaften des Attributes gesetzt werden. Es ist auch möglich, dieses Attribut einer anderen Klasse zuzuweisen. Es quasi umzuhängen:

myNewAttribute.ParentID = 23

(… wobei 23 die ElementID eines anderen Elementes ist, das nun dieses Attribut bekommt)

Wichtig: Durch die oben beschriebenen Aktionen wurde lediglich das Objektmodell das aktuell geladenen Repositoriums geändert. Die Änderungen wurden noch nicht persistiert (in die DB geschrieben).

Zum Speichern der Änderungen bietet jedes Element eine Update() Operation. Damit wird das geänderte/neue Objekt persistiert.

Neben dem Schreiben der Änderungen ist es notwendig, das restliche Objektmodell neu zu laden. Dies geschieht durch den Aufruf von Refresh(). Folgendes Beispiel zeigt ein Beispiel in JScript wie ein neues Attribut am Element theElement hinzugefügt werden kann.

var attributes as EA.Collection;
attributes = theElement.Attributes;
var newAttribute as EA.Attribute;
newAttribute = attributes.AddNew( "m_newAttribute", "string" );
newAttribute.Update();
attributes.Refresh();

Elemente löschen

Vorhandene Elemente können natürlich auch gelöscht werden. Dies geschieht über die collection.DeleteAt(index) Operation. Dabei muss die Collection durchlaufen werden, wurde das zu löschende Element gefunden, kann mittels DeleteAt und den gefundenen Index gelöscht werden:

// Delete the attribute we just added
' List attributes
for i = 0 to attributes.Count - 1
  dim currentAttribute as EA.Attribute
  set currentAttribute = attributes.GetAt( i )
  ' Delete the attribute we added
  if currentAttribute.AttributeID = addedAttributeID then
    attributes.DeleteAt i, false
  end if
next

 

Mit diesem Überblick sollte es kein Problem mehr sein, seine Modelle programmatisch zu manipulieren.

Hier finden Sie das oben gezeigte Klassendiagramm in einem EA-Repositorium (.eapx).

Falls Sie mehr über das Enterprise Architect Objektmodell erfahren möchten, können Sie uns gerne kontaktieren.
Wir bieten individuelle Schulungen an.

Veröffentlicht unter Automatisierung, Modell-Repositorium, Modell-Suche, Tips & Tricks
Schlagworte: ,
3 comments on “Enterprise Architect Datenmodell (EA API)
  1. Danke für die Beschreibung des EA-Datenmodells.
    Gibt es dieses Datenmodell auch als EAP-, XMI- File zum Download?
    Ist eventuell ein Header-File oder allgemein die Klassendefinition auch als Source-Code vorhanden?

  2. HKA sagt:

    Die API ist auch in der EA Hilfe beschrieben. Dort sind auch die einzelnen Operationen im Detail erklärt. Das oben dargestellte Klassendiagramm ist auch nur ein Auschnitt des EA Objektmodelles. Eventuell werde ich es noch erweitern und dann auch als EAP File zur Verfügung stellen.

    Druch Model Scripts kann man sich auch sehr gut in das EA Objektmodell einarbeiten.

  3. H.Kargl sagt:

    Ich habe den Artikel aktualisiert und einen Download-Link zu einem EAP hinzugefügt. In dem EAP ist das API Modell und das DB-Schema enthalten.