Как получить только повторяющиеся мастера событий с помощью веб-служб Exchange? - PullRequest
16 голосов
/ 21 августа 2010

Я использую представление CalendarItemType для получения элементов календаря.Единственные вещи, которые меня волнуют, - это те, которые я создал, и я знаю, что все они - еженедельные повторяющиеся предметы.Я могу получить каждое отдельное вхождение и из любого повторяющегося главного элемента, но я бы хотел ограничить область поиска только теми элементами, которые соответствовали бы моему шаблону.

Iпытаюсь использовать свойство Restriction в FindItemType, чтобы указать ограничение NotEqualTo с нулевой константой для calenderRecurrenceId.Это вызвало мою просьбу об истечении времени ожидания.До сих пор мне не удалось загрузить рекурсии с помощью FindItemType вообще, и мне нужно использовать последующий вызов GetItemType, когда я нахожу событие, которое происходит в повторяющейся серии.м, начиная с.Код должен работать как с Exchange 2007, так и с Exchange 2010.

    var findItemRequest = new FindItemType();

    findItemRequest.ParentFolderIds = new DistinguishedFolderIdType[]
    {
        new DistinguishedFolderIdType()
    };

    ((DistinguishedFolderIdType)findItemequest.ParentFolderIds[0]).Id = DistinguishedFolderIdNameType.calendar;
    findItemRequest.Traversal = ItemQueryTraversalType.Shallow;

    var itemShapeDefinition = new ItemResponseShapeType(
    {
        BaseShape = DefaultShapeNamesType.AllProperties;
    }

    findItemRequest.Item = calenderView;
    findItemRequest.ItemShape = itemShapeDefinition;

    var findItemResponse = this.esb.FindItem( findItemRequest );

Кроме того, если вы знаете какой-либо хороший источник примеров (помимо тех, что в MSDN), я бы приветствовал их.Я забираю чужой код в чрезвычайной ситуации и пытаюсь изучать веб-службы Exchange на лету.

Ответы [ 4 ]

4 голосов
/ 25 апреля 2011

Может быть, я вас неправильно понимаю, в таком случае я прошу прощения.

Вы НЕ используете CalendarView - вы используете обычный IndexedPageItemView, если все, что вам нужно, это элементы главного повторяющегося календаря.

Вы используете CalendarView, чтобы расширить повторения для отдельных элементов. Однако компромисс с CalendarView не допускает никаких ограничений, кроме начальной и конечной даты. Ни один.

1 голос
/ 11 ноября 2016

Вы можете искать RecurrenceMaster, используя PidLid повторения с ExtendedPropertyDefinition. Это работает, потому что, согласно их документации, «это свойство не должно существовать в элементах календаря одного экземпляра».

https://msdn.microsoft.com/en-us/library/cc842017.aspx

// https://msdn.microsoft.com/en-us/library/cc842017.aspx
ExtendedPropertyDefinition apptType = new ExtendedPropertyDefinition(
    DefaultExtendedPropertySet.Appointment,
    0x00008216, //PidLidAppointmentRecur
    MapiPropertyType.Binary);

var restriction = new SearchFilter.Exists(apptType);
var iView = new ItemView(10);
var found = folder.FindItems(restriction, iView);

Я только что подтвердил, что сегодня это работает, когда я возвращаюсь к старому коду, который работает с Office365 EWS в облаке.

0 голосов
/ 11 октября 2013

Найдено только то, что вам нужно, это свойство RecurrenceStart.Поскольку EWS имеет ограничения, невозможно использовать все свойства в ограничении.Этот работает, как и ожидалось.

Ссылка: Поиск основных повторяющихся встреч

0 голосов
/ 18 сентября 2012

Вы можете создавать собственные поисковые фильтры. Если вы выполняете поиск по определенной начальной дате ИЛИ свойству isRecurring, у вас есть самый простой способ ... (SearchItems возвращает повторяющиеся мастера)

List<SearchFilter> searchFilterCollection = new List<SearchFilter>();

        SearchFilter.IsGreaterThanOrEqualTo startDatumFilter = new SearchFilter.IsGreaterThanOrEqualTo(AppointmentSchema.Start, new DateTime(2012, 9, 16));
        SearchFilter.IsEqualTo masterRecurringFilter = new SearchFilter.IsEqualTo(AppointmentSchema.IsRecurring, true);

        searchFilterCollection.Add(startDatumFilter);
        searchFilterCollection.Add(masterRecurringFilter);

        SearchFilter finalFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection);

        ItemView itemView = new ItemView(100000);
        itemView.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.AppointmentType);

        FindItemsResults<Item> items = _service.FindItems(WellKnownFolderName.Calendar, finalFilter, itemView);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...