protected override void List(BusinessContext context) { ListRequest listRequest = context.Request as ListRequest; bool forceBase = listRequest.Parameters.GetValue <bool>(EventHelper.FORCE_BASE_PARAM, false); if (!forceBase) { #region Test area //FilterElementCollection filterCollection = new FilterElementCollection(); //filterCollection.Add(new FilterElement(CalendarEventEntity.FieldStart, // FilterElementType.Greater, new DateTime(2009, 1, 15))); //OrBlockFilterElement orBlock = new OrBlockFilterElement(); //orBlock.ChildElements.Add(new FilterElement(CalendarEventEntity.FieldStart, FilterElementType.Less, new DateTime(2009, 1, 16))); //orBlock.ChildElements.Add(new FilterElement(CalendarEventEntity.FieldStart, FilterElementType.Less, new DateTime(2009, 1, 17))); //filterCollection.Add(orBlock); //CalendarEventListRequest calListRequest = new CalendarEventListRequest(listRequest.Target, filterCollection.ToArray(), // listRequest.Sorting); #endregion CalendarEventListRequest calListRequest = new CalendarEventListRequest(listRequest.Target, listRequest.Filters, listRequest.Sorting); ListResponse response = CalendarEventListMethod.ListEvent(calListRequest); context.SetResponse(response); } else { base.List(context); } }
public void ChangeIBN_Event() { CalendarEventListRequest listRequest = new CalendarEventListRequest(CalendarEventEntity.ClassName, new FilterElement[] { }); ListResponse listResp = (ListResponse)BusinessManager.Execute(listRequest); foreach (CalendarEventEntity eventEntity in listResp.EntityObjects) { eventEntity.PrimaryKeyId = (PrimaryKeyId)(VirtualEventId)eventEntity.PrimaryKeyId; eventEntity.Subject = "ibn subject"; UpdateRequest updateRequest = new UpdateRequest(eventEntity); BusinessManager.Update(eventEntity); break; } }
/// <summary> /// Lists the event. /// </summary> /// <param name="request">The request.</param> /// <remarks> /// - Удаляет FilterElement с source (DTStart, DTEnd)в запросе и формирует на основании их предикат /// позволяющий производить выборку по данным критериям из произвольной коллекции /// /// </remarks> /// <returns></returns> public static ListResponse ListEvent(CalendarEventListRequest request) { List <CalendarEventEntity> retVal = new List <CalendarEventEntity>(); TZID dtStartTZID = String.IsNullOrEmpty(request.DTStartTimeZoneId) ? null : new TZID(request.DTStartTimeZoneId); TZID dtEndTZID = String.IsNullOrEmpty(request.DTEndTimeZoneId) ? null : new TZID(request.DTEndTimeZoneId); //Заполняем FIlterElementCollection элементами исходного массива фильтров FilterElementCollection filterColl = new FilterElementCollection(); foreach (FilterElement filterEl in request.Filters) { filterColl.Add(filterEl); } AndBlockFilterElementPredicate <DateTime> andBlockDTStartFilterPredicate = new AndBlockFilterElementPredicate <DateTime>(); AndBlockFilterElementPredicate <DateTime> andBlockDTEndFilterPredicate = new AndBlockFilterElementPredicate <DateTime>(); ConstructPredicate(andBlockDTStartFilterPredicate, filterColl, CalendarEventEntity.FieldStart); ConstructPredicate(andBlockDTEndFilterPredicate, filterColl, CalendarEventEntity.FieldEnd); //Получаем все FilterElement которые связаны с датой и формируем на основе их дерево выражений foreach (FilterElement filterEl in FindFilterElementBySource(new string[] { CalendarEventEntity.FieldStart, CalendarEventEntity.FieldEnd }, request.Filters, true)) { //Рекурсивно удаляем найденный filterElement из исходного набора DeepRemoveFilter(filterColl, filterEl); } //добавляем дополнительные критерии AddExtraCriteria(filterColl); //Получаем список эвентов retVal.AddRange(ListEvents(filterColl, request)); //Применяем критерии отбора по датам начала и завершения взятые из первоначального запроса, и преобразованные //для отбора из коллекции EntityObjects retVal.RemoveAll(delegate(CalendarEventEntity eventEntity) { return(!andBlockDTStartFilterPredicate.Evaluate(eventEntity.Start)); }); retVal.RemoveAll(delegate(CalendarEventEntity eventEntity) { return(!andBlockDTEndFilterPredicate.Evaluate(eventEntity.End)); }); retVal.Sort(); return(new ListResponse(retVal.ToArray())); }
/// <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); } } } }