private List<HdaAggregate> GetAggregateFunctions(Session session, NodeId objectId)
{
Browser browser = new Browser(session);
browser.BrowseDirection = BrowseDirection.Forward;
browser.ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HierarchicalReferences;
browser.IncludeSubtypes = true;
browser.NodeClassMask = (int)NodeClass.Object;
browser.ResultMask = (uint)(BrowseResultMask.DisplayName | BrowseResultMask.BrowseName | BrowseResultMask.TypeDefinition);
browser.ContinueUntilDone = true;
ReferenceDescriptionCollection references = browser.Browse(objectId);
List<HdaAggregate> aggregates = new List<HdaAggregate>();
for (int ii = 0; ii < references.Count; ii++)
{
ReferenceDescription reference = references[ii];
if (reference.TypeDefinition != Opc.Ua.ObjectTypeIds.AggregateFunctionType)
{
continue;
}
HdaAggregate aggregate = new HdaAggregate();
NodeId remoteId = (NodeId)reference.NodeId;
aggregate.RemoteId = remoteId;
aggregate.LocalId = ComUtils.GetHdaAggregateId(remoteId);
aggregate.Name = reference.ToString();
aggregate.Description = null;
// check for previously mapped ids.
if (aggregate.LocalId == 0)
{
aggregate.LocalId = m_mapper.GetLocalIntegerIdMapping(Opc.Ua.BrowseNames.AggregateFunctions, remoteId);
}
aggregates.Add(aggregate);
}
return aggregates;
}