} // end GetSubConditionDefinition /// <summary> /// CreateOTSConditionDefinitionData /// </summary> internal OTSConditionDefinitionData CreateOTSConditionDefinitionData() { OTSConditionDefinitionData conditionDefinitionData = new OTSConditionDefinitionData(); conditionDefinitionData.m_definition = OTBFunctions.AllocateOTBString(this.m_definition); Hashtable syncSubconditions = Hashtable.Synchronized(m_subconditions); conditionDefinitionData.m_subConditionCount = (uint) syncSubconditions.Count; if (syncSubconditions.Count > 0) { conditionDefinitionData.m_subConditionDefinitions = OTBFunctions.OTAllocateMemory(syncSubconditions.Count*Marshal.SizeOf(typeof (IntPtr))); conditionDefinitionData.m_subConditionDescriptions = OTBFunctions.OTAllocateMemory(syncSubconditions.Count*Marshal.SizeOf(typeof (IntPtr))); conditionDefinitionData.m_subConditionSeverities = OTBFunctions.OTAllocateMemory(syncSubconditions.Count*Marshal.SizeOf(typeof (uint))); int index = 0; foreach (AeSubConditionDefinition subCondition in syncSubconditions.Values) { IntPtr definitionPointer = OTBFunctions.AllocateOTBString(subCondition.Definition); Marshal.WriteIntPtr( conditionDefinitionData.m_subConditionDefinitions, index*Marshal.SizeOf(typeof (IntPtr)), definitionPointer); IntPtr descriptionPointer = OTBFunctions.AllocateOTBString(subCondition.Description); Marshal.WriteIntPtr( conditionDefinitionData.m_subConditionDescriptions, index*Marshal.SizeOf(typeof (IntPtr)), descriptionPointer); Marshal.WriteInt32(conditionDefinitionData.m_subConditionSeverities, index*Marshal.SizeOf(typeof (uint)), (int) subCondition.Severity); index++; } // end foreach } // end if return conditionDefinitionData; } // end CreateOTSConditionDefinitionData
//- #endregion #region // Public Methods //--------------------------------- /// <summary> /// Browses the Data Access Server`s address space starting from the element`s position in the address space. /// </summary> /// <param name="browseOptions">Specifies the options of the browsing.</param> /// <param name="addressSpaceElements">A list with the element`s children.</param> /// <param name="executionOptions">Specifies the modality of execution for browsing the server's address space.</param> /// <returns>The result of browsing the address space.</returns> /// <include /// file='TBNC.doc.xml' /// path='//class[@name="DaAddressSpaceElement"]/method[@name="Browse"]/doc/*' /// /> public int Browse( DaAddressSpaceElementBrowseOptions browseOptions, out DaAddressSpaceElement[] addressSpaceElements, ExecutionOptions executionOptions) { addressSpaceElements = null; OTCAddressSpaceBrowseOptions OTCBrowseOptions = new OTCAddressSpaceBrowseOptions(); OTCBrowseOptions.m_accessRightsFilter = 0; int res = (int) EnumResultCode.E_FAIL; if (this.Session == null) { Application.Instance.Trace( EnumTraceLevel.ERR, EnumTraceGroup.CLIENT, "DaAddressSpaceElement.Browse", "The Session property of the AddressSpaceElement cannot be null! Set the property to a value before calling Browse!"); return res; } try { OTCExecutionOptions options = new OTCExecutionOptions(); if (executionOptions != null) { options.m_executionType = (byte) executionOptions.ExecutionType; options.m_executionContext = (uint) executionOptions.ExecutionContext; } else { options.m_executionType = (byte) EnumExecutionType.SYNCHRONOUS; options.m_executionContext = 0; } IntPtr pOTCaddressSpaceElements = new IntPtr(); uint addressSpaceElementDataCount = 0; OTCBrowseOptions.m_type = (byte) browseOptions.ElementTypeFilter; OTCBrowseOptions.m_elementNameFilter = Marshal.StringToCoTaskMemUni(browseOptions.ElementNameFilter); OTCBrowseOptions.m_vendorFilter = Marshal.StringToCoTaskMemUni(browseOptions.VendorFilter); OTCBrowseOptions.m_accessRightsFilter = (uint) browseOptions.AccessRightsFilter; OTCBrowseOptions.m_dataTypeFilter = ValueQT.GetVartype(browseOptions.DataTypeFilter); OTCBrowseOptions.m_maxElements = browseOptions.MaxElements; OTCBrowseOptions.m_retrieveItemID = (byte) (browseOptions.RetrieveItemId ? 1 : 0); OTCBrowseOptions.m_retrieveProperties = (byte) (browseOptions.ReturnProperties ? 1 : 0); OTCBrowseOptions.m_retrievePropertyValues = (byte) (browseOptions.ReturnPropertyValues ? 1 : 0); OTCBrowseOptions.m_forceBrowseUp = (byte) (browseOptions.ForceBrowseUp ? 1 : 0); OTCBrowseOptions.m_continuationPoint = OTBFunctions.AllocateOTBString(browseOptions.ContinuationPoint); res = OTBFunctions.OTCBrowseAddressSpace( this.Session.Handle, this.m_objectElementHandle, this.ItemId, this.m_itemPath, ref OTCBrowseOptions, ref addressSpaceElementDataCount, out pOTCaddressSpaceElements, ref options); addressSpaceElements = new DaAddressSpaceElement[addressSpaceElementDataCount]; if (options.m_executionType == (byte) EnumExecutionType.SYNCHRONOUS) { if (ResultCode.SUCCEEDED(res)) { OTCAddressSpaceElementData typeOfAddressSpaceElement = new OTCAddressSpaceElementData(); for (int i = 0; i < addressSpaceElementDataCount; i++) { int structSize = Marshal.SizeOf(typeOfAddressSpaceElement); OTCAddressSpaceElementData myData = (OTCAddressSpaceElementData) Marshal.PtrToStructure(OTBFunctions.GetIntPtrOffset(pOTCaddressSpaceElements, structSize*i), typeof (OTCAddressSpaceElementData)); addressSpaceElements[i] = new DaAddressSpaceElement( (EnumAddressSpaceElementType) myData.m_type, Marshal.PtrToStringUni(myData.m_name), Marshal.PtrToStringUni(myData.m_itemID), Marshal.PtrToStringUni(myData.m_itemPath), myData.m_objectHandle, this.Session); OTBFunctions.OTFreeMemory(myData.m_itemID); OTBFunctions.OTFreeMemory(myData.m_name); OTBFunctions.OTFreeMemory(myData.m_itemPath); } if (pOTCaddressSpaceElements != IntPtr.Zero) { OTBFunctions.OTFreeMemory(pOTCaddressSpaceElements); } browseOptions.ContinuationPoint = Marshal.PtrToStringUni(OTCBrowseOptions.m_continuationPoint); } else { Application.Instance.Trace( EnumTraceLevel.ERR, EnumTraceGroup.CLIENT, "DaAddressSpaceElement.Browse", "Browsing failed! Result: " + res); } } // if executionOptions Synchronous Marshal.FreeCoTaskMem(OTCBrowseOptions.m_elementNameFilter); Marshal.FreeCoTaskMem(OTCBrowseOptions.m_vendorFilter); OTBFunctions.OTFreeMemory(OTCBrowseOptions.m_continuationPoint); } catch (Exception exc) { Application.Instance.Trace( EnumTraceLevel.ERR, EnumTraceGroup.CLIENT, "DaAddressSpaceElement.Browse", exc.ToString()); } return res; }