Werden in einem Fenster Eigenschaften von Modellelementen geändert, so sind die anderen Fenster davon zu benachrichtigen, damit sie ihren Inhalt anpassen können.
Die meisten Fenster zeigen Modellelemente nicht nur an, sondern sie ermöglichen auch deren Änderung. Eine solche Änderung wirkt sich aber meistens nicht nur lokal im Fenster aus, in dem geändert wurde, sondern auch in anderen Fenstern. Wird beispielsweise der Name eines geöffneten Diagramms im Modellbaum geändert, dann ist auch der Text der Registerlasche des Diagramms und das Namensfeld im Eigenschaftenbereich anzupassen. Bei einer Änderung an Modellelementen muss also das Fenster, in dem die Änderung stattgefunden hat, die anderen Fenster von der Aktion benachrichtigen. Diesem Zweck dient die Refresh-Nachricht.
Eine Refresh-Nachricht hat Daten vom Typ RefreshWindowMessage. In den Daten sind Informationen zur Art der Aktualisierung enthalten:
Mode vom Typ RefreshMode
Typ der Aktualisierung
ElSet vom Typ ElementSet
Von der Aktualisierung betroffene Modellelemente
| Mode | Auslösende Aktion | ElSet |
|---|---|---|
| Command | Der Befehl Inhalt neu laden wurde ausgelöst. | Leere Menge |
| Content1 |
Veralteter Fensterinhalt wurde sichtbar. |
Leere Menge |
| Add | Modellelemente wurden erzeugt oder hinzugefügt. | Erzeugte Elemente |
| AddDiagramGraphic | Modellelemente wurden einem Diagramm hinzugefügt. | Hinzugefügte Elemente |
| Delete2 | Modellelemente wurden gelöscht. | Gelöschte Elemente |
| ChangeName | Änderung eines Namens | Betroffenes Element |
| ChangeStereotype | Änderung von Stereotypen | Betroffene Elemente |
| ChangeStereoM2Attribute | Änderung von Merkmalen | Betroffene Elemente |
| ChangeStereoProperty | Änderung von Stereotypeigenschaften | Betroffene Elemente |
| ChangeLabel | Änderung von Labels | Betroffene Elemente |
| ChangeSpecification | Änderung von Spezifikationstexten | Betroffenes Element |
| ChangePicture | Änderung eines zugeordneten Bildes | Betroffenes Element |
| ChangeOrder | Änderung der Reihenfolge zugeordneter Elemente | Betroffenes Element |
| ChangeImportedProfiles | Änderung importierter Profile bei Paketen | Betroffene Pakete |
| ChangeAccess | Änderung der Zugriffsrechte | Betroffene Elemente |
| ChangeLock | Änderung des Sperrzustands |
Betroffene Elemente; Leere Menge bei Entsperrung aller Elemente |
1 Ein Toolfenster erhält keine Refresh-Nachrichten, wenn es nicht sichtbar ist. Stattdessen wird vermerkt, dass das Fenster nicht aktualisiert wurde und dessen Inhalt daher möglicherweise veraltet ist. Wird das Fenster dann in den Vordergrund geholt, wird eine Refresh-Nachricht mit Modus Content ausgelöst. Das Toolfenster sollte daraufhin seinen Inhalt komplett aktualisieren.
2 Beim Modus RefreshMode.Delete ist zu beachten, dass die gelöschten Elemente zwar in den Daten der Nachricht enthalten sind, diese aber schon gelöscht und damit ungültig sind. Es darf also auf keinen Fall auf Eigenschaften dieser Elemente zugegriffen werden. Die Elementmenge darf nur benutzt werden, um z.B. die betroffenen Elemente im Fenster zu suchen, um zu entscheiden, ob das Fenster von der Löschaktion betroffen ist.
Hinweis
Zur Bearbeitung der Refresh-Nachricht siehe das Sample MID.Innovator.Plugin.Sample.RefreshMessage.
Achtung
Eine falsche Bearbeitung von Refresh-Nachrichten kann die Server-Performance drastisch reduzieren. Bitte beachten Sie unbedingt die Hinweise im Abschnitt Performance.
Änderungen an Modellelementen erfordern das Versenden von Refresh-Nachrichten an andere Fenster. In der Regel wird eine Elementänderung daher wie folgt realisiert:
In einem Steuerelement im Fenster oder in einem Dialog wird die Änderung vorgenommen und die Übernahme ausgelöst.
Bei Auslösen der Übernahme wird die Änderung durch Aufruf einer entsprechenden Methode der Server-API an der Server geschickt.
Meldet der Server als Antwort einen Fehler, dann ist dieser in einer Messagebox auszugeben. Das Fenster bzw. der Dialog befindet sich nach Schließen der Messagebox in dem Zustand wie unmittelbar vor dem Auslösen der Übernahme. D.h. das Steuerelement enthält weiterhin die geänderten Daten.
Meldet der Server als Antwort die fehlerfreie Übernahme der Änderung, dann ist eine Refresh-Nachricht an alle Fenster zu senden, damit diese ggf. auch ihren Inhalt aktualisieren, indem sie die Refresh-Nachricht in ihrer MessageHandler-Methode bearbeiten.
Zum Versenden der Nachrichten ist die Methode RefreshModel zu verwenden.
Hinweis
Zum Versenden der Refresh-Nachricht siehe das Sample MID.Innovator.Plugin.Sample.RefreshModel.
© 1986-2014 MID GmbH Nürnberg Deutschland. DIN EN 9001 zertifiziert. Alle Rechte vorbehalten.