Diagramm-Objekt bei Doppelklick im Output-Fenster programmatisch selektieren und fokussieren

Mit der EA API können wir eine Menge an Automatisierung durchführen. Zum Beispiel können wir programmatisch ein oder mehrere Modell-Elemente in einem Diagramm selektieren. Genaugenommen selektieren wir die grafische Darstellung von Modell-Elementen, die Diagramm-Objekte. Ein häufig verwendeter Anwendungsfall ist der, Informationen programmatisch in das Output-Fenster zu schreiben und per Doppelklick auf eine Zeile im Output-Fenster, das betreffende Modell-Element im Project Browser oder in einem Diagramm anzuzeigen. 

Um in das Outputfenster zu schreiben können wir folgenden Code verwenden:

repository.CreateOutputTab("Mein Tab Name");      //Um einen neuen Output-Tab zu erzeugen.
repository.EnsureOutputVisible("Mein Tab Name");  //Um sicherzustellen, dass das Output-Tab aktuell auch angezeigt wird.
repository.ClearOutput("Mein Tab Name");          //Optional kann der Inhalt dieses Tabs gelöscht werden, bevor etwas neues geschrieben wird.

repository.WriteOutput("Mein Tab Name", "Das betreffende Modell-Element: " + element.Name, element.ElementID );  //Link zur API Beschreibung

Damit wir auf das Doppelklick Ereignis reagieren können, müssen wird folgende Call-Back Operation implementieren:

//CallBack Funktion
//Param Repository: Liefert Zugriff auf das aktuelle EA-Repositorium
//Param tabName: Der Tab Name, in unserem Beispiel: "Mein Tab Name"
//Param lineText: Der Text der im Output-Fenster angezeigt wird. In unserem Fall: "Das betreffende Modell-Element: Class1"
//Param id: Die ElementID des betreffenden Modell-Element. Es kann natürlich jede beliebige ID übergeben werden. Aus dem Tab-Namen und dem Text muss der Element-Typ ermittelbar sein.

public void EA_OnOutputItemDoubleClicked (Repository repository, string tabNamse, string lineText, int id)
{
    try

    {
        //Wenn kein Element gefunden wird, wird ein Fehler geworfen, daher das Try-Catch
        Element elementById = repository.GetElementByID(id);
        Diagram currentDiagram = repository.GetCurrentDiagram();
        if(currentDiagram == null) return;   //wir möchten das Diagramm-Element nur im gerade geöffneten Diagramm anzeigen.
        currentDiagram.SelectedObjects.AddNew(id.ToString(), ""); //zum selektieren des Diagramm-Objekts fügen wir der Liste der selektierten Diagramm-Objekte die ID des zu selektierenden Modell-Elements hinzu.
        currentDiagram.FindElementInDiagram(id); //Hiermit können wir den Fokus auf das Diagramm-Objekt legen, welches das Modell-Element mit der ElementID "id" darstellt.
    }
    catch (Exception)
    {

    throw;
    }
}

In dem gezeigten Beispiel wird davon ausgegangen, dass das Diagramm mit dem betreffenden Modell-Element bereits geöffnet ist. Ist dies nicht der Fall, muss folgendes durchgeführt werden:

  1. Es muss ein Diagramm-Objekt gefunden werden, welches das Modell-Element mit der übermittelten ElementID “id” darstellt. Dies geschieht am besten durch eine SQL Abfrage.
  2. Es muss ermittelt werden, in welchem Diagramm dieses Diagramm-Objekt enthalten ist.
  3. Öffnen des Diagramms.

Nun kann es allerdings sein, dass das Modell-Element in mehreren Diagrammen vorkommt. Dieser Umstand kann nun unterschiedlich behandelt werden. Pragmatisch kann das erste gefundene Diagramm geöffnet werden.

Wir kennen das gewünschte Verhalten bereits von anderen EA Funktionen:

Beim Tracen mit [Strg + U]: Mit der Tastenkombination [Strg +U] können wir im EA ein Modell-Element im Diagramm anzeigen lassen. Wird das Modell-Element in einem Diagramm verwendet, öffnet der EA dieses Diagramm, selektiert das Diagramm-Objekt, welches das Modell-Element darstellt und fokussiert es. Das Diagramm-Objekt wird also in das Zentrum des sichtbaren Diagrammausschnitts gerückt.

Bei der Modell-Validierung über das Output-Fenster: Dasselbe Verhalten sehen wir, wenn wir die Modell-Validierung starten und fehlerhafte Modell-Elemente gefunden werden. Diese werden im Output-Fenster aufgelistet. Mit einem Doppelklick auf eine Zeile im Output-Fenster wird ebenfalls das Diagramm geöffnet, in dem das Modell-Element grafisch (als Diagramm-Objekt) dargestellt wird. Vorausgesetzt dass es in einem Diagramm verwendet wird.

 

 

Veröffentlicht unter Automatisierung, Tips & Tricks