/// <summary>
/// Set the value of properties identified by long ID or name in message.
/// </summary>
/// <param name="messageHandle">The specified message handle.</param>
/// <param name="property">The PropertyName of specified property.</param>
/// <param name="value">The value of specified property.</param>
private void SetNamedProperty(uint messageHandle, PropertyNameObject property, byte[] value)
{
#region Call RopGetPropertyIdsFromNames to get property ID.
PropertyName[] propertyNames = new PropertyName[1];
propertyNames[0] = property.PropertyName;
RopGetPropertyIdsFromNamesRequest getPropertyIdsFromNamesRequest = new RopGetPropertyIdsFromNamesRequest()
{
RopId = (byte)RopId.RopGetPropertyIdsFromNames,
LogonId = CommonLogonId,
InputHandleIndex = CommonInputHandleIndex,
Flags = (byte)GetPropertyIdsFromNamesFlags.Create,
PropertyNameCount = (ushort)propertyNames.Length,
PropertyNames = propertyNames,
};
this.ResponseSOHs = this.MSOXCMSGAdapter.DoRopCall(getPropertyIdsFromNamesRequest, messageHandle, ref this.response, ref this.rawData, GetPropertiesFlags.None);
RopGetPropertyIdsFromNamesResponse getPropertyIdsFromNamesResponse = (RopGetPropertyIdsFromNamesResponse)this.response;
Site.Assert.AreEqual<uint>(TestSuiteBase.Success, getPropertyIdsFromNamesResponse.ReturnValue, "Call RopGetPropertyIdsFromNames should success.");
#endregion
#region Set property value.
List<TaggedPropertyValue> taggedPropertyValues = new List<TaggedPropertyValue>();
int valueSize = 0;
PropertyTag propertyTag = new PropertyTag
{
PropertyId = getPropertyIdsFromNamesResponse.PropertyIds[0].ID,
PropertyType = (ushort)property.PropertyType
};
TaggedPropertyValue taggedPropertyValue = new TaggedPropertyValue
{
PropertyTag = propertyTag,
Value = value
};
valueSize += taggedPropertyValue.Size();
taggedPropertyValues.Add(taggedPropertyValue);
RopSetPropertiesRequest rpmSetRequest = new RopSetPropertiesRequest()
{
RopId = (byte)RopId.RopSetProperties,
LogonId = CommonLogonId,
InputHandleIndex = CommonInputHandleIndex,
PropertyValueCount = (ushort)taggedPropertyValues.Count,
PropertyValueSize = (ushort)(valueSize + 2),
PropertyValues = taggedPropertyValues.ToArray()
};
this.ResponseSOHs = this.MSOXCMSGAdapter.DoRopCall(rpmSetRequest, messageHandle, ref this.response, ref this.rawData, GetPropertiesFlags.None);
RopSetPropertiesResponse rpmSetResponse = (RopSetPropertiesResponse)this.response;
Site.Assert.AreEqual<uint>(TestSuiteBase.Success, rpmSetResponse.PropertyProblemCount, "If ROP succeeds, the PropertyProblemCount of its response is 0(success).");
#endregion
}