Anleitung zur Verwendung von UMLData-Events und Event-Filtern

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  UModel Referenz für Programmierer > Die UModel API > Übersicht > Anleitungen >

Anleitung zur Verwendung von UMLData-Events und Event-Filtern

Event-Empfänger müssen die _IUMLDataEvents Schnittstelle implementieren, um eines oder mehrere der folgenden möglichen Events von IUMLData zu empfangen:

 

OnBeforeErase

Wird unmittelbar bevor die UML-Daten aus dem Modell gelöscht werden, gesendet.

Wenn mehrere Daten gelöscht werden, wird dieses Event für jedes IUMLData Event gesendet (nicht nur für das oberste)

OnAfterAddChild

Wird gesendet, wenn die UML-Daten zur Modellstruktur hinzugefügt werden.

Wenn mehrere Daten auf einmal hinzugefügt werden (z.B. wenn eine Klasse mit mehreren Attributen zu einem Paket hinzugefügt wird), wird nur das oberste IUMLData Event gesendet.

OnChanged

Wird gesendet, wenn die UML-Daten geändert wurden (z.B. wenn ein Klassenname geändert wurde)

OnMoveData

Wird gesendet, wenn UML-Daten in ein neues übergeordnetes Event verschoben wurden (z.B. wenn eine Klasse in der Modellstruktur in ein anderes Paket verschoben wird).

 

Dieses Event kommt immer zwei Mal vor: einmal, beim Entfernen aus dem alten übergeordeten Event und einmal, wenn die UML-Daten an das neue übergeordnete Event angehängt werden.

 

Eventfilter können mit (Kombinationen von) ENUMUMLDataEventFiltern definiert werden, um festzulegen, welche Events von der UModel API gesendet werden sollen. Um eine möglichst schnelle Verarbeitung bei möglichst geringem Speicherplatzbedarf zu gewährleisten, sollten Event-Empfänger nur für diejenigen Events registriert werden, die wirklich betroffen sind.

 

So registriert z.B. der folgende Code "OnAfterAddChild" Events, wenn genau das Root-Paket ein neues Child-Element erhält (es wird kein Event empfangen, wenn ein Child des Root-Pakets ein neues Child-Event erhält):

 

// ensure we get informed when m_RootPackage (and only itself; we do not care about its children) gets a new child
m_RootPackage.EventFilter = (int)ENUMUMLDataEventFilter.eUMLDataEvent_AddChild;

 

UMLData Events arbeiten hierarchisch, daher kann der Event-Filter so eingestellt werden, dass nur Events vom angehängten IUMLData Event empfangen werden oder von angehängten IUMLData Event und allen seinen untergeordneten Events.

 

// ensure we get "OnBeforeErase" events also for *any* erased child (grandchild,...) of the rootpackage
m_RootPackage.EventFilter |= (int)ENUMUMLDataEventFilter.eUMLDataEvent_EraseDataOrChild;

 

UMLData Events werden auch gesendet, wenn UML-Daten durch Rückgängig / Wiederholen geändert werden. Beachten Sie allerdings, dass während eines Rückgängig / Wiederholen-Befehls keine Änderungen an UML-Daten vorgenommen werden können:

 

public void OnAfterAddChild(IUMLData ipUMLParent, IUMLData ipUMLChild)
{
  // check if child was added by undo/redo
    // (we are not allowed to modify anything during Undo/Redo !!)
    IDocument iDoc = (IDocument)ipUMLChild.Parent;
    if (!iDoc.IsInUndoRedo)
    {
        // ...
    }
}


© 2019 Altova GmbH