Features, discussions, tips, tricks, questions, problems and feedback

AdvancedAlarmViewer - a custom control for current and historical alarm display

This article describes functionality and usage of Advanced Alarm Viewer control - a combination of HistoricalAlarmViewer design and AlarmViewer functionality in one with some additional upgrades.

NOTE: This control is currently in testing phase. If You decide to use it and encounter any issues (which might happen, please be aware of that), please post them here or in private message to me. If You require completely stable solution, please use standard AlarmViewer control and HistoricalAlarmViewer control respectively.

Looks (click any of the screenshots to enlarge):

It is possible to change LookAndFeel theme as well as drag and drop columns to categorize data + add more aggregation functions and change position of main menu by simply dragging and dropping it where applicable


  1. Download the control from here: AdvancedAlarmViewer.zip (124.7 KB)
  2. Unpack it and paste into plugins\Adroit folder of MAPS/SmartUI installation (so this would be either: C:\Program Files (x86)\Adroit Technologies\MAPS\plugins\Adroit or C:\Program Files (x86)\Adroit Technologies\Adroit\SmartUI\plugins\Adroit
  3. While having graphic form opened in Designer, right click on Toolbox->Add Controls…obraz
  4. Check from the list of hidden controls AdvancedAlarmViewer and click finish
  5. Draw the control on the graphic form by selecting it from Adroit category in Toolbox.

Modes of operation

  • Historical mode - this mode displays data from OLEDB datasource to which AlarmManagement agent (can be in free-of-charge historical mode) logs historical alarms. Configuration is applicable same way as here: MAPS - How to create historical Alarms in SQL using Alarm Management Agent (requires MAPS 3.4.x)
  • Current mode from Alarm/AlarmList Agent - this way the control displays alarm just the same way as standard AlarmViewer
  • Current mode from Alarm/AlarmList Agent with selected “Use Alarm Management Agent Data” option - as above, additionally such columns as Categories, Reasons and Notes are filled with values where applicable. Also, if any outstanding reasons and notes are required to commit, these are displayed directly underneath current alarms, not as separate window. NOTE: Alarm Management license is required for this functionality to work fully.
  • Current mode from Alarm/AlarmList Agent with additional OLEDB Datasource hybrid mode - this way if AMA logged current alarms to database, additional columns with data are filled whenever it is possible (such as unacknowledge time, cleared datetime etc.)
  • Current mode just from OLEDB datasource - this displays data from currentIncidents table created by AlarmManagement agent. NOTE: in this mode Acknowledgment functionality and other “LIVE” functionality does not work as control is not connected to alarm agent.

Please feel free to check all the available visible properties and elements of configuration to make this control work as You would like. Also, all visible strings are translatable via translation View in Designer (if string filter is disabled)

More description below taken from specification of control:


Currently AlarmViewer control is missing many customization features available directly from properties:

  • font size
  • font type
  • background color of datagrid
  • live filtering modification
  • size of buttons in toolbar
  • and more

These customization features were already mostly available in HistoricalAlarmViewer control. It made more sense to bring data which normally is displayed in AlarmViewer control into advanced HistoricalAlarmViewer control than other way around.

Clients also like unification – up until now having 2 separate controls managing alarms which looked really differently was making a confusion.

In short, HistoricalAlarmViewer is very advanced and modern way looking control but until recently could only display data from OLEDB datasource. Although Alarm Management Agent can log into Microsoft SQL Database table of Alarms and that table can be displayed in HistoricalAlarmViewer, it was far from reaching same functionality of AlarmViewer. As first, this required database setup, refresh of data is on minute time basis, not subscription-based and there was no functionality of acknowledgment of alarms neither providing reasons and notes.

Also, the fact that Alarm Management Agent has functionality to create S88 structure for alarms and group them accordingly, such data management could be used only when displaying Historical Data of Alarms, it was not possible to filter or group alarms by Alarm Management Agent structure in AlarmViewer control.

So, some functionality was missing in AlarmViewer control (Alarm Management additional data) and some functionality was missing in HistoricalAlarmViewer control (i.e. acknowledging alarms)

Best way in such situation was to bring all functionalities into one control – and since HistoricalAlarmViewer control is superior in this case (pagination functionality, devexpress FeelAndLook option to change theme of control etc.) it was natural to bring all the required functionality of AlarmViewer control into HAV, making it from now on AdvancedAlarmViewer.

Added possibility for selecting multiple rows at once (this was required for acknowledging multiple alarms at once)
Property Font of AAV is now working. It applies Font to gridView of the control (so to all data)
Simplified Datasource configuration – now You choose between Current/Historical and elements show up/hide based on that
Alarms have colors just like in the original AlarmViewer control – different background for status of alarm and different color of font for status of acknowledgment, it is also possible to enable priority colors. This is all available to configure in new General Configuration wizard tab – Active Alarms Colors
In columns You can now enable AssociatedValues column – it will display AMA-based associated tags in one row (I am wondering what is better if there are multiple values associated with one alarm – display it as few rows with the same alarm and have in every row different associatedvalue or like I am doing it now, display all in one cell concantenated – possible UX story).
Appearance configuration tab in General Configuration has now toolbar settings as well (and fonts settings!)
In Current mode You can pick between data from Alarm/Alarm list agent or SQL CurrentIncident table or both at once (in such case it is refreshed and based primarily on Alarm agent but if corresponding data exists in SQL, it is joined – however, because subscription update from alarm agent comes first and only then CurrentIncident table is updated by AMA, always last subscription change is not having this information, unless user hits manual refresh button after AMA update to CurrentIncidents happened)
Added statusBar with Acknowledge button on bottom part of control (visible only in Current mode and only if elements of that bar are set to visible, no need to show empty statusbar). I am using same looks and font as the whole theme for the Historical Alarm Viewer control, to keep the control looks unified. In other words, if You change size/style of control font or change LookandFeelSkin, it will be applied also to StatusBar below.
Reasons and notes button now commits Reasons, Subreasons and Notes for selected rows (if reasons and notes are provided)
Last Updated info added to statusBar to show when the data in dataset was updated
All “More options” elements from AlarmViewer control added to statusbar and supported – same code as in old AlarmViewer – so alarm inhibit control and Global Acknowledge All
Information button added – works same way as in AlarmViewer double-click to open graphic form defined in Agent Configurator
Main Toolbar switched from WinForms to DevExpress – it is using same LookAndFeel theme and Font as the whole control and it is possible to drag’n’drop it in real time
Most of the toolbar buttons visibility is now possible to change via properties ButtonSomethingSomethingVisible
CurrentTableName and HistoricalTableName properties are exposed so it can be changed to View with translation table.
Most text properties are exposed for translation possibilities.
ToolbarLargeIcons property added – making whole control more touch-friendly after enabling. check it out to see what it does!
UpdateThreshold added to prevent system from locking – copied solution from standard AlarmViewer based on threads
UsePriorityColors – should control in Current mode use priority colors or not.
AcknowledgeOnDoubleClick (settings category) – if true it does what it says – double clicking on alarm acknowledges it
OnRowSelected – raised when clicking on any row
OnRowDoubleClick – raised on double clicking row
OnAcknowledged – raised when alarm(s) are acknowledged using button acknowledge or double-click
If Properties AdroitDataSourceName and AlarmAgentName are filled and property ButtonAcknowledgeVisible is set to true, it is possible to Acknowledge selected alarms if we are using Current table instead of historical.
Filtering now is preserved when changing pages.
Grouping/column widths and basically all grid layout is now preserved upon switching pages (this was before reset to defaults every time when Operator was switching pages)
SmartUI translation now works for most text properties (gridView search bar somehow refuses to change string to different than DevExpress default even that it is done the way DevExpress suggested in code)
Acknowledgment and opening graphic form on single double click should now work together if both options are enabled
Row focus is kept when data is refreshed
Debug messages moved to eventlog – will work only when operator is run with administrator priviledges
On initial configuration of control based on picked method (current/historical) corresponding columns are shown/hidden + the same happens with Acknowledgment button.
Disabled focus of first row on initial run and after acknowledgment so colors are less confusing

General Configuration Wizard description

Added one new tab with Alarm Colors configuration.

Initial configuration now looks like attached in modes of operation above.

If Current/Historical Alarms option is Historical – all works the old way besides keeping filtering and column arrangement on switching pages and new looks

If it’s Current mode with OLEDB Datasource only selected – same way as Current mode before (based on CurrentIncidents SQL table from AMA)

If Alarm/AlarmList Agent option is enabled and agent is picked – then Historical Data Update Settings is hidden, because there is no timer-based refresh, it is subscription-based refresh (upon incoming data from agent, taking in mind UpdateThreshold property as in AlarmViewer control). If with Agent option OLEDB datasource option is still selected, if corresponding data to alarm agent alarms is found in CurrentIncidents, it is joined in one row for consistency

The functionality was made more user-friendly so the user does not need to specify is he using Alarm Agent or Alarm List Agent – this is defined by checking if DataSet incoming has agent type specific columns (some columns in Alarm List agent are not available in Alarm agent)

5 Known Bugs
cannot have more than 1 instance of control on GF (spiders are removed while configuring - possible workaround - manual spider attachement and don’t enter configuration then)
6 Known Limitations
Datetime formatting is always based on Operator language. If You want to change the formatting, change the locale of Operator (using operatorLanguageSelection button for example)
Filtering and search if pagination is enabled is applicable per page, not per whole data set. If You want to search data through all existing data, disable pagination (and to make sure data will not change while searching/filtering, also disable auto-refresh) and do it then.
No translation for General Configuration/Constraints pop-ups. Please make Your own custom graphic form to manipulate date/time constraints if other language than english is required
Print preview had to be removed. If You require print preview, use Export to… button to export data to any selected format, or in windows window select “print to PDF”

This control was tested on Windows Server 2016/Windows 10 Professional and MAPS and higher.

1 Like