public void AddAggregateFunction(NodeId aggregateId, string aggregateName, bool isHistorical)
{
lock (Lock)
{
FolderState state = new FolderState(null);
state.SymbolicName = aggregateName;
state.ReferenceTypeId = ReferenceTypes.HasComponent;
state.TypeDefinitionId = ObjectTypeIds.AggregateFunctionType;
state.NodeId = aggregateId;
state.BrowseName = new QualifiedName(aggregateName, aggregateId.NamespaceIndex);
state.DisplayName = state.BrowseName.Name;
state.WriteMask = AttributeWriteMask.None;
state.UserWriteMask = AttributeWriteMask.None;
state.EventNotifier = EventNotifiers.None;
NodeState folder = FindPredefinedNode(ObjectIds.Server_ServerCapabilities_AggregateFunctions, typeof(BaseObjectState));
if (folder != null)
{
folder.AddReference(ReferenceTypes.Organizes, false, state.NodeId);
state.AddReference(ReferenceTypes.Organizes, true, folder.NodeId);
}
if (isHistorical)
{
folder = FindPredefinedNode(ObjectIds.HistoryServerCapabilities_AggregateFunctions, typeof(BaseObjectState));
if (folder != null)
{
folder.AddReference(ReferenceTypes.Organizes, false, state.NodeId);
state.AddReference(ReferenceTypes.Organizes, true, folder.NodeId);
}
}
AddPredefinedNode(SystemContext, state);
}
}