Buscar EWS con CalendarItems última hora de modificación
-
21-09-2019 - |
Pregunta
Estoy buscando CalendarItems
con servicios web de Exchange. En la documentación en MSDN hay un campo denominado LastModifiedTime
.
¿Cómo se consulta CalendarItems
por LastModifiedTime
con el Servidor de enlaces Intercambio?
Solución
He encontrado una manera con el uso de restictions
(pero de la búsqueda Si findItemRequest objeto de findItemRequest.Item propiedades findItemRequest.Restictions se definen Da error combinación ...)
Si tan solo artículo o restictions se define para el objeto findItemRequest funciona
List<CalendarInfo> calendarEvents = new List<CalendarInfo>();
ExchangeServiceBinding esb = EWS.Helper.ExchangeHelper.GetExchangeBinding(credentials);
// Form the FindItem request.
FindItemType findItemRequest = new FindItemType();
CalendarViewType calendarView = new CalendarViewType();
calendarView.StartDate = criteria.StartDateAndTime;
calendarView.EndDate = criteria.EndDateAndTime;
if (criteria.MaxItemsToReturn > 0)
{
calendarView.MaxEntriesReturned = criteria.MaxItemsToReturn;
calendarView.MaxEntriesReturnedSpecified = true;
}
findItemRequest.Item = calendarView;
//--
PathToExtendedFieldType sySyncProp = new PathToExtendedFieldType();
sySyncProp.PropertyTag = "0x3008";
sySyncProp.PropertyType = MapiPropertyTypeType.SystemTime;
// Define restrictions
RestrictionType ffRestriction = new RestrictionType();
IsGreaterThanOrEqualToType ieGreater = new IsGreaterThanOrEqualToType();
ieGreater.FieldURIOrConstant = new FieldURIOrConstantType();
ieGreater.FieldURIOrConstant.Item = new ConstantValueType();
(ieGreater.FieldURIOrConstant.Item as ConstantValueType).Value = DateTime.Now.AddDays(-1).ToUniversalTime().ToString("u");
ieGreater.Item = sySyncProp;
ffRestriction.Item = ieGreater;
findItemRequest.Restriction = ffRestriction;
//--
// Define which item properties are returned in the response.
ItemResponseShapeType itemProperties = new ItemResponseShapeType();
// Use the Default shape for the response.
itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;
//insert last modified time value also to responses
PathToExtendedFieldType[] ptufta = new PathToExtendedFieldType[1];
ptufta[0] = new PathToExtendedFieldType();
ptufta[0].PropertyTag = "0x3008"; //Property Tag for LastModifiedTime
ptufta[0].PropertyType = MapiPropertyTypeType.SystemTime;
itemProperties.AdditionalProperties = ptufta;
findItemRequest.ItemShape = itemProperties;
DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
folderIDArray[0] = new DistinguishedFolderIdType();
folderIDArray[0].Id = DistinguishedFolderIdNameType.calendar;
if (!string.IsNullOrEmpty(criteria.EmailAddress))
{
folderIDArray[0].Mailbox = new EmailAddressType();
folderIDArray[0].Mailbox.EmailAddress = criteria.EmailAddress.Trim();
}
findItemRequest.ParentFolderIds = folderIDArray;
// Define the traversal type.
findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
try
{
// Send the FindItem request and get the response.
FindItemResponseType findItemResponse = esb.FindItem(findItemRequest);
// Access the response message.
ArrayOfResponseMessagesType responseMessages = findItemResponse.ResponseMessages;
ResponseMessageType[] rmta = responseMessages.Items;
int folderNumber = 0;
foreach (ResponseMessageType rmt in rmta)
{
// One FindItemResponseMessageType per folder searched.
FindItemResponseMessageType firmt = rmt as FindItemResponseMessageType;
if (firmt.RootFolder == null)
continue;
FindItemParentType fipt = firmt.RootFolder;
object obj = fipt.Item;
// FindItem contains an array of items.
if (obj is ArrayOfRealItemsType)
{
ArrayOfRealItemsType items = (obj as ArrayOfRealItemsType);
if (items.Items == null)
{
// Console.WriteLine("Folder {0}: No items in folder", folderNumber);
folderNumber++;
}
else
{
CalendarInfo ce;
CalendarItemType cal;
foreach (ItemType it in items.Items)
{
if (it is CalendarItemType)
{
cal = (CalendarItemType)it;
ce = GetCalendarInfo(esb, cal);
calendarEvents.Add(ce);
}
//Console.WriteLine("Folder {0}: Item identifier: {1}", folderNumber, it.ItemId.Id);
}
folderNumber++;
}
}
}
//Console.ReadLine();
}
catch (Exception e)
{
throw;
}
return calendarEvents;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow