Re: żIs it possible to create a contact in Exchange 2007 with webdav operations?

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



This refers to the DL your modifying because you need to append to existing
properties you need to get the value of the those properties first so you
need to use either a Finditem of GetItem request eg

FindItemType fiFindItemRequest = new FindItemType();
fiFindItemRequest.Traversal = ItemQueryTraversalType.Shallow;
ItemResponseShapeType ipItemProperties = new ItemResponseShapeType();
ipItemProperties.BaseShape = DefaultShapeNamesType.IdOnly;

ipItemProperties.AdditionalProperties = new BasePathToElementType[2];

PathToExtendedFieldType DLMembers = new PathToExtendedFieldType();
DLMembers.PropertyId = 0x8055;
DLMembers.PropertyIdSpecified = true;
DLMembers.DistinguishedPropertySetId = DistinguishedPropertySetType.Address;
DLMembers.DistinguishedPropertySetIdSpecified = true;
DLMembers.PropertyType = MapiPropertyTypeType.BinaryArray;

PathToExtendedFieldType DLOneoffMembers = new PathToExtendedFieldType();
DLOneoffMembers.PropertyId = 0x8054;
DLOneoffMembers.PropertyIdSpecified = true;
DLOneoffMembers.DistinguishedPropertySetId =
DistinguishedPropertySetType.Address;
DLOneoffMembers.DistinguishedPropertySetIdSpecified = true;
DLOneoffMembers.PropertyType = MapiPropertyTypeType.BinaryArray;

ipItemProperties.AdditionalProperties[0] = DLMembers;
ipItemProperties.AdditionalProperties[1] = DLOneoffMembers;

fiFindItemRequest.ItemShape = ipItemProperties;

DistinguishedFolderIdType[] faFolderIDArray = new
DistinguishedFolderIdType[1];
faFolderIDArray[0] = new DistinguishedFolderIdType();
faFolderIDArray[0].Id = pfParentFolder.Id;
fiFindItemRequest.ParentFolderIds = faFolderIDArray;
//Add Restriction for subject
RestrictionType ffRestriction = new RestrictionType();
IsEqualToType ieToType = new IsEqualToType();
PathToUnindexedFieldType snSubjectName = new PathToUnindexedFieldType();
snSubjectName.FieldURI = UnindexedFieldURIType.itemSubject;

FieldURIOrConstantType ciConstantType = new FieldURIOrConstantType();
ConstantValueType cvConstantValueType = new ConstantValueType();
cvConstantValueType.Value = suSubject;
ciConstantType.Item = cvConstantValueType;
ieToType.Item = snSubjectName;
ieToType.FieldURIOrConstant = ciConstantType;
ffRestriction.Item = ieToType;
fiFindItemRequest.Restriction = ffRestriction;


FindItemResponseType frFindItemResponse = esb.FindItem(fiFindItemRequest);
foreach (FindItemResponseMessageType firmtMessage in
frFindItemResponse.ResponseMessages.Items)
{
if (firmtMessage.RootFolder.TotalItemsInView > 0)
{
foreach (ItemType miMailboxItem in
((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)
{
ItemIdType iiItemId = new ItemIdType();
iiItemId.Id = miMailboxItem.ItemId.Id;
iiItemId.ChangeKey = miMailboxItem.ItemId.ChangeKey;


Cheers
Glen

"shades_80 via WinServerKB.com" <u46887@uwe> wrote in message
news:8c0e6a5ca3b7e@xxxxxx
Glen:

Let me make you more questions, now about the example you gave me, to add
contacts to a distribution list.

In the next code line what does iiItemId represent? How do I declare it or
where do I retrieve it from?
changeType.Item = iiItemId;

In the next code line what does miMailboxItem represent? How do I declare
it
or when do I retrieve it from?

NonEmptyArrayOfPropertyValuesType CurrentMembersVal =
(NonEmptyArrayOfPropertyValuesType)miMailboxItem.
ExtendedProperty[0].Item;


I really appreciate all the help you give to me.

Cheers, Memo.

Glen Scales [MVP] wrote:
If you want to add other contacts you need to use an updateitem operation
and modify the two mutlivalued properties. So that you maintain the
current
membership you need to make sure you retrieve the current vaules and then
append the new items you want to add eg

// Create an object of update item type
UpdateItemType updateItemType = new UpdateItemType();
updateItemType.ConflictResolution =
ConflictResolutionType.AlwaysOverwrite;
updateItemType.MessageDisposition = MessageDispositionType.SaveOnly;
updateItemType.MessageDispositionSpecified = true;
updateItemType.ItemChanges = new ItemChangeType[1];
ItemChangeType changeType = new ItemChangeType();

changeType.Item = iiItemId;
changeType.Updates = new ItemChangeDescriptionType[2];
// Create a set item field to identify the type of update
SetItemFieldType setItemDLMembers = new SetItemFieldType();
SetItemFieldType setItemDLOnOffMembers = new SetItemFieldType();

String oneoffprefix = "00000000812B1FA4BEA310199D6E00DD010F540200000180";
String oneoffpadd = "0000";
String oneoffhex = oneoffprefix +
ConvertToHex(contact.DisplayName.ToString()) + oneoffpadd +
ConvertToHex("SMTP") + oneoffpadd +
ConvertToHex(contact.EmailAddresses[0].Value.ToString()) + oneoffpadd;
Byte[] oneOffarray = HexStringToByteArray(oneoffhex);
String WrappedEntryIDPrefix =
"00000000C091ADD3519DCF11A4A900AA0047FAA4C3";
String ContactEntryID = "0000...."

Byte[] Membersarray = HexStringToByteArray((WrappedEntryIDPrefix +
ContactEntryID));
NonEmptyArrayOfPropertyValuesType MembersVal = new
NonEmptyArrayOfPropertyValuesType();
NonEmptyArrayOfPropertyValuesType CurrentMembersVal =
(NonEmptyArrayOfPropertyValuesType)miMailboxItem.ExtendedProperty[0].Item;
MembersVal.Items = new String[CurrentMembersVal.Items.Length+1];

NonEmptyArrayOfPropertyValuesType CurrentOneOffMembersVal =
(NonEmptyArrayOfPropertyValuesType)miMailboxItem.ExtendedProperty[1].Item;
NonEmptyArrayOfPropertyValuesType OneOffMembersVal = new
NonEmptyArrayOfPropertyValuesType();
OneOffMembersVal.Items = new
String[CurrentOneOffMembersVal.Items.Length+1];
for(int vc=0;vc < CurrentOneOffMembersVal.Items.Length;vc++){
OneOffMembersVal.Items[vc] = CurrentOneOffMembersVal.Items[vc];
MembersVal.Items[vc] = CurrentMembersVal.Items[vc];
}

OneOffMembersVal.Items[CurrentOneOffMembersVal.Items.Length] =
Convert.ToBase64String(oneOffarray);
MembersVal.Items[CurrentMembersVal.Items.Length] =
Convert.ToBase64String(Membersarray);

ExtendedPropertyType DLoneoffExProp = new ExtendedPropertyType();
DLoneoffExProp.ExtendedFieldURI = DLOneoffMembers;
DLoneoffExProp.Item = OneOffMembersVal;

ExtendedPropertyType DLMembersExProp = new ExtendedPropertyType();
DLMembersExProp.ExtendedFieldURI = DLOneoffMembers;
DLMembersExProp.Item = MembersVal;

ItemType DLOneoffMembersItem = new ItemType();
DLOneoffMembersItem.ExtendedProperty = new ExtendedPropertyType[1];
DLOneoffMembersItem.ExtendedProperty[0] = DLoneoffExProp;

ItemType DLMembersItem = new ItemType();
DLMembersItem.ExtendedProperty = new ExtendedPropertyType[1];
DLMembersItem.ExtendedProperty[0] = DLMembersExProp;

setItemDLMembers.Item = DLMembers;
setItemDLOnOffMembers.Item = DLOneoffMembers;

setItemDLMembers.Item1 = DLMembersItem;
setItemDLOnOffMembers.Item1 = DLOneoffMembersItem;

changeType.Updates[0] = setItemDLMembers;
changeType.Updates[1] = setItemDLOnOffMembers;
updateItemType.ItemChanges[0] = changeType;
// Send the update item request and receive the response
UpdateItemResponseType updateItemResponse =
esb.UpdateItem(updateItemType);

Cheers
Glen
By 70,502 time thank to you a goal was gotten, now the new C#
application
is
[quoted text clipped - 157 lines]

Memo.

--
Message posted via WinServerKB.com
http://www.winserverkb.com/Uwe/Forums.aspx/ms-exchange-development/200810/1



.



Relevant Pages