Sincronizar elementos mediante EWS en Exchange
Obtenga información sobre cómo usar la API administrada de EWS o EWS para obtener una lista de todos los elementos de una carpeta, o una lista de cambios que se han producido en una carpeta, con el fin de sincronizar el cliente.
EWS en Exchange usa la sincronización de elementos y la sincronización de carpetas para sincronizar el contenido del buzón entre el cliente y el servidor. La sincronización de elementos obtiene la lista inicial de elementos de una carpeta y, a continuación, con el tiempo, obtiene los cambios que se han realizado en esos elementos y obtiene nuevos elementos también.
Tenga en cuenta que antes de poder sincronizar elementos con un cliente, primero debe sincronizar la jerarquía de carpetas. Una vez que la jerarquía de carpetas está en su lugar en el cliente, si realiza la sincronización de elementos mediante la API administrada de EWS, primero obtendrá la lista inicial de elementos en la Bandeja de entrada mediante el método ExchangeService.SyncFolderItems . A continuación, actualice el valor del parámetro cSyncState durante las llamadas posteriores para obtener la lista de elementos modificados en la Bandeja de entrada.
Para realizar la sincronización de elementos mediante EWS, después de sincronizar la jerarquía de carpetas, solicite la lista inicial de elementos en la Bandeja de entrada mediante la operación SyncFolderItems, analice la respuesta y, en algún momento en el futuro, obtenga los cambios en los elementos del buzón y analice la respuesta. Una vez que el cliente recibe la lista de elementos iniciales o modificados, realiza actualizaciones localmente. Cómo y cuándo se recuperan los cambios en el futuro depende del patrón de diseño de sincronización que use la aplicación.
Nota:
No se admite la operación SyncFolderItems para su uso en buzones de grupo de Office 365 o carpetas públicas.
Obtener la lista de todos los elementos o elementos modificados mediante la API administrada de EWS
En el ejemplo de código siguiente se muestra cómo obtener una lista inicial de todos los elementos de la carpeta Bandeja de entrada y, a continuación, obtener una lista de cambios en los elementos de la carpeta Bandeja de entrada que se han producido desde la sincronización anterior. Durante la llamada inicial al método SyncFolderItems , establezca el valor de cSyncState en null. Cuando se complete el método, guarde el valor de cSyncState localmente para usarlo en la siguiente llamada al método SyncFolderItems . Tanto en la llamada inicial como en las llamadas posteriores, los elementos se recuperan en lotes de diez, mediante llamadas sucesivas al método SyncFolderItems , hasta que no permanezcan más cambios.
En este ejemplo se establece el parámetro propertySet en IdOnly para reducir las llamadas a la base de datos de Exchange, que es un procedimiento recomendado de sincronización. En este ejemplo, se supone que el servicio es un enlace de objetos ExchangeService válido y que cSyncState representa el estado de sincronización devuelto por una llamada anterior a SyncFolderItems.
// Track whether there are more items available for download on the server.
bool moreChangesAvailable = false;
do
{
// Get a list of all items in the Inbox by calling SyncFolderHierarchy repeatedly until no more changes are available.
// The folderId parameter must be set to the root folder to synchronize,
// and must be same folder ID as used in previous synchronization calls.
// The propertySet parameter is set to IdOnly to reduce calls to the Exchange database,
// because any additional properties result in additional calls to the Exchange database.
// The ignoredItemIds parameter is set to null, so that no items are ignored.
// The maxChangesReturned parameter is set to return a maximum of 10 items (512 is the maximum).
// The syncScope parameter is set to Normal items, so that associated items will not be returned.
// The syncState parameter is set to cSyncState, which should be null in the initial call,
// and should be set to the sync state returned by the
// previous SyncFolderItems call in subsequent calls.
ChangeCollection<ItemChange> icc = service.SyncFolderItems(new FolderId(WellKnownFolderName.Inbox), PropertySet.IdOnly, null, 10, SyncFolderItemsScope.NormalItems, cSyncState);
// If the count of changes is zero, there are no changes to synchronize.
if (icc.Count == 0)
{
Console.WriteLine("There are no item changes to synchronize.");
}
// Otherwise, write all the changes included in the response
// to the console.
else
{
foreach (ItemChange ic in icc)
{
Console.WriteLine("ChangeType: " + ic.ChangeType.ToString());
Console.WriteLine("ItemId: " + ic.ItemId);
Console.WriteLine("===========");
}
}
// Save the sync state for use in future SyncFolderContent requests.
// The sync state is used by the server to determine what changes to report
// to the client.
string sSyncState = icc.SyncState;
// Determine whether more changes are available on the server.
moreChangesAvailable = icc.MoreChangesAvailable;
}
while (moreChangesAvailable);
El método SyncFolderItems es similar al método FindItems , ya que no puede devolver propiedades como Body o Attachments. Si necesita propiedades que no pueda devolver el método SyncFolderItems , especifique la propiedad IdOnly establecida al llamar a SyncFolderItems y, a continuación, use el método ExchangeService.LoadPropertiesForItems para obtener las propiedades que necesita para los elementos devueltos por el método SyncFolderItems .
Después de recuperar la lista de elementos nuevos o modificados en el servidor, cree o actualice los elementos en el cliente.
Obtener la lista inicial de elementos mediante EWS
En el ejemplo siguiente se muestra la solicitud XML para obtener la lista inicial de elementos de la Bandeja de entrada mediante la operación SyncFolderItems. Esta es también la solicitud XML que la API administrada de EWS envía al recuperar la lista de elementos mediante el método SyncFolderItems. El elemento SyncState de la operación SyncFolderItems no se incluye porque se trata de la sincronización inicial. En este ejemplo se establece el elemento BaseShape en IdOnly para reducir las llamadas a la base de datos de Exchange, que es un procedimiento recomendado de sincronización.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2013" />
</soap:Header>
<soap:Body>
<m:SyncFolderItems>
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
</m:ItemShape>
<m:SyncFolderId>
<t:DistinguishedFolderId Id="inbox" />
</m:SyncFolderId>
<m:MaxChangesReturned>10</m:MaxChangesReturned>
<m:SyncScope>NormalItems</m:SyncScope>
</m:SyncFolderItems>
</soap:Body>
</soap:Envelope>
Obtener la respuesta mediante el método SyncFolderItems
En el ejemplo siguiente se muestra la respuesta XML devuelta por el servidor después de procesar la solicitud de operación SyncFolderItems del cliente. La respuesta inicial incluye Crear elementos para cinco elementos porque todos los elementos se consideran nuevos durante una sincronización inicial. Los valores de algunos atributos y elementos se han acortado para mejorar la legibilidad.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15"
MinorVersion="0"
MajorBuildNumber="785"
MinorBuildNumber="6"
Version="V2_6"
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"/>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:SyncFolderItemsResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:SyncFolderItemsResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:SyncState>H4sIAAA==</m:SyncState>
<m:IncludesLastItemInRange>true</m:IncludesLastItemInRange>
<m:Changes>
<t:Create>
<t:Message>
<t:ItemId Id="q04QAAAA=="
ChangeKey="CQAAABYAAABhFfgM7MNwSYx0VZ0GoBMJAAAATVdC"/>
</t:Message>
</t:Create>
<t:Create>
<t:Message>
<t:ItemId Id="q07AAAAA=="
ChangeKey="CQAAABYAAABhFfgM7MNwSYx0VZ0GoBMJAAAATVdB"/>
</t:Message>
</t:Create>
<t:Create>
<t:Message>
<t:ItemId Id="q1AwAAAA=="
ChangeKey="CQAAABYAAABhFfgM7MNwSYx0VZ0GoBMJAAAATVdA"/>
</t:Message>
</t:Create>
<t:Create>
<t:Message>
<t:ItemId Id="AAMkADBh=="
ChangeKey="CQAAABYAAABhFfgM7MNwSYx0VZ0GoBMJAAAATVc5"/>
</t:Message>
</t:Create>
<t:Create>
<t:Message>
<t:ItemId Id="AAMkADBh=="
ChangeKey="CQAAABYAAABhFfgM7MNwSYx0VZ0GoBMJAAAATVc4"/>
</t:Message>
</t:Create>
</m:Changes>
</m:SyncFolderItemsResponseMessage>
</m:ResponseMessages>
</m:SyncFolderItemsResponse>
</s:Body>
</s:Envelope>
Después de recuperar la lista de elementos nuevos en el servidor, cree los elementos en el cliente.
Obtener los cambios desde la última sincronización mediante EWS
En el ejemplo siguiente se muestra la solicitud XML para obtener la lista de cambios en los elementos de la Bandeja de entrada mediante la operación SyncFolderItems . Esta es también la solicitud XML que la API administrada de EWS envía al recuperar la lista de cambios en la Bandeja de entrada. En este ejemplo se establece el valor del elemento SyncState en el valor devuelto en la respuesta anterior. Y con fines de demostración, en este ejemplo se establece el elemento BaseShape en AllProperties en lugar de IdOnly para mostrar las propiedades adicionales devueltas. Establecer el elemento BaseShape en IdOnly es un procedimiento recomendado de sincronización. El valor de SyncState se ha acortado para mejorar la legibilidad.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2010_SP2" />
</soap:Header>
<soap:Body>
<m:SyncFolderItems>
<m:ItemShape>
<t:BaseShape>AllProperties</t:BaseShape>
</m:ItemShape>
<m:SyncFolderId>
<t:DistinguishedFolderId Id="inbox" />
</m:SyncFolderId>
<m:SyncState>H4sIAAA==</m:SyncState>
<m:MaxChangesReturned>10</m:MaxChangesReturned>
<m:SyncScope>NormalItems</m:SyncScope>
</m:SyncFolderItems>
</soap:Body>
</soap:Envelope>
En el ejemplo siguiente se muestra la respuesta XML devuelta por el servidor después de procesar la solicitud de operación SyncFolderItems del cliente. Esta respuesta indica que se actualizó un elemento, se crearon dos elementos, se cambió la marca de lectura de un elemento y se eliminó un elemento desde la sincronización anterior. Los valores de algunos atributos y elementos se han acortado para mejorar la legibilidad.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="731" MinorBuildNumber="10" Version="V2_3"
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" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:SyncFolderItemsResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:SyncFolderItemsResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:SyncState>H4sIAAAAAAAEAO29B2AcSZY==</m:SyncState>
<m:IncludesLastItemInRange>true</m:IncludesLastItemInRange>
<m:Changes>
<t:Update>
<t:Message>
<t:ItemId Id="q04QAAAA==" ChangeKey="CQAAABYAAADZGACZQpSgSpyNkexYe2b7AAAAird/" />
<t:ParentFolderId Id=" AgENAAAA" ChangeKey="AQAAAA==" />
<t:ItemClass>IPM.Note</t:ItemClass>
<t:Subject>RE: Company Soccer Team</t:Subject>
<t:Sensitivity>Normal</t:Sensitivity>
<t:DateTimeReceived>2013-08-29T15:22:10Z</t:DateTimeReceived>
<t:Size>23110</t:Size>
<t:Importance>Normal</t:Importance>
<t:InReplyTo>&lt;8e084ea1a5b64f97b95fa8a863a5869d@CH1SR01MB001.namsdf01.sdf.contoso.com&gt;</t:InReplyTo>
<t:IsSubmitted>false</t:IsSubmitted>
<t:IsDraft>false</t:IsDraft>
<t:IsFromMe>false</t:IsFromMe>
<t:IsResend>false</t:IsResend>
<t:IsUnmodified>false</t:IsUnmodified>
<t:DateTimeSent>2013-08-29T15:22:10Z</t:DateTimeSent>
<t:DateTimeCreated>2013-08-28T04:07:38Z</t:DateTimeCreated>
<t:DisplayCc />
<t:DisplayTo>All Employees</t:DisplayTo>
<t:HasAttachments>false</t:HasAttachments>
<t:Culture>en-US</t:Culture>
<t:EffectiveRights>
<t:CreateAssociated>false</t:CreateAssociated>
<t:CreateContents>false</t:CreateContents>
<t:CreateHierarchy>false</t:CreateHierarchy>
<t:Delete>true</t:Delete>
<t:Modify>true</t:Modify>
<t:Read>true</t:Read>
<t:ViewPrivateItems>true</t:ViewPrivateItems>
</t:EffectiveRights>
<t:LastModifiedName>Mara Whitley</t:LastModifiedName>
<t:LastModifiedTime>2013-08-28T16:53:35Z</t:LastModifiedTime>
<t:IsAssociated>false</t:IsAssociated>
<t:WebClientReadFormQueryString>?ae=Item&amp;a=Open&amp;t=IPM.Note&amp;id=&amp;exvsurl=1</t:WebClientReadFormQueryString>
<t:ConversationId Id="AAQkADkzNjJjODUzLWZhMDMtNDVkMS05ZDdjLWVmMDlkYjQ1Zjc4MwAQACAi+NTh0F5Eg5YDwpJsXPE=" />
<t:Sender>
<t:Mailbox>
<t:Name>Alfred Welker </t:Name>
<t:EmailAddress>Alfred.Welker@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Mailbox</t:MailboxType>
</t:Mailbox>
</t:Sender>
<t:IsReadReceiptRequested>false</t:IsReadReceiptRequested>
<t:ConversationIndex>AQHM5V/ZICL41OHQXkSDlgPCkmxc8ZYxA3I4gAAP5UeAANHpbIAAEE+0gAABYhSAACGYTIAAA2+vgAAE81qAkhv0Eg==</t:ConversationIndex>
<t:ConversationTopic>Company Soccer Team</t:ConversationTopic>
<t:From>
<t:Mailbox>
<t:Name>Alfred Welker </t:Name>
<t:EmailAddress>Alfred.Welker@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Mailbox</t:MailboxType>
</t:Mailbox>
</t:From>
<t:InternetMessageId>&lt;e5919a09c8fc4d64b6ffd3542e194fc3@BY2SR01MB609.contoso.com&gt;</t:InternetMessageId>
<t:IsRead>true</t:IsRead>
<t:References>namsdf01.sdf.contoso.com&gt;</t:References>
</t:Message>
</t:Update>
<t:Create>
<t:Message>
<t:ItemId Id="AQMkAD+" />
<t:ParentFolderId Id="AQMkA==" ChangeKey="AQAAAA==" />
<t:ItemClass>IPM.Note</t:ItemClass>
<t:Subject>RE: Review Proposal for Contoso</t:Subject>
<t:Sensitivity>Normal</t:Sensitivity>
<t:DateTimeReceived>2013-08-29T16:20:10Z</t:DateTimeReceived>
<t:Size>32515</t:Size>
<t:Importance>Normal</t:Importance>
<t:InReplyTo>&lt;e52a4de6b98d484887e141da094a2ce6@SN2SR01MB006.contoso.com&gt;</t:InReplyTo>
<t:IsSubmitted>false</t:IsSubmitted>
<t:IsDraft>false</t:IsDraft>
<t:IsFromMe>false</t:IsFromMe>
<t:IsResend>false</t:IsResend>
<t:IsUnmodified>false</t:IsUnmodified>
<t:DateTimeSent>2013-08-29T16:20:10Z</t:DateTimeSent>
<t:DateTimeCreated>2013-08-28T04:07:33Z</t:DateTimeCreated>
<t:DisplayCc />
<t:DisplayTo>Legal Team; Executives</t:DisplayTo>
<t:HasAttachments>false</t:HasAttachments>
<t:Culture>en-US</t:Culture>
<t:EffectiveRights>
<t:CreateAssociated>false</t:CreateAssociated>
<t:CreateContents>false</t:CreateContents>
<t:CreateHierarchy>false</t:CreateHierarchy>
<t:Delete>true</t:Delete>
<t:Modify>true</t:Modify>
<t:Read>true</t:Read>
<t:ViewPrivateItems>true</t:ViewPrivateItems>
</t:EffectiveRights>
<t:LastModifiedName>Mara Whitley</t:LastModifiedName>
<t:LastModifiedTime>2013-08-28T04:07:35Z</t:LastModifiedTime>
<t:IsAssociated>false</t:IsAssociated>
<t:WebClientReadFormQueryString>?ae=Item&amp;a=Open&amp;t=IPM.Note&amp;id=&amp;exvsurl=1</t:WebClientReadFormQueryString>
<t:ConversationId Id="AAQkADkzNjJjODUzLWZhMDMtNDVkMS05ZDdjLWVmMDlkYjQ1Zjc4MwAQAIsBEZp25UpElByLLUQFH6Q=" />
<t:Sender>
<t:Mailbox>
<t:Name>Hope Gross</t:Name>
<t:EmailAddress>Hope.Gross@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Mailbox</t:MailboxType>
</t:Mailbox>
</t:Sender>
<t:IsReadReceiptRequested>false</t:IsReadReceiptRequested>
<t:ConversationIndex>AQHM5WBRiwERmnblSkSUHIstRAUfpJYw9fbSgAAAdm2AAAB6koAAAHTDgAADl6+AAAbxCYAABm5PgAACSA+AANx034AAEKGQgAAAfsiAAB7m3IAABG+ngAABPZyAAASUzoAAA2DNgAAAfKE=</t:ConversationIndex>
<t:ConversationTopic>Review Proposal for Contoso</t:ConversationTopic>
<t:From>
<t:Mailbox>
<t:Name>Hope Gross</t:Name>
<t:EmailAddress>Hope.Gross@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Mailbox</t:MailboxType>
</t:Mailbox>
</t:From>
<t:InternetMessageId>&lt;bcdb185495834370a874a1e7ebedbb96@SN2SR01MB005.namsdf01.sdf.contoso.com&gt;</t:InternetMessageId>
<t:IsRead>true</t:IsRead>
<t:References>&lt;2d4d7d…</t:References>
</t:Message>
</t:Create>
<t:Create>
<t:Message>
<t:ItemId Id="Q04AAAAA==" ChangeKey="AAAirbnd" />
<t:ParentFolderId Id="AgENAAAA" ChangeKey="AQAAAA==" />
<t:ItemClass>IPM.Note</t:ItemClass>
<t:Subject>RE: Review Proposal for Contoso</t:Subject>
<t:Sensitivity>Normal</t:Sensitivity>
<t:DateTimeReceived>2013-08-29T15:30:10Z</t:DateTimeReceived>
<t:Size>29518</t:Size>
<t:Importance>Normal</t:Importance>
<t:InReplyTo>&lt;f0db3ead01db4fe087d98022149aa16f@SN2SR01MB001.namsdf01.sdf.contoso.com&gt;</t:InReplyTo>
<t:IsSubmitted>false</t:IsSubmitted>
<t:IsDraft>false</t:IsDraft>
<t:IsFromMe>false</t:IsFromMe>
<t:IsResend>false</t:IsResend>
<t:IsUnmodified>false</t:IsUnmodified>
<t:DateTimeSent>2013-08-29T15:30:10Z</t:DateTimeSent>
<t:DateTimeCreated>2013-08-28T04:07:36Z</t:DateTimeCreated>
<t:DisplayCc />
<t:DisplayTo>Legal Team; Executives</t:DisplayTo>
<t:HasAttachments>false</t:HasAttachments>
<t:Culture>en-US</t:Culture>
<t:EffectiveRights>
<t:CreateAssociated>false</t:CreateAssociated>
<t:CreateContents>false</t:CreateContents>
<t:CreateHierarchy>false</t:CreateHierarchy>
<t:Delete>true</t:Delete>
<t:Modify>true</t:Modify>
<t:Read>true</t:Read>
<t:ViewPrivateItems>true</t:ViewPrivateItems>
</t:EffectiveRights>
<t:LastModifiedName>Mara Whitley</t:LastModifiedName>
<t:LastModifiedTime>2013-08-28T04:07:38Z</t:LastModifiedTime>
<t:IsAssociated>false</t:IsAssociated>
<t:WebClientReadFormQueryString>?ae=Item&amp;a=Open&amp;t=IPM.Note&amp;id=&amp;exvsurl=1</t:WebClientReadFormQueryString>
<t:ConversationId Id="AAQkADkzNjJjODUzLWZhMDMtNDVkMS05ZDdjLWVmMDlkYjQ1Zjc4MwAQAIsBEZp25UpElByLLUQFH6Q=" />
<t:Sender>
<t:Mailbox>
<t:Name>Mack Chaves</t:Name>
<t:EmailAddress>Mack.Chaves@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Mailbox</t:MailboxType>
</t:Mailbox>
</t:Sender>
<t:IsReadReceiptRequested>false</t:IsReadReceiptRequested>
<t:ConversationIndex>AQHM5WBRiwERmnblSkSUHIstRAUfpJYw9fbSgAAAdm2AAAB6koAAAHTDgAADl6+AAAbxCYAABm5PgAACSA+AANx034AAEKGQgAAAfsiAAB7m3IAABG+ngAABPZyAAASUzoAAA2DN</t:ConversationIndex>
<t:ConversationTopic>Review Proposal for Contoso</t:ConversationTopic>
<t:From>
<t:Mailbox>
<t:Name>Mack Chaves</t:Name>
<t:EmailAddress>Mack.Chaves@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Mailbox</t:MailboxType>
</t:Mailbox>
</t:From>
<t:InternetMessageId>&lt;e52a4de6b98d484887e141da094a2ce6@SN2SR01MB006.namsdf01.sdf.contoso.com&gt;</t:InternetMessageId>
<t:IsRead>true</t:IsRead>
<t:References>namsdf01.sdf.contoso.com&gt;</t:References>
</t:Message>
</t:Create>
<t:ReadFlagChange>
<t:ItemId Id=" q07AAAAA==" ChangeKey="CQAAAA==" />
<t:IsRead>true</t:IsRead>
</t:ReadFlagChange>
<t:Delete>
<t:ItemId Id=" q1AwAAAA==" ChangeKey="CQAAAA==" />
</t:Delete>
</m:Changes>
</m:SyncFolderItemsResponseMessage>
</m:ResponseMessages>
</m:SyncFolderItemsResponse>
</s:Body>
</s:Envelope>
La operación SyncFolderItems es similar al método FindItems , ya que no puede devolver elementos como los elementos Body o Attachments . Si necesita propiedades que no pueda devolver la operación SyncFolderItems , establezca el valor del elemento BaseShape en IdOnly al llamar a SyncFolderItems y, a continuación, use la operación GetItem para obtener las propiedades que necesita para los elementos devueltos por la operación SyncFolderItems .
Después de recuperar la lista de elementos modificados en el servidor, actualice los elementos en el cliente.
Actualización del cliente
Si usa la API administrada de EWS, después de obtener la lista de elementos nuevos o modificados, use el método LoadPropertiesForItems para obtener propiedades en los elementos nuevos o modificados, compare las propiedades con los valores locales y actualice los elementos en el cliente.
Si usa EWS, use la operación GetItem para obtener propiedades en los elementos nuevos o modificados y actualizar los elementos en el cliente.