Immer mehr Systeme bieten die Möglichkeit, Metadaten zu erfassen und zu verwalten, um den Wert der eigentlichen Daten weiter zu steigern. Dies gilt insbesondere auch für Systeme zur Datenmodellierung, bei denen sich allerdings ein Problem dabei deutlich zeigt: Das Endergebnis der Modellierung ist ein Diagramm, welches das Datenmodell zum besseren Verständnis grafisch darstellt. Für die Metadaten gibt es aber kein grafisches Konzept, sie fließen nur textuell in das Diagramm ein, worunter dessen Übersichtlichkeit meist leidet.

Im Modellierungstool SAP PowerDesigner lassen sich Metadaten mittels VBScript automatisiert auswerten und grafisch in den Diagrammen visualisieren. Sie können dadurch auf einen Blick aus den Diagrammen entnommen werden, was deren Aussagekraft deutlich erhöht. Im Blog-Beitrag „Individuelle und dynamische Menüs für Datenobjekte im SAP PowerDesigner“ habe ich gezeigt, wie man individuelle und dynamische Menüeinträge zur Verwaltung zusätzlicher unternehmensspezifischer Metadaten anlegen kann. Diese dienen als Grundlage für die automatisierte Auswertung von Metadaten.

In diesem Beitrag zeige ich im Detail:

  • wie sich der PowerDesigner per VBScript-Prozeduren um zusätzliche Funktionalität erweitern lässt
  • wie sich diese zusätzliche Funktionalität über benutzerdefinierte Menü-Einträge aufrufen lässt

Anwendungsbeispiel: Entitätstypen in bestehendem Diagramm auf Basis ihrer Eigenschaften unterschiedlich darstellen

Wir greifen das Beispiel aus dem vorigen Blogbeitrag zu diesem Thema auf und führen es fort: Für die Entitätstypen in einem Conceptual Data Model hatten wir eine weitere Metadaten-Eigenschaft Custom_Type neu definiert, die entweder den Wert A oder den Wert B einnehmen kann. Bei allen Entitäten, denen der Wert A zugewiesen wurde, sollte u.a. noch der Integer-Wert für eine weitere Metadaten-Eigenschaft A1 verwaltet werden. Gleiches gilt für die Metadaten-Eigenschaft B1, wenn Custom_Type der Wert B zugewiesen wurde.

Jetzt möchten wir, dass die Entitäten in unseren Diagrammen auf Basis dieser Werte unterschiedlich dargestellt werden: Alle Entitäten, bei denen Custom_Type der A zugewiesen wurde, sollen automatisch mit einem hellblauen Hintergrund in den Diagrammen dargestellt werden, Entitäten mit Wert B für Custom_Type sollen einen hellgrünen Hintergrund bekommen. Außerdem sollen Entitäten, deren Eigenschaft A1 mit einem Wert zwischen 1 und 10 konfiguriert wurde, mit einer gestrichelten Umrandung versehen werden. Ansonsten soll die Umrandung wie voreingestellt durchgezogen bleiben. Analog soll bei Entitäten, bei denen die Eigenschaft B1 mit einem Wert zwischen 11 und 20 konfiguriert wurde, die Umrandungslinie die doppelte Breite bekommen.

Schritt 1: Zusätzliche Funktionalität per VBScript-Prozeduren hinzufügen

Auch diese zusätzliche Funktionalität konfigurieren wir wieder in der Extension, die wir im letzten Blogbeitrag angelegt haben. Die folgende Abbildung zeigt die bereits angelegten Extended Attributes, Criteria und Formulare:

Als erstes fügen wir der Extension eine neue Methode hinzu, in der wir die Metadaten dann auswerten wollen. Dazu führen wir wieder einen Rechtsklick auf die Meta-Klasse ‚Entity‘ aus und wählen ‚New‘ → ‚Method‘. Wir geben der Methode im Reiter ‚General‘ den Namen ‚CustomizeEntityDisplay‘ und wechseln zum Reiter ‚Method Script‘. In diesem ist bereits das Gerüst einer VBScript-Sub-Prozedur vorgegeben:

Diese bekommt einen Übergabeparameter obj, bei dem es sich jeweils um eine Entität handelt. Dazu später mehr. Wir fügen folgenden Code in die Sub-Prozedur ein:

Sub %Method%(obj)
  Dim symbol

  For Each symbol in obj.Symbols
    symbol.LineColor = vbBlack
    Select Case obj.GetExtendedAttribute("Custom_Type")
      Case "A"
        symbol.FillColor = CStr(RGB(146, 197, 252)) ' hellblau
      Case "B"
        symbol.FillColor = CStr(RGB(162, 198, 20)) ' hellgrün
    End Select
    
    Dim a1: a1 = obj.GetExtendedAttribute("A1")
    If a1 >= 1 AND a1 <= 10 Then symbol.DashStyle = 2 ' gestrichelt End If Dim b1: b1 = obj.GetExtendedAttribute("B1") If b1 >= 11 AND b1 <= 20 Then
      symbol.LineWidth = 1 ' doppelte Breite
    End If
  Next
End Sub

In diesem Code wird über alle Symbole der übergebenen Entität iteriert. Ein Entity-Symbol repräsentiert dabei jeweils die Darstellung der Entität in einem Diagramm. Für alle Entitäten wird die Farbe der Umrandungslinie auf schwarz gesetzt. Danach wird der Hintergrund der Entität je nach Wert von Custom_Type auf hellblau oder hellgrün gesetzt. Anschließend werden die Umrandungslinien der Entitäten mit 1 <= A1 <= 10 gestrichelt konfiguriert und für Entitäten mit 11 <= B1 <= 20 auf die doppelte Breite.

Jetzt legen wir eine weitere Methode an, die alle Entitäten aus unserem Modell ermittelt und jeweils die eben definierte Methode ‚CustomizeEntityDisplay‘ aufruft. Diese Methode ist der Meta-Klasse ‚Model‘ untergeordnet, die wir erst noch zu unserer Extension hinzufügen müssen. Wir führen einen Rechtsklick auf ‚Profile‘ aus, wählen ‚Add Metaclasses…‘, haken im darauf erscheinenden Dialogfenster das Kontrollkästchen neben ‚Model‘ an und bestätigen mit ‚OK‘.

Dann führen wir einen Rechtsklick auf ‚Model‘ aus, wählen ‚New‘ → ‚Method‘ und vergeben den Namen ‚CustomizeEntities‘:

Im Reiter ‚Method Script‘ fügen wir folgenden Code bei der Sub-Prozedur ein:

Sub %Method%(obj)
  Dim objType

  For Each objType In obj.Children
    If objType.ClassKind = cls_Entity Then
      objType.ExecuteCustomMethod("EXTENDEDDEFINITION_1.CustomizeEntityDisplay")
    End If
  Next
End Sub

Diese Methode bekommt das aktuelle Datenmodell übergeben und iteriert über dessen Kindobjekte. Wenn es sich bei einem dieser Kindobjekte um eine Entität handelt, wird für dieses Objekt die obige Methode ‚CustomizeEntityDisplay‘ aufgerufen.

Schritt 2: Benutzerdefinierte Menüeinträge hinzufügen

Um die Methode CustomizeEntities bequem aufrufen zu können, konfigurieren wir uns dafür einen extra Eintrag im Hauptmenü des PowerDesigners. Dazu führen wir einen Rechtsklick auf die Meta-Klasse ‚Model‘ in unserer Extension aus und wählen ‚New‘ → ‚Menu‘. Den Namen lassen wir unverändert bei ‚Menu_1‘ und bei ‚Location‘ wählen wir ‚Tools Menu‘ aus der DropDown-Liste aus. Im Reiter ‚Menu‘ klicken wir das Zahnradsymbol mit dem Plus-Zeichen, um unsere Methode dem Menü hinzuzufügen. Im darauf erscheinenden Dialogfenster haken wir das Kontrollkästchen neben ‚CustomizeEntities‘ an und bestätigen mit ‚OK‘:

Jetzt können wir unsere Methode bequem über das Tools-Menü ausführen:

Fazit: Die automatische Auswertung von Entitäts-Eigenschaften erhöht die Aussagekraft von Diagrammen

Die von uns zusätzlich konfigurierten Metadaten werden jetzt per VBScript automatisch ausgewertet und ihre Werte in den PowerDesigner-Diagrammen visualisiert. Dadurch lässt sich auf einen Blick erkennen, welche Entität in welche Kategorie fällt:

Alle Entitäten, bei denen Custom_Type der A zugewiesen wurde (Entities 1, 3 und 5), werden bei Aufruf unseres im Tools-Menü hinzugefügten Eintrags automatisch mit einem hellblauen Hintergrund in den Diagrammen dargestellt. Entitäten mit Wert B für Custom_Type (Entities 2, 4 und 6) mit einem hellgrünen Hintergrund. Entity_3 hat die Metadaten-Eigenschaft A1=5 und somit eine gestrichelte Umrandungslinie. Analog hat die Umrandungslinie von Entity_4 die doppelte Breite, da ihre Metadaten-Eigenschaft B1=15 ist.

Das von mir gewählte Beispiel hätte selbstverständlich auch ohne den Einsatz von VBScript mittels Stereotypen umgesetzt werden können. Allerdings müssen bei einem Stereotyp immer alle Eigenschaften eines PowerDesigner-Symbols definiert werden. Es ist also nicht möglich, nur einzelne Eigenschaften der Darstellung, wie z.B. nur den Hintergrund oder nur die Breite der Umrandungslinie zu spezifizieren. Möchte man also verschiedene Symbol-Eigenschaften über verschiedene Metadaten-Eigenschaften konfigurieren, muss für jede mögliche Kombination ein Stereotyp definiert werden. Dies kann schnell unübersichtlich und schwer wartbar werden.

Durch die automatische Auswertung und Visualisierung der Metadaten per VBScript können auch für komplexe und umfangreiche Datenmodelle übersichtliche Diagramme erzeugt werden. Ein weiterer Vorteil dieses Ansatzes ist seine Skalierbarkeit: Die grafische Darstellung für jedes Metadatum muss nur genau einmal im Code spezifiziert werden und wird dann für alle betroffenen Objekte automatisch umgesetzt, unabhängig von deren Anzahl und ihrem Auftreten in mehreren Diagrammen.