Exchange ItemID отличается от GlobalAppointmentID для Outlook AddIn

У меня проблема в том, что GlobalAppointmentID Outlook Appointement, созданного с помощью Outlook FormRegion, отличается от ItemID при использовании EWS Managed API.

Я создаю надстройку Outlook, которая позволяет пользователям добавлять информацию о клиентах и ​​проектах на собрание. Надстройка также сохраняет идентификатор встречи и данные о встрече в базе данных, и служба будет периодически проверять идентификатор, чтобы обновить данные о встрече.

Итак, вот как я использую AddIn:

Outlook.AppointmentItem appointement = (Outlook.AppointmentItem)this.OutlookItem;

appointement.Save();

string ExchangeID = appointement.GlobalAppointmentID;

Здесь идентификатор GlobalAppointmentID: 040000008200E00074C5B7101A82E0080000000060CADC517255CE01000000000000000010000000847A9CD89052DC49BA28DC8AAFBBB4BA

Но API, управляемый EWS, ожидает что-то вроде:

Связать AppointmentItem из сервиса. Существует возможность решить эту проблему, но только с использованием автоматически сгенерированных прокси, а не через ссылку управляемого API для решения с прокси.

Так есть ли способ либо из поиска в EWS Managed API для GlobalAppointementID, либо из надстройки Outlook получить ItemID?

2 ответа

Решение

Идентификаторы могут быть представлены разными способами. Outlook использует первую форму, EWS - вторую.

Для конвертации используйте метод ConvertID.

Вот примеры вызовов запросов / ответов в необработанном формате SOAP (с этими примерами вы сможете реализовать их с помощью API):
Outlook HexEntryID для обмена EWSID

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:mes="http://schemas.microsoft.com/exchange/services/2006/messages">
   <soapenv:Header>
      <typ:RequestServerVersion Version="Exchange2007_SP1"/>
      <typ:MailboxCulture>en-US</typ:MailboxCulture>
   </soapenv:Header>
   <soapenv:Body>
      <mes:ConvertId DestinationFormat="EwsId">
         <mes:SourceIds>
            <typ:AlternateId Format="HexEntryId" Id="0000000068C940C[snip]63136C3D0000" Mailbox="user@domain.com"/>
         </mes:SourceIds>
      </mes:ConvertId>
   </soapenv:Body>
</soapenv:Envelope>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Header>
      <h:ServerVersionInfo MajorVersion="14" MinorVersion="0" MajorBuildNumber="722" MinorBuildNumber="0" Version="Exchange2010" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
   </s:Header>
   <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <m:ConvertIdResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
         <m:ResponseMessages>
            <m:ConvertIdResponseMessage ResponseClass="Success">
               <m:ResponseCode>NoError</m:ResponseCode>
               <m:AlternateId xsi:type="t:AlternateIdType" Format="EwsId" Id="AQMkADkyZTQxNjUzL[snip]YxNsPQAAAA==" Mailbox="user@domain.com"/>
            </m:ConvertIdResponseMessage>
         </m:ResponseMessages>
      </m:ConvertIdResponse>
   </s:Body>
</s:Envelope>

Обмен EWSID на Outlook HexEntryID:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:mes="http://schemas.microsoft.com/exchange/services/2006/messages">
   <soapenv:Header>
      <typ:RequestServerVersion Version="Exchange2007_SP1"/>
   </soapenv:Header>
   <soapenv:Body>
      <mes:ConvertId DestinationFormat="HexEntryId">
         <mes:SourceIds>
            <typ:AlternateId Format="EwsId" Id="AQMkADkyZTQxNjUzLTcwZTQtNGRlNS04M2VmLWMxYmIBNWJi[snip]YxNsPQAAAA==" Mailbox="user@domain.com"/>
         </mes:SourceIds>
      </mes:ConvertId>
   </soapenv:Body>
</soapenv:Envelope>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Header>
      <h:ServerVersionInfo MajorVersion="14" MinorVersion="0" MajorBuildNumber="722" MinorBuildNumber="0" Version="Exchange2010" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
   </s:Header>
   <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <m:ConvertIdResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
         <m:ResponseMessages>
            <m:ConvertIdResponseMessage ResponseClass="Success">
               <m:ResponseCode>NoError</m:ResponseCode>
               <m:AlternateId xsi:type="t:AlternateIdType" Format="HexEntryId" Id="0000000068C940[snip]136C3D0000" Mailbox="user@domain.com"/>
            </m:ConvertIdResponseMessage>
         </m:ResponseMessages>
      </m:ConvertIdResponse>
   </s:Body>
</s:Envelope>

Обратите внимание, что есть разница в использовании этих двух типов идентификаторов при использовании повторяющихся встреч и вхождений:
В тех случаях, когда идентификаторы EWS отличаются для каждого отдельного случая, шестнадцатеричный идентификатор записи Outlook одинаков для всех:

Ответ FindItem для повторяющегося события с одним исключением - обратите внимание на разные ItemID:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Header>
      <h:ServerVersionInfo MajorVersion="14" MinorVersion="0" MajorBuildNumber="722" MinorBuildNumber="0" Version="Exchange2010" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
   </s:Header>
   <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <m:FindItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
         <m:ResponseMessages>
            <m:FindItemResponseMessage ResponseClass="Success">
               <m:ResponseCode>NoError</m:ResponseCode>
               <m:RootFolder TotalItemsInView="10" IncludesLastItemInRange="true">
                  <t:Items>
                     <t:CalendarItem>
                        <t:ItemId Id="AAMkADkyZTQxNjUzLTcwZTQtNGRlNS04M2VmLWMxYmJiNWJiNTBlNgFRAAgI0B8WRv2AAEYAAAAAgq3iY5OVdkmtnHS/lxCbwgcAhKYXWHH/akCFAFNVQGZiCgAAAAAAIQAAhKYXWHH/akCFAFNVQGZiCgACKa9YrQAAEA==" ChangeKey="DwAAABYAAACEphdYcf9qQIUAU1VAZmIKAAIpr2i3"/>
                        <t:ItemClass>IPM.Appointment.Occurrence</t:ItemClass>
                        <t:Subject>Recurring appointment with one exception</t:Subject>
                        <t:Sensitivity>Normal</t:Sensitivity>
                        <t:DateTimeCreated>2013-05-22T06:51:26Z</t:DateTimeCreated>
                        <t:LastModifiedTime>2013-05-22T06:52:20Z</t:LastModifiedTime>
                        <t:Start>2013-05-15T10:30:00Z</t:Start>
                        <t:End>2013-05-15T11:00:00Z</t:End>
                        <t:IsRecurring>true</t:IsRecurring>
                        <t:CalendarItemType>Occurrence</t:CalendarItemType>
                     </t:CalendarItem>
                     <t:CalendarItem>
                        <t:ItemId Id="AAMkADkyZTQxNjUzLTcwZTQtNGRlNS04M2VmLWMxYmJiNWJiNTBlNgFRAAgI0B/fcWdAAEYAAAAAgq3iY5OVdkmtnHS/lxCbwgcAhKYXWHH/akCFAFNVQGZiCgAAAAAAIQAAhKYXWHH/akCFAFNVQGZiCgACKa9YrQAAEA==" ChangeKey="DwAAABYAAACEphdYcf9qQIUAU1VAZmIKAAIpr2i3"/>
                        <t:ItemClass>IPM.OLE.CLASS.{00061055-0000-0000-C000-000000000046}</t:ItemClass>
                        <t:Subject>The exception</t:Subject>
                        <t:Sensitivity>Normal</t:Sensitivity>
                        <t:DateTimeCreated>2013-05-22T06:51:58Z</t:DateTimeCreated>
                        <t:LastModifiedTime>2013-05-22T06:52:20Z</t:LastModifiedTime>
                        <t:Start>2013-05-16T12:00:00Z</t:Start>
                        <t:End>2013-05-16T12:30:00Z</t:End>
                        <t:IsRecurring>true</t:IsRecurring>
                        <t:CalendarItemType>Exception</t:CalendarItemType>
                     </t:CalendarItem>
                     [snip]
                     Other occurrences removed
                     [snip]
                  </t:Items>
               </m:RootFolder>
            </m:FindItemResponseMessage>
         </m:ResponseMessages>
      </m:FindItemResponse>
   </s:Body>
</s:Envelope>

Преобразование EWSID в HexEntryID для обоих этих ItemID приводит к

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Header>
      <h:ServerVersionInfo MajorVersion="14" MinorVersion="0" MajorBuildNumber="722" MinorBuildNumber="0" Version="Exchange2010" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
   </s:Header>
   <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <m:ConvertIdResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
         <m:ResponseMessages>
            <m:ConvertIdResponseMessage ResponseClass="Success">
               <m:ResponseCode>NoError</m:ResponseCode>
               <m:AlternateId xsi:type="t:AlternateIdType" Format="HexEntryId" Id="0000000082ADE26393957649AD9C74BF97109BC2070084A6175871FF6A40850053554066620A000000000021000084A6175871FF6A40850053554066620A000229AF58AD0000" Mailbox="user@domain.com"/>
            </m:ConvertIdResponseMessage>
         </m:ResponseMessages>
      </m:ConvertIdResponse>
   </s:Body>
</s:Envelope>

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Header>
      <h:ServerVersionInfo MajorVersion="14" MinorVersion="0" MajorBuildNumber="722" MinorBuildNumber="0" Version="Exchange2010" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
   </s:Header>
   <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <m:ConvertIdResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
         <m:ResponseMessages>
            <m:ConvertIdResponseMessage ResponseClass="Success">
               <m:ResponseCode>NoError</m:ResponseCode>
               <m:AlternateId xsi:type="t:AlternateIdType" Format="HexEntryId" Id="0000000082ADE26393957649AD9C74BF97109BC2070084A6175871FF6A40850053554066620A000000000021000084A6175871FF6A40850053554066620A000229AF58AD0000" Mailbox="user@domain.com"/>
            </m:ConvertIdResponseMessage>
         </m:ResponseMessages>
      </m:ConvertIdResponse>
   </s:Body>
</s:Envelope>

Идентификатор встречи Outlook переносит внешние (iCal) идентификаторы встречи. Вам нужно разобрать его: http://msdn.microsoft.com/en-us/library/ee157690(v=exchg.80).aspx

Другие вопросы по тегам