/// <summary> /// Get folder object specific properties. /// </summary> /// <param name="ropGetPropertiesSpecificRequest">RopGetPropertiesSpecificRequest object</param> /// <param name="insideObjHandle">Server object handle in GetPropertiesSpecific.</param> /// <param name="responseSOHTable">Server objects handles in RopGetPropertiesSpecificResponse.</param> /// <returns>RopGetPropertiesSpecificResponse object.</returns> public RopGetPropertiesSpecificResponse GetFolderObjectSpecificProperties(RopGetPropertiesSpecificRequest ropGetPropertiesSpecificRequest, uint insideObjHandle, ref List <List <uint> > responseSOHTable) { object ropResponse = new object(); this.ExcuteRopCall((ISerializable)ropGetPropertiesSpecificRequest, insideObjHandle, ref ropResponse, ref responseSOHTable, ref this.rawData); RopGetPropertiesSpecificResponse response = (RopGetPropertiesSpecificResponse)ropResponse; if (0x00000000 == response.ReturnValue) { // The getPropertiesSpecificResponse.ReturnValue equals 0 means that this Rop is successful. // So the propertyTags in getPropertiesSpecificRequest is correct this.VerifyGetFolderSpecificProperties(ropGetPropertiesSpecificRequest.PropertyTags); } return(response); }
/// <summary> /// Get the named properties value of specified Message object. /// </summary> /// <param name="longIdProperties">The list of named properties</param> /// <param name="messageHandle">The object handle of specified Message object.</param> /// <returns>Returns named property values of specified Message object.</returns> public Dictionary <PropertyNames, byte[]> GetNamedPropertyValues(List <PropertyNameObject> longIdProperties, uint messageHandle) { object response = null; byte[] rawData = null; #region Call RopGetPropertyIdsFromNames to get property ID. PropertyName[] propertyNames = new PropertyName[longIdProperties.Count]; for (int i = 0; i < longIdProperties.Count; i++) { propertyNames[i] = longIdProperties[i].PropertyName; } RopGetPropertyIdsFromNamesRequest getPropertyIdsFromNamesRequest; RopGetPropertyIdsFromNamesResponse getPropertyIdsFromNamesResponse; getPropertyIdsFromNamesRequest.RopId = (byte)RopId.RopGetPropertyIdsFromNames; getPropertyIdsFromNamesRequest.LogonId = 0x00; getPropertyIdsFromNamesRequest.InputHandleIndex = 0x00; getPropertyIdsFromNamesRequest.Flags = (byte)GetPropertyIdsFromNamesFlags.Create; getPropertyIdsFromNamesRequest.PropertyNameCount = (ushort)propertyNames.Length; getPropertyIdsFromNamesRequest.PropertyNames = propertyNames; this.DoRopCall(getPropertyIdsFromNamesRequest, messageHandle, ref response, ref rawData, GetPropertiesFlags.None); getPropertyIdsFromNamesResponse = (RopGetPropertyIdsFromNamesResponse)response; Site.Assert.AreEqual <uint>(0, getPropertyIdsFromNamesResponse.ReturnValue, "Call RopGetPropertyIdsFromNames should success."); #endregion #region Call RopGetPropertiesSpecific to get the specific properties of specific message object. // Get specific property for created message RopGetPropertiesSpecificRequest getPropertiesSpecificRequest = new RopGetPropertiesSpecificRequest(); RopGetPropertiesSpecificResponse getPropertiesSpecificResponse; getPropertiesSpecificRequest.RopId = (byte)RopId.RopGetPropertiesSpecific; getPropertiesSpecificRequest.LogonId = 0x00; getPropertiesSpecificRequest.InputHandleIndex = 0x00; getPropertiesSpecificRequest.PropertySizeLimit = 0xFFFF; PropertyTag[] tagArray = new PropertyTag[longIdProperties.Count]; for (int j = 0; j < getPropertyIdsFromNamesResponse.PropertyIds.Length; j++) { tagArray[j] = new PropertyTag { PropertyId = getPropertyIdsFromNamesResponse.PropertyIds[j].ID, PropertyType = (ushort)longIdProperties[j].PropertyType }; } getPropertiesSpecificRequest.PropertyTagCount = (ushort)tagArray.Length; getPropertiesSpecificRequest.PropertyTags = tagArray; this.DoRopCall(getPropertiesSpecificRequest, messageHandle, ref response, ref rawData, GetPropertiesFlags.None); getPropertiesSpecificResponse = (RopGetPropertiesSpecificResponse)response; Site.Assert.AreEqual <uint>(0, getPropertiesSpecificResponse.ReturnValue, "Calling RopGetPropertiesSpecific should be successful."); Dictionary <PropertyNames, byte[]> propertyList = new Dictionary <PropertyNames, byte[]>(); PropertyObj propertyObjPidLidCommonStart = null; PropertyObj propertyObjPidLidCommonEnd = null; for (int i = 0; i < getPropertiesSpecificResponse.RowData.PropertyValues.Count; i++) { PropertyObj propertyObj = new PropertyObj { PropertyName = longIdProperties[i].DisplayName, ValueType = longIdProperties[i].PropertyType }; PropertyHelper.GetPropertyObjFromBuffer(propertyObj, getPropertiesSpecificResponse.RowData.PropertyValues[i].Value); // Verify requirements related with named properties PidNameKeywords, PidNameContentBase, PidNameAcceptLanguage and PidNameContentClass. this.VerifyMessageSyntaxDataType(propertyObj); if (propertyObj.PropertyName == PropertyNames.PidLidCommonStart) { propertyObjPidLidCommonStart = propertyObj; } if (propertyObj.PropertyName == PropertyNames.PidLidCommonEnd) { propertyObjPidLidCommonEnd = propertyObj; } propertyList.Add(longIdProperties[i].DisplayName, getPropertiesSpecificResponse.RowData.PropertyValues[i].Value); } // Verify the requirements of PidLidCommonStart and PidLidCommonEnd. if (PropertyHelper.IsPropertyValid(propertyObjPidLidCommonStart) || PropertyHelper.IsPropertyValid(propertyObjPidLidCommonEnd)) { this.VerifyMessageSyntaxPidLidCommonStartAndPidLidCommonEnd(propertyObjPidLidCommonStart, propertyObjPidLidCommonEnd); } #endregion return(propertyList); }