2010-11-24 2 views
6

Я строю приложение основано на этом сайте http://msdn.microsoft.com/en-us/library/dd633661%28v=EXCHG.80%29.aspxC# создать элемент календаря с EWS, как вернуть результаты?

appointment.Subject = "Status Meeting"; 
appointment.Body = "The purpose of this meeting is to discuss status."; 
appointment.Start = new DateTime(2009, 3, 1, 9, 0, 0); 
appointment.End = appointment.Start.AddHours(2); 
appointment.Location = "Conf Room"; 
appointment.RequiredAttendees.Add("[email protected]"); 
appointment.RequiredAttendees.Add("[email protected]"); 
appointment.OptionalAttendees.Add("[email protected]"); 
appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy); 

, как я могу вернуть результаты XML "... < т: ItemId Id = "AAMkADk =" ChangeKey = "DwAAAB"/> ..." поэтому я могу использовать его позже, чтобы удалить или изменить элемент календаря!?!

Microsoft сделала божественную работу со всей каркасной платформой, но действительно ли они забыли эту мелочь?

Я нашел некоторое (нелогичное для меня) решение http://blogs.msdn.com/b/exchangedev/archive/2010/02/25/determining-the-id-of-a-sent-message-by-using-extended-properties-with-the-ews-managed-api.aspx Должен ли я использовать это для решения проблемы?

веселит

ответ

5

Похоже, что решение, которое вы нашли не возвращает результаты Xml, persay. Решением является добавление уникального идентификатора к электронной почте как ExtendedPropertyDefinition. Затем, после отправки, решение ищет в папке «Отправленные», чтобы найти сохраненную копию отправленного электронного письма, сопоставляя уникальный идентификатор, который был добавлен до отправки электронной почты.

Тогда как написано на блоге,

Ниже запрос XML, который генерируется призывающих FindItems в выше примере кода.

<m:FindItem Traversal="Shallow"> 
    <m:ItemShape> 
     <t:BaseShape>IdOnly</t:BaseShape> 
     <t:AdditionalProperties> 
     <t:FieldURI FieldURI="item:Subject" /> 
     <t:ExtendedFieldURI PropertySetId="20b5c09f-7cad-44c6-bdbf-8fcbeea08544" PropertyName="MyExtendedPropertyName" PropertyType="String" /> 
     </t:AdditionalProperties> 
    </m:ItemShape> 
    <m:IndexedPageItemView MaxEntriesReturned="5" Offset="0" BasePoint="Beginning" /> 
    <m:Restriction> 
     <t:IsEqualTo> 
     <t:ExtendedFieldURI PropertySetId="20b5c09f-7cad-44c6-bdbf-8fcbeea08544" PropertyName="MyExtendedPropertyName" PropertyType="String" /> 
     <t:FieldURIOrConstant> 
      <t:Constant Value="MyExtendedPropertyValue" /> 
     </t:FieldURIOrConstant> 
     </t:IsEqualTo> 
    </m:Restriction> 
    <m:ParentFolderIds> 
     <t:DistinguishedFolderId Id="sentitems" /> 
    </m:ParentFolderIds> 
</m:FindItem> 

Обратите внимание на XML-тег, содержащий уникальный идентификатор.

<t:ExtendedFieldURI PropertySetId="20b5c09f-7cad-44c6-bdbf-8fcbeea08544" PropertyName="MyExtendedPropertyName" PropertyType="String" /> 
+0

спасибо, так что, как я понимаю, некоторые как, так что мне нужно сделать, чтобы получить ItemID и ChangeKey? после того, как я «сохраню» назначение. Сохранить (SendInvitationsMode.SendToAllAndSaveCopy); ? – 2010-11-28 15:59:31

7

я мог пропускать точку, но после сохранения вы можете получить appointment.Id который я считаю, это уникальный идентификатор для этого назначения. Храните его где-нибудь, а потом вы можете получить доступ к встрече снова для редактирования или удаления с:

Appointment appointment = Appointment.Bind(service, new ItemID("saved id value")); 

После этого вы можете изменить значения с теми же свойствами, которые вы использовали, чтобы установить их первоначально и затем вопрос:

appointment.Update(ConflictResolutionMode.AlwaysOverwrite); 

или удалить:

appointment.Delete(DeleteMode.HardDelete); 

у вас нет доступа к XML вообще.

(нотабене Насколько я могу сказать, вы не можете изменить или удалить назначения из общих календарей папок, хотя их можно создать.)

0

Другой способ заключается в загрузке объекта после того, как ваши действия. Но, как сказано ранее, вы можете использовать Appointment.Id.

Смежные вопросы