Hi Dojo
A Lifecycle Service Orchestration (LSO) script needs to set alarm templates on certain elements when they are getting booked. These elements are child Dynamic Virtual Elements (DVE). To set the alarm templates, I would need to know the ID's of these child DVE's.
For now, my approach is to cast the Skyline.DataMiner.Net.Messages.Resource object to a Skyline.DataMiner.Net.ResourceManager.Objects.FunctionResource object as this makes the ID of the parent DVE available. But I seem to be stuck here.
SrmResourceConfiguration[] resources = srmBookingConfiguration.GetResources().ToArray();
foreach (var resource in resources)
{
FunctionResource functionResource = resource.Resource as FunctionResource;
Element element = engine.FindElement(functionResource.MainDVEDmaID, functionResource.MainDVEElementID);element.SetAlarmTemplate(alarmTemplateName);
}
What is the best approach to be able to retrieve the element ID's of these child elements?
Thank you in advance!
Kind regards
Thanks to Joey's tip I was able to create the following snippet which will set the alarm template of the selected child DVE:
ExportTable extExportTable = new ExportTable
{
Id = 3000,
NameColumnIdx = 1,
ElementColumnIdx = 2
};Element parentDve = engine.FindElement(functionResource.MainDVEDmaID, functionResource.MainDVEElementID);
object[] dveTable = parentDve.GetColumns(exportTable.Id, new[] { exportTable.NameColumnIdx, exportTable.ElementColumnIdx });Element functionDve = engine.FindElement(functionResource.DmaID, functionResource.ElementID);
//functionDve.ElementName: iControl.EXT.40
string shortName = functionDve.ElementName.Remove(0, functionDve.ElementName.IndexOf('.') + 1).Replace(".", "-");
//shortName: EXT-40
if (dveTable.Any())
{
object[] dveNames = (object[])dveTable[0];
object[] dveIds = (object[])dveTable[1];//dveNames[0]: EXT-40 dveIds[0]: 123/456
Dictionary<string, string> dveIdsByName = new Dictionary<string, string>();
for (int i = 0; i < dveNames.Length; i++)
{
dveIdsByName[Convert.ToString(dveNames[i])] = Convert.ToString(dveIds[i]);
}if (dveIdsByName.TryGetValue(shortName, out string id))
{
string[] childDveId = id.Split('/');
Element childDve = engine.FindElement(Convert.ToInt32(childDveId[0]), Convert.ToInt32(childDveId[1]));
childDve.SetAlarmTemplate(alarmTemplateName);
}
}public class ExportTable
{
public int Id { get; set; }/// <summary>
/// Gets or sets the index of the column which holds the DVE names.
/// </summary>
public int NameColumnIdx { get; set; }/// <summary>
/// Gets or sets the index of the column which holds the DVE ID's.
/// </summary>
public int ElementColumnIdx { get; set; }
}