Hi Dojo,
I have a question, that derives from this thread.
I would like to use the alarm state of a view (respective the highest severity of alarms in all views below that view) as variable in an automation script. Is there a method to retrieve that value from a view? This should then finally used to set a value of a property for this view.
My scripts looks like this and is working well with a fixed value instead of the alarm severity variable and includes some exception handling already.
public class Script
{
public void Run(Engine engine)
{
ViewInfoEventMessage[] allViews = GetViews();
if(allViews == null)
{
engine.ExitFail("No views were found");
}
foreach(ViewInfoEventMessage view in allViews)
{
// do the filtering of views you want to update
if(view.Name.Equals("ABC"))
{
UpdateViewProperty(view,"ABC","12345",engine);
}
}
}
public void UpdateViewProperty(ViewInfoEventMessage view, string propertyName, string propertyValue, Engine engine)
{
SetDataMinerInfoMessage request = new SetDataMinerInfoMessage();
request.bInfo1 = Int32.MaxValue;
request.bInfo2 = Int32.MaxValue;
request.DataMinerID = -1;
request.ElementID = -1;
request.HostingDataMinerID = -1;
request.IInfo1 = Int32.MaxValue;
request.IInfo2 = Int32.MaxValue;
SA sa = new SA();
sa.Sa = new String[] { propertyName, "read-write", propertyValue };
PSA psa = new PSA();
psa.Psa = new SA[] { sa };
request.Psa2 = psa;
request.StrInfo1 = $"view:{view.ID}";
request.What = 62;
SetDataMinerInfoResponseMessage response = engine.SendSLNetSingleResponseMessage(request) as SetDataMinerInfoResponseMessage;
if (response.iRet != 0)
{
engine.GenerateInformation($"Update of property {propertyName} on View {view.Name} was not OK");
}
}
public ViewInfoEventMessage[] GetViews()
{
var getViewsList = new GetInfoMessage
{
DataMinerID = -1,
Type = InfoType.ViewInfo
};
DMSMessage[] dmsma = Engine.SLNet.SendMessage(getViewsList);
if (dmsma == null)
{
return null;
}
return Array.ConvertAll(dmsma, input => (ViewInfoEventMessage)input);
}
}
Could you enlighten me?
Many thanks in advance and best regards
André
Hi André,
The following script should allow you to get the state of the view. You only need to provide the viewID, and then you'll get an information event with the State of the view.
namespace getviewstate_1
{
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using Skyline.DataMiner.Automation;/// <summary>
/// Represents a DataMiner Automation script.
/// </summary>
public class Script
{
/// <summary>
/// The script entry point.
/// </summary>
/// <param name="engine">Link with SLAutomation process.</param>
public void Run(IEngine engine)
{
int iView = 4;
Skyline.DataMiner.Net.Messages.GetViewStateMessage getview = new Skyline.DataMiner.Net.Messages.GetViewStateMessage();
getview.ViewID = iView;
getview.IncludeChildViews = false;Skyline.DataMiner.Net.Messages.GetViewStateResponse mess = (Skyline.DataMiner.Net.Messages.GetViewStateResponse)Engine.SLNet.SendMessage(getview)[0];
engine.GenerateInformation("View Level : " + mess.States[0].Level.ToString());
}
}
}
I took the liberty of putting this script already on the staging system with the name 'GetViewLevel'.
Hope this gives you the information you were looking for.
Kind regards,