/// <summary> /// Browses for children of the element at the current node. /// </summary> protected void Browse(AddressSpaceDataBase.TagsTableRow itemID, OpcDa::BrowseFilters filters) { try { // begin a browse. OpcDa::BrowsePosition position = null; foreach (var element in m_Dictionary.Browse(itemID, filters, out position)) { AddBrowseElement(element); } // loop until all elements have been fetched. while (position != null) { DialogResult result = MessageBox.Show( "More items meeting search criteria exist. Continue browse?", "Browse Items", MessageBoxButtons.YesNo, MessageBoxIcon.Question ); if (result != DialogResult.Yes) { break; } // fetch next batch of elements, add children. foreach (var element in m_Dictionary.BrowseNext(ref position)) { AddBrowseElement(element); } } } catch (Exception e) { MessageBox.Show(e.Message); } }
/// <summary> /// While implemented adds the browse element to parent collection. /// </summary> /// <param name="element">The element to add.</param> protected abstract void AddBrowseElement(AddressSpaceDataBase.TagsTableRow element);
protected override void AddBrowseElement(AddressSpaceDataBase.TagsTableRow element) { new BrowseElementNode(element, m_Parent); }
/// <summary> /// Saves the specified repository. /// </summary> /// <param name="repository">The repository.</param> /// <param name="parentKey">The parent key.</param> /// <param name="root">if set to <c>true</c> it is root browse element.</param> public override void Save(AddressSpaceDataBase repository, int parentKey, bool root) { m_TableRow = repository.TagsTable.AddRow(this.Tag, parentKey, root); base.Save(repository, m_TableRow.ID, false); }
/// <summary> /// Initializes a new instance of the <see cref="BrowseElementNode"/> class. /// </summary> /// <param name="element">The element to start with.</param> /// <param name="parent">The parent.</param> internal BrowseElementNode(AddressSpaceDataBase.TagsTableRow element, IBrowse parent) : this(element.GetBrowseElement(), parent) { m_TableRow = element; }
private static void ImportTag ( AddressSpaceDataBase.TagsTableRow parentItem, string targetNamespace, UniqueName uniqueName, XmlQualifiedName parentObject, List <NodeDesign> nodes, List <InstanceDesign> parentChildren ) { Opc.Da.BrowseElement pbe = parentItem.GetBrowseElement(); if (pbe.IsItem) { VariableDesign var = new VariableDesign() { SymbolicName = new XmlQualifiedName(uniqueName.GetUniqueName(pbe.Name), targetNamespace), DisplayName = new LocalizedText() { Value = pbe.Name }, DataType = GetBaseDataType(), TypeDefinition = GetBaseDataVariableType(), Description = new LocalizedText() { Value = pbe.ItemName }, AccessLevel = AccessLevel.ReadWrite, AccessLevelSpecified = true, ValueRank = ValueRank.Scalar, ValueRankSpecified = true, WriteAccess = 0 }; parentChildren.Add(var); SortedDictionary <int, Opc.Da.ItemProperty> prprts = new SortedDictionary <int, Opc.Da.ItemProperty>(); foreach (Opc.Da.ItemProperty item in pbe.Properties) { prprts.Add(item.ID.Code, item); } if (prprts.ContainsKey(Opc.Da.Property.DATATYPE.Code)) { GetDATATYPE(var, prprts[Opc.Da.Property.DATATYPE.Code]); } GetEUTYPE(var, prprts); if (prprts.ContainsKey(Opc.Da.Property.ACCESSRIGHTS.Code)) { GetACCESSRIGHTS(var, prprts[Opc.Da.Property.ACCESSRIGHTS.Code]); } } else { ObjectDesign sf = CreateFolder(new XmlQualifiedName(uniqueName.GetUniqueName(pbe.Name), targetNamespace), pbe.ItemName, pbe.Name); nodes.Add(sf); List <InstanceDesign> myChildren = new List <InstanceDesign>(); foreach (AddressSpaceDataBase.TagsTableRow item in parentItem.GetTagsTableRows()) { ImportTag(item, targetNamespace, uniqueName, sf.SymbolicName, nodes, myChildren); } sf.Children = new ListOfChildren() { Items = myChildren.ToArray() }; sf.References = new Reference[] { new Reference() { IsInverse = true, ReferenceType = CreateXmlQualifiedName(Opc.Ua.BrowseNames.Organizes), TargetId = parentObject } }; } }