Синхронизация папок Exchange EWS только при обнаружении программных изменений - PullRequest
3 голосов
/ 15 ноября 2011

Используя этот код, я создаю подтверждение концепции синхронизации календаря outlook, управляемого My Exchange (2007 SP1), с возможностью синхронизации с другими системами календаря через Управляемый API Exchange EWS .

    static void SyncAppointments()
    {
        ChangeCollection<ItemChange> changeCollection = service.SyncFolderItems(new FolderId(WellKnownFolderName.Calendar), PropertySet.FirstClassProperties, null, 512, SyncFolderItemsScope.NormalItems, syncState);

        Console.WriteLine("\n\n");
        Console.WriteLine("Changes");
        Console.WriteLine("============================\n");

        if (changeCollection.Count > 0) {
            foreach (ItemChange item in changeCollection)
            {
                Console.WriteLine("ChangeType: " + item.ChangeType.ToString());
                Console.WriteLine("ItemId: " + item.ItemId.UniqueId);
                Console.WriteLine("Subject: " + item.Item.Subject);
                Console.WriteLine("===========\n");
            }
        }
        else {
            Console.WriteLine("No changes to Sync.\n");
        }

        syncState = changeCollection.SyncState;
    }

Это прекрасно работает для большей части , я получаю первый набор изменений по умолчанию (все элементы), а затем я получаю No changes to Sync. ... теперь, когда я создаюназначение через EWS, а затем запустить операцию синхронизации Я получаю ожидаемый результат .Появляется элемент изменения, отражающий создание встречи (и он появляется в Outlook).

Changes
============================

ChangeType: Create
ItemId: AAMkADRjYjE1NTVlLTk5ODktNGJiYS1hMTdjLTU2MzE5OGU5ZWNlOABGAAAAAADPxihYdsIG
TqRV5hKVbnQhBwASbprVW92zQZkfrIZIxiR2AEg2AOQDAAASbprVW92zQZkfrIZIxiR2AEg2KWYFAAA=

Subject: New Appointment
===========

Теперь, если я добавляю / отменяю встречи через Outlook, операция синхронизации не принимает изменения .

Changes
============================

No changes to Sync.

Почему это?

1 Ответ

2 голосов
/ 16 ноября 2011

Вы проверяете MoreChangesAvailable?Вы можете потерять их между вызовами, если у вас есть много изменений (больше чем maxChangesReturned).

Вы должны выписать syncState, чтобы увидеть, что он содержит.Убедитесь, что он передается должным образом - это, по сути, хэш последней даты и времени синхронизации.

...