Generic-Links via OCL

Hinweis: Ab Version 5.6 werden statt Generic-Link-Typen die neuen Custom-Link-Typen verwendet.

Zugriff  via OCL ab Vertec 5.6

Für den Zugriff auf die Links wurde mit der Version 5.6 eine Reihe von OCL Operatoren eingeführt, um dies zu vereinfachen. Den Beschrieb finden Sie im Artikel OCL Operatoren und Methoden für Links. Diese Operatoren könne auch mit den herkömmlichen Generic-Links verwendet werden.

Zugriff mit Vertec Versionen vor 5.6

Sie können Generic-Links auch via OCL auswerten.

Sie haben zum Beispiel einen Generischen Link-Typen "Verwaltungsräte - VR-Mandate", welcher Personen (als Verwaltungsräte) mit Firmen (als VR-Mandate) verbindet:

Generic Link

Per Drag & Drop verbinden Sie eine Person und eine Firma, die Sie verknüpfen wollen. Bei den entsprechenden Firmen werden danach die Verwaltungsräte, bei den Personen die VR Mandate angzeigt:

Verwaltungsräte / VRMandate

Abfrage via OCL

Nun möchten Sie zum Beispiel wissen, welche Personen im gesamten System ein Verwaltungsratsmandat haben. Dafür erstellen Sie einen  Expression-Ordner:

und geben als Expression folgende Bezeichnung ein:

Person.allInstances->select(fromLinks->select(rolle.bezeichnung='Verwaltungsräte')->size>0)

Erklärung

Ausschnitt Person

Das heisst, alle Objekte der Klasse Person (Person.allInstances) werden abgefragt, ob sie mindestens einen Link mit der Bezeichnung Verwaltungsräte haben (Anzahl Links mehr als 0 = ->size > 0).

So kann man alle Generic-Links abfragen, indem man die beiden Begriffe in der Expression jeweils durch die entsprechenden Begriffe unter Bezeichnung und Klasse im Link Typ ersetzt:

Ausschnitt Firma

Firma.allInstances->select(fromLinks->select(rolle.bezeichnung='VR Mandate')->size>0)

Es kommt dabei nicht drauf an, um welche Seite des Generic-Link-Typs es sich handelt (Von oder Nach), die Abfrage ist immer gleich. Wichtig ist, dass sich Bezeichnung und Klasse auf der gleichen Seite befinden.

Abfragen auf die Gegenseite

Wenn man auf die Gegenseite abfragen möchte, also z.B. von einer Person aus auf alle VR Mandate zugreifen möchte, kann das mit folgender Expression geschehen:

 

Gegenseite

Alle VR Mandate einer Person:

genericContainers->select(asstring='VR Mandate').links

Diese Expression funktioniert nur auf einer Person selbst, man kann also keinen allgemeinen Ordner daraus machen. Es ist also eigentlich

<myPerson>.genericContainers->select(asstring='VR Mandate').links

Das Resultat ist eine Liste mit Firmen, also mit der Klasse der Gegenseite. Aus unserem Beispiel würde diese Abfrage auf der Person Huber Thomas die Firmen Comtelsat AG und Foxprint AG als Resultat zurückgeben:

VR Mandate

Auf die andere Seite funktioniert die Expression gleich:

Alle Verwaltungsräte einer Firma:

genericContainers->select(asstring='Verwaltungsräte').links

auf einer Firma ergibt eine Liste von Personen (die zugeordneten Verwaltungsräte).

Als Listenspalte

Man kann das Resultat auch als Spalte in einer Liste anzeigen:

genericlinksanzeigen.gif

Dafür muss die Methode ->listToString verwendet werden, mit der man die Resultatsliste als einzelner String zusammenfasst:

Auf einer Personenliste:

genericContainers->select(asstring= 'VR Mandate').links->listToString(',')

Auf einer Firmenliste:

genericContainers->select(asstring= 'Verwaltungsräte').links->listToString(';')

Das Trennzeichen kann dabei angegeben werden, im Beispiel das Komma (', '), oder Semikolon ('; ') etc.

Klassen- und Objektmodell

Das zugrundeliegende Klassen- und Objektmodell können Sie dem Artikel UML Modell GenericLinks entnehmen.


14.04.2004 | 20.04.2012: Hinweis auf Zugriff je nach Version