/// <summary> /// Возвращает список событий как виртуальных так и реальных. /// </summary> /// <param name="filterColl">The filter coll.</param> /// <param name="request">The request.</param> /// <returns></returns> private static IEnumerable <CalendarEventEntity> ListEvents(FilterElementCollection filterColl, CalendarEventListRequest request) { McEvent mcEvent = null; //Конструируем стандартный запрос LIST без критериев содержащих дату начала и конца события ListRequest moListRequest = (ListRequest)EventHelper.ConstructRequest <ListRequest>(request.Target, true); moListRequest.Filters = filterColl.ToArray(); moListRequest.Sorting = request.Sorting; //выполняем стандартный запрос ListResponse listResp = (ListResponse)BusinessManager.Execute(moListRequest); if (listResp != null && listResp.EntityObjects != null) { //Пробегаем по реальным events foreach (CalendarEventEntity entity in listResp.EntityObjects) { mcEvent = EventHelper.LoadCalEvent(entity.PrimaryKeyId.Value); if (mcEvent.IsReccuring) { iCalDateTime dtReccurBase = mcEvent.DTStart; //Пробегаем по виртуальным events foreach (Occurrence occur in mcEvent.GetOccurrences(mcEvent.DTStart, mcEvent.RecurrenceSeriesEndDate)) { //Создаем виртуальные события VirtualEventId vEventId = (VirtualEventId)entity.PrimaryKeyId; vEventId.RecurrenceId = EventHelper.iCalDateTime2Recurrence(dtReccurBase, occur.Period.StartTime); //Set virtual id mcEvent.UID = vEventId.ToString(); //Set recurrence-ID mcEvent.Recurrence_ID = occur.Period.StartTime; mcEvent.DTStart = occur.Period.StartTime; mcEvent.DTEnd = occur.Period.EndTime; EntityObjectHierarchy recurrenceEntity = EventHelper.ConstructEntityHierarchy(mcEvent); CalendarEventEntity occurEventEntity = recurrenceEntity.InnerEntity as CalendarEventEntity; if (occurEventEntity != null) { yield return(occurEventEntity); } } } else { yield return(entity); } } } }
public McEventSerializer(McEvent mcEvent) { _event = mcEvent; }