Hi everyone,
I want to create a Public saved Alarm Console filter using a DataMiner Automation script.
Has anyone managed to figure out a way on how to do this?
Also, are there any known pitfalls when pushing filters globally this way?
Hi,
I found the following snippet in our regression tests. Hopefully it can help as a reference.
This method creates a new shared alarm filter using an UpdateAlarmFilterMessage and sends it through SLNet. It demonstrates how to:
- Filter on specific protocols.
- Filter on alarm severities (Critical, Major, Minor, Warning, and Timeout).
- Apply additional filter criteria based on views, custom variables, or operator fields.
- Optionally negate a filter using the
NOToperator. - Create and save the filter as a shared alarm filter.
Hopefully this provides a useful starting point for your implementation.
public void CreateNewFilter(int iDMAid, int[] views, string[] values, int caseSwitch, AlarmFilterCompareType CompType, AlarmFilterField Field, string[] Prot, bool notFilter, Engine engine)
{
UpdateAlarmFilterMessage UAFM = new UpdateAlarmFilterMessage();//AlarmFilterItem on Protocol
AlarmFilterItem AFI1 = new AlarmFilterItemString();
(AFI1 as AlarmFilterItemString).CompareType = AlarmFilterCompareType.Equality;
(AFI1 as AlarmFilterItemString).Field = AlarmFilterField.Protocol;(AFI1 as AlarmFilterItemString).Values = Prot;
//AlarmFilterItem on Alarm Severity
AlarmFilterItem AFI2 = new AlarmFilterItemInt();
(AFI2 as AlarmFilterItemInt).CompareType = AlarmFilterCompareType.Equality;
(AFI2 as AlarmFilterItemInt).Field = AlarmFilterField.SeverityID;
Int32[] Severities = new int[] { 1, 2, 3, 4, 17 }; //Critical, Major, Minor, Warning, Timeout
(AFI2 as AlarmFilterItemInt).Values = Severities;//AlamFilterOperator AND
AlarmFilterItem AFAND = new AlarmFilterItemOperator(AlarmFilterOperator.And);//AlamFilterOperator AND
AlarmFilterItem AFLeftBrac = new AlarmFilterItemOperator(AlarmFilterOperator.LeftBracket);//AlamFilterOperator AND
AlarmFilterItem AFRightBrac = new AlarmFilterItemOperator(AlarmFilterOperator.RightBracket);//AlamFilterOperator AND
AlarmFilterItem AFNot = new AlarmFilterItemOperator(AlarmFilterOperator.Not);//AlarmFilterItem on Custom Variables
AlarmFilterItem AFI3 = new AlarmFilterItemView();
switch (caseSwitch)
{
case 1:
(AFI3 as AlarmFilterItemView).CompareType = CompType;
(AFI3 as AlarmFilterItemView).Field = Field;
(AFI3 as AlarmFilterItemView).Values = values;
(AFI3 as AlarmFilterItemView).ViewIDs = views;
break;
case 2:
(AFI3 as AlarmFilterItemString).CompareType = CompType;
(AFI3 as AlarmFilterItemString).Field = Field;
(AFI3 as AlarmFilterItemString).Values = values;
break;
case 3:
(AFI3 as AlarmFilterItemString).CompareType = CompType;
(AFI3 as AlarmFilterItemString).ExtraFieldInfo = "Element.RT_AlarmFilter_Operators";
(AFI3 as AlarmFilterItemString).Field = Field;
(AFI3 as AlarmFilterItemString).Values = values;
break;
default:
FAIL("No case was selected", "CreateNewFilter method", engine);
break;
}AlarmFilter AF = new AlarmFilter();
AF.AccessType = "shared";
AF.CreatedBy = SCRIPT_NAME;
AF.DataMapper = null;
AF.Description = "";
AlarmFilterItem[] arrAFI;
if (!notFilter)
{
arrAFI = new AlarmFilterItem[5] { AFI1, AFAND, AFI2, AFAND, AFI3 };
}
else
{
arrAFI = new AlarmFilterItem[6] { AFI1, AFAND, AFI2, AFAND, AFNot, AFI3 };
}AF.FilterItems = arrAFI;
AF.Key = "";
AF.ModifiedBy = "Regression Test";
AF.Name = alarmFilter_Name;
AF.UserContext = "SharedUserSettings";
AF.Version = "";UAFM.FilterDefinition = AF;
UAFM.Type = UpdateAlarmFilterMessage.UpdateType.New;
UAFM.OldName = "";
UAFM.OldUserContext = "";
Engine.SLNet.SendSingleResponseMessage(UAFM);
}Regards,
note: This is an internal call and we do not recommend using this, as it is not officially supported and we cannot guarantee that it will still work in the future. As a rule, you should avoid using SLNet calls, as these are subject to change without notice.