SAP. UpdateItem. De ce nu se schimbă ChangeKey? (Programare, Office365, Server De Schimb, Exchangewebservices)

Andrey Chernukha a intrebat.

În EWS ItemId tag-ul are ChangeKey atribut. Iată ce spune documentația Exchange despre acest atribut:

Când lucrați cu elemente în Exchange, o altă valoare de care trebuie să țineți cont este atributul ChangeKey. Această valoare, în plus față de ID-ul elementului, este utilizată pentru a ține evidența stării unui element. De fiecare dată când un element este modificat, se generează o nouă cheie de modificare.

Așadar, în aplicația mea efectuez următoarele operațiuni UpdateItem operațiune. Acesta este XML-ul pe care îl trimit către server:

<?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>

Vă rugăm să rețineți că ChangeKey este CQAAAA==. Și acesta este răspunsul pe care îl primesc:

<?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_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>

După cum puteți vedea, cheia de modificare returnată este încă CQAAAA==. De ce nu s-a schimbat?

1 răspunsuri
Dmitry Streblechenko

Starea citit/necitit nu face parte, din punct de vedere tehnic, din mesajul în sine; este stocată separat. Acesta este modul în care este implementată starea mesajelor pentru fiecare utilizator în magazinul PF. foldere.

Dacă modificați orice altă proprietate, cheia de modificare se va schimba.

Comentarii

  • Cu toate acestea, atunci când modific starea citit/necitit pentru prima dată după ce un mesaj a fost creat, cheia de modificare se schimbă. Actualizările ulterioare ale statutului citit/necitit sunt cele care lasă cheia de modificare neschimbată. Cum se poate întâmpla acest lucru? –  > Por Andrey Chernukha.
  • Nu știu. Furnizorul de magazine este liber să ajusteze alte proprietăți. Exchange face frecvent acest lucru pentru mesajele nou create. –  > Por Dmitry Streblechenko.