예제 #1
0
 /// <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);
     }
 }
예제 #2
0
 /// <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);
예제 #3
0
 protected override void AddBrowseElement(AddressSpaceDataBase.TagsTableRow element)
 {
     new BrowseElementNode(element, m_Parent);
 }
예제 #4
0
 /// <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);
 }
예제 #5
0
 /// <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;
 }
예제 #6
0
 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
           } };
     }
 }