示例#1
0
        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);
            }
        }
示例#2
0
        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;
            }
        }
示例#3
0
        /// <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()));
        }
示例#4
0
        /// <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);
                    }
                }
            }
        }