I find the built-in alarming to be somewhat limiting, especially in the fixed 5-level priorities, and no way to display Associated Data as a column in the status window.
Is there a better approach than building custom alarm objects? I could theoretically replace "Priority" with Associated Data, and I could create more flexibility in sorting. I could also make a more effective alarm class mechanism using Associated Data and allow the object to dynamically examine alarms by class. Are there any drawbacks to this?
One caveat I can think of is logging... anyone analyzing logs would likely be confused by the built-in priority vs my custom priority. And I'm not sure what kind of performance hit there might be by using a custom alarm object. And I'm not even sure what hurdles I'd have to jump through to pull historical alarm data.
Personally, I probably wouldn't do this. At first, I will admit that I shared your view of the various unmalleable enum classes that comprise much of the data in the Alarm Status Table, and I found the complexity of that component to be a little off putting, but the more I work with it, the more impressed I am. The tool is quite comprehensive, and I can tell that a lot of high quality reasoning went into its design. It's actually quite a bit more flexible than it at first seems.
However, if you want to go down the road of creating your own, I don't believe it would be that difficult to create a generic version that's more approachable from the perspective of customization.
You can use system.alarm.queryStatus([...]) to pull the alarm information into a datset, and from there, you could manipulate the data in anyway you wanted prior to putting it into a table. Example:
If you want to add acknowledgement and shelving capabilities or even create the ability for clients to add acknowledgement notes, you could probably embed the table into a container or a popup holder panel and add a couple of buttons for this purpose. Much of the source code that would be needed for this could be adapted from the example I posted here: