Alarme werden als Msg-Objekt in einer internen Dictionary<string,Msg> gespeichert. Bei Alarm-Quittierungen wird der Eintrag wieder entfernt.
Der Schlüsselwert dieser Dictionary ist ein Eigenschaftsname von einer beliebigen Netzwerkfähigen Eigenschaft, die der Klasse angehört. Das bedeutet, dass Sie für jede Eigenschaft eine separate Alarmmeldung aktivieren können.
In der Regel wird eine zusätzliche Eigenschaft vom Typ enum gip.core.autocomponent.PANotifyState deklariert. Diese Eigenschaft dient nicht nur als Namens-Index für die interne Alarm-Dictionary, sondern auch für die Signalisierung des Vorhandenseins eines Alarms auf der Benutzeroberfläche. D.h. Ein WPF-Steuerelement wird per WPF-Databinding an diese Alarmeigenschaft gebunden.
Falls Sie für eine Instanz mehrere Alarme gleichzeitig anzeigen wollen, benötigen Sie mehrere Alarmeigenschaften. Ansonsten wird mit jedem neuen Alarm der vorherige Alarm aus der Alarm-Dictionary ersetzt. Somit kann immer nur die letzte Meldung angezeigt werden.
Im folgenden Beispiel wurde eine solche Alarmeigenschaft definiert:
Die Id, die Sie der Msg-Instanz übergeben, damit ein übersetzter Text angezeigt wird erhalten Sie indem Sie in der Entwicklungsumgebung einen Alarm bei Ihrer Klasse hinzufügen:
Mit der Methode OnNewAlarmOccurred() fügen Sie einen neuen Eintrag in die Alarmliste hinzu. Falls bereits ein unquittierter Alarm mit demselben Meldungstext vorhanden ist, wird kein neuer Eintrag erstellt. Falls der Meldungstext unterschiedlich ist, dann wird die vorhandene quittiert durch die neue Meldung ersetzt.
Wenn Sie die Alarmmeldung auch in das Logfile schreiben möchten, dann rufen Sie vorher die Methode IsAlarmActive() auf um zu prüfen, ob dieselbe Meldung noch ansteht. Damit verhindern Sie die unnötige und mehrfache Ausgabe derselben Meldung in das Logfile.
Den Wert der Alarmeigenschaft müssen Sie explizit selbst setzen und rücksetzen, damit das gebundene WPF-Steuerelement das Vorhandensein des Alarms anzeigt. Das Rücksetzen machen Sie in der überschriebenen Methode AcknowledgeAlarms(). Vergessen Sie nicht base.AcknowledgeAlarms() aufzurufen! Ansonsten verhindern Sie die Quittierung von Alarmen.
Mit AcknowledgeAlarms() werden alle Meldungen die zu dieser ACComponent-Instanz gehören quittiert. Mit OnAlarmDisappeared() können Sie gezielt eine bestimmte Alarmmeldung quittieren und die anderen bleiben dabei unberührt.
Ein Alarm wird in der Statusleiste als blinkendes Warndreieck angezeigt. Per Doppelklick öffnen Sie die Alarmliste und können dann zu der Komponente navigieren das den Alarm ausgelöst hat - vorausgesetzt Sie haben es in der Visualisierung auch hinzugefügt.
Den Alarm können Sei alternativ auch per Kontextmenü quittieren.
Den Beispielcode können sie hier auf gitHub entnehmen.