//====================================================================== // BrowseNext /// <summary> /// Continues a browse operation with previously specified search criteria. /// </summary> /// <param name="position">An object containing the browse operation state information.</param> /// <returns>The set of elements found.</returns> public BrowseElement[] BrowseNext(ref Opc.Da.BrowsePosition position) { if (position == null) { throw new ArgumentNullException("position"); } if (m_proxy == null) { throw new NotConnectedException(); } lock (this) { BrowsePosition pos = (BrowsePosition)position; if (pos.ContinuationPoint == null || pos.ContinuationPoint == "") { throw new BrowseCannotContinueException(); } OpcXml.Da10.BrowseElement[] elements = null; OpcXml.Da10.OPCError[] errors = null; OpcXml.Da10.ReplyBase reply = m_proxy.Browse( OpcXml.Da10.Request.GetPropertyNames(pos.Filters.PropertyIDs), pos.Locale, "", (pos.ItemID != null)?pos.ItemID.ItemPath:null, (pos.ItemID != null)?pos.ItemID.ItemName:null, ref pos.ContinuationPoint, pos.Filters.MaxElementsReturned, OpcXml.Da10.Request.GetBrowseFilter(pos.Filters.BrowseFilter), pos.Filters.ElementNameFilter, pos.Filters.VendorFilter, pos.Filters.ReturnAllProperties, pos.Filters.ReturnPropertyValues, pos.ReturnErrorText, out elements, out errors, out pos.MoreElements); CacheResponse(pos.Locale, reply, errors); position = null; if (pos.MoreElements || (pos.ContinuationPoint != null && pos.ContinuationPoint != "")) { position = pos; } return(OpcXml.Da10.Request.GetBrowseElements(elements)); } }
//====================================================================== // Browse /// <summary> /// Fetches the children of a branch that meet the filter criteria. /// </summary> /// <param name="itemID">The identifier of branch which is the target of the search.</param> /// <param name="filters">The filters to use to limit the set of child elements returned.</param> /// <param name="position">An object used to continue a browse that could not be completed.</param> /// <returns>The set of elements found.</returns> public BrowseElement[] Browse( ItemIdentifier itemID, BrowseFilters filters, out Opc.Da.BrowsePosition position) { position = null; lock (this) { if (m_proxy == null) { throw new NotConnectedException(); } // use default filters if none specified. if (filters == null) { filters = new BrowseFilters(); } BrowsePosition pos = new BrowsePosition(itemID, filters, m_options.Locale, ((m_options.Filters & (int)ResultFilter.ErrorText) != 0)); OpcXml.Da10.BrowseElement[] elements = null; OpcXml.Da10.OPCError[] errors = null; OpcXml.Da10.ReplyBase reply = m_proxy.Browse( OpcXml.Da10.Request.GetPropertyNames(filters.PropertyIDs), pos.Locale, "", (itemID != null)?itemID.ItemPath:null, (itemID != null)?itemID.ItemName:null, ref pos.ContinuationPoint, filters.MaxElementsReturned, OpcXml.Da10.Request.GetBrowseFilter(filters.BrowseFilter), filters.ElementNameFilter, filters.VendorFilter, filters.ReturnAllProperties, filters.ReturnPropertyValues, pos.ReturnErrorText, out elements, out errors, out pos.MoreElements); CacheResponse(pos.Locale, reply, errors); if (pos.MoreElements || (pos.ContinuationPoint != null && pos.ContinuationPoint != "")) { position = pos; } return(OpcXml.Da10.Request.GetBrowseElements(elements)); } }