exchange-server exchangewebservices

exchange server - ¿Cómo recupero solo maestros de eventos recurrentes utilizando los servicios web de Exchange?



exchange-server exchangewebservices (4)

Estoy usando una vista CalendarItemType para recuperar elementos del calendario. Los únicos elementos que me interesan son los que he creado y sé que todos son elementos recurrentes semanales. Puedo obtener cada aparición individual y, desde cualquiera de ellos, el elemento maestro recurrente, pero me gustaría limitar el alcance de mi búsqueda a solo aquellos elementos que coincidan con mi patrón.

He intentado usar la propiedad Restricción en el FindItemType para especificar una restricción NotEqualTo con una constante nula para calenderRecurrenceId. Esto provocó que mi solicitud se agotara. Hasta ahora no he podido cargar las recurrencias con el FindItemType en absoluto y necesito usar una llamada GetItemType posterior cuando encuentro un evento que ocurre en una serie recurrente.

Aquí está el código con el que estoy empezando. El código debe funcionar tanto con Exchange 2007 como con 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 );

Además, si conoce alguna buena fuente de ejemplos (más allá de los de MSDN), los agradecería. Recojo el código de otra persona en una emergencia y trato de aprender los servicios web de Exchange sobre la marcha.


La única propiedad que necesita es la propiedad RecurrenceStart. Debido a que EWS tiene limitaciones, no es posible usar todas las propiedades en restricción. Esta trabajando como se esperaba.

Referencia: encontrar citas maestras recurrentes


Puede buscar un RecurrenceMaster usando el PidLid recurrente con una ExtendedPropertyDefinition. Esto funciona porque, según su documentación, "esta propiedad no debe existir en los elementos del calendario de una sola instancia".

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);

Acabo de confirmar que esto funciona, hoy, al revisar un código antiguo que funciona con Office365 EWS en la nube.


Puede crear filtros de búsqueda personalizados. Si realiza una búsqueda desde una fecha de inicio específica O es una propiedad recurrente, tiene la forma más fácil ... (SearchItems devuelve maestros recurrentes)

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);


Tal vez te estoy entendiendo mal, en cuyo caso me disculpo.

NO utiliza el CalendarView, sino que utiliza el IndexedPageItemView normal si todo lo que desea es un elemento del calendario recurrente maestro.

Usas CalendarView para expandir las recurrencias a elementos individuales. Sin embargo, el compromiso con CalendarView es que NO se permiten restricciones además de la fecha de inicio y finalización. Ninguna.