EWS. UpdateItem. Почему ChangeKey не меняется? - PullRequest
0 голосов
/ 08 января 2019

В EWS ItemId тег имеет атрибут ChangeKey. Вот что документация Exchange говорит об этом атрибуте:

Когда вы работаете с элементами в Exchange, следует учитывать еще одно значение - атрибут ChangeKey. Это значение, в дополнение к идентификатору элемента, используется для отслеживания состояния элемента. Каждый раз, когда элемент изменяется, генерируется новый ключ изменения.

Итак, в моем приложении я выполняю UpdateItem операцию. Это XML, который я отправляю на сервер:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Header>
  <t:RequestServerVersion Version="Exchange2007_SP1" />
</soap:Header>
<soap:Body>
  <m:UpdateItem xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" MessageDisposition="SaveOnly" ConflictResolution="AlwaysOverwrite" SendMeetingInvitationsOrCancellations="SendToNone">
     <m:ItemChanges>
        <t:ItemChange>
           <t:ItemId Id="AAMkADE3MTJkZWNlLTZiYWYtNDY4Yi1hNmM3LWU2MzY2ZDZjYWNhMQBGAAAAAACoXti5FFu8TJNLLS5k9vC8BwAcJDq8WkSCQ77jdOtyazgnAAAAAAEMAAAcJDq8WkSCQ77jdOtyazgnAACOg4SZAAA=" ChangeKey="`CQAAAA==`" />
           <t:Updates>
              <t:SetItemField>
                 <t:FieldURI FieldURI="message:IsRead" />
                 <t:Message>
                    <t:IsRead>false</t:IsRead>
                 </t:Message>
              </t:SetItemField>
           </t:Updates>
        </t:ItemChange>
     </m:ItemChanges>
  </m:UpdateItem>
 </soap:Body>
</soap:Envelope>

Обратите внимание, что ChangeKey - это CQAAAA==. И вот ответ, который я получаю:

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
 <s:Header>
  <h:ServerVersionInfo xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" MajorVersion="15" MinorVersion="0" MajorBuildNumber="1365" MinorBuildNumber="1" Version="V2_23" />
</s:Header>
<s:Body xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <m:UpdateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
     <m:ResponseMessages>
        <m:UpdateItemResponseMessage ResponseClass="Success">
           <m:ResponseCode>NoError</m:ResponseCode>
           <m:Items>
              <t:Message>
                 <t:ItemId Id="AAMkADE3MTJkZWNlLTZiYWYtNDY4Yi1hNmM3LWU2MzY2ZDZjYWNhMQBGAAAAAACoXti5FFu8TJNLLS5k9vC8BwAcJDq8WkSCQ77jdOtyazgnAAAAAAEMAAAcJDq8WkSCQ77jdOtyazgnAACOg4SZAAA=" ChangeKey="CQAAAA==" />
              </t:Message>
           </m:Items>
           <m:ConflictResults>
              <t:Count>0</t:Count>
           </m:ConflictResults>
        </m:UpdateItemResponseMessage>
      </m:ResponseMessages>
    </m:UpdateItemResponse>
 </s:Body>
</s:Envelope>

Как видите, возвращенный ключ изменения по-прежнему CQAAAA==. Почему это не изменилось?

1 Ответ

0 голосов
/ 08 января 2019

Состояние чтения / непрочитания технически не является частью самого сообщения; он хранится отдельно. Таким образом, статус сообщения для каждого пользователя реализован в хранилище PF. папки.

Если вы измените любое другое свойство, ключ изменения изменится.

...