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 |
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 |
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) |