Пример #1
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);
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Возвращает список CalendarEventResourceEtity в которых есть ресурс c заданным principalId
        /// </summary>
        /// <param name="principalId">The principal id.</param>
        /// <returns></returns>
        private static List <CalendarEventResourceEntity> GetListCalendarResourceByPrincipalId(int principalId)
        {
            List <CalendarEventResourceEntity> retVal = new List <CalendarEventResourceEntity>();
            //Конструируем стандартный запрос LIST для ресурсов
            ListRequest moListRequest = (ListRequest)EventHelper.ConstructRequest <ListRequest>(new CalendarEventResourceEntity(), true);

            moListRequest.Filters = new FilterElement[] { new FilterElement(CalendarEventResourceEntity.FieldPrincipalId,
                                                                            FilterElementType.Equal, principalId) };
            //выполняем стандартный запрос
            ListResponse listResp = (ListResponse)BusinessManager.Execute(moListRequest);

            if (listResp != null && listResp.EntityObjects != null)
            {
                retVal.AddRange(Array.ConvertAll <EntityObject, CalendarEventResourceEntity>(listResp.EntityObjects,
                                                                                             delegate(EntityObject entity) { return(entity as CalendarEventResourceEntity); }));
            }

            return(retVal);
        }
Пример #3
0
        /// <summary>
        /// Updates the resources.
        /// </summary>
        /// <param name="request">The request.</param>
        public static void UpdateResources(CalendarEventUpdateResourcesRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            ListRequest  listRequest  = null;
            ListResponse listResponse = null;
            //Get the event primary key from target
            PrimaryKeyId eventId = request.Target.PrimaryKeyId.Value;
            //Возможные новые pk
            Dictionary <PrimaryKeyId, PrimaryKeyId> primaryKeyMap = null;

            List <ResourceActionWrapper> resourceActions = new List <ResourceActionWrapper>();

            //Determine update or create actions
            foreach (EntityObject entityObject in request.EntityObjects)
            {
                if (entityObject.MetaClassName == CalendarEventResourceEntity.ClassName)
                {
                    //Assign eventId properties
                    entityObject[CalendarEventResourceEntity.FieldEventId] = eventId;

                    listRequest         = (ListRequest)EventHelper.ConstructRequest <ListRequest>(entityObject, false);
                    listRequest.Filters = ConstructFilterByEntity(entityObject);
                    listResponse        = (ListResponse)BusinessManager.Execute(listRequest);
                    //BusinessManager.List(entityObject.MetaClassName, ConstructFilterByEntity(entityObject));
                    if (listResponse.EntityObjects.Length != 0)
                    {
                        //Update disable
                        //foreach (EntityObject existEntity in listResponse.EntityObjects)
                        //{
                        //    entityObject.PrimaryKeyId = existEntity.PrimaryKeyId;
                        //    resourceActions.Add(new ResourceActionWrapper(entityObject, new UpdateRequest()));
                        //}
                    }
                    else
                    {
                        resourceActions.Add(new ResourceActionWrapper(entityObject, new CreateRequest()));
                    }
                }
            }
            //Determine delete action
            listRequest         = (ListRequest)EventHelper.ConstructRequest <ListRequest>(new CalendarEventResourceEntity(), false);
            listRequest.Filters = new FilterElement[] { new FilterElement(CalendarEventResourceEntity.FieldEventId, FilterElementType.Equal, eventId) };
            listResponse        = (ListResponse)BusinessManager.Execute(listRequest);
            foreach (CalendarEventResourceEntity resourceEntity in listResponse.EntityObjects)
            {
                EntityComparer entityComp = new EntityComparer(resourceEntity, CalendarEventResourceEntity.ComparedProperties);
                if (Array.Find <EntityObject>(request.EntityObjects, entityComp.CompareEntity) == null)
                {
                    resourceActions.Add(new ResourceActionWrapper(resourceEntity, new DeleteRequest()));
                }
            }
            //Пытаемся разбить event на exception
            if (resourceActions.Count != 0)
            {
                bool exceptionCreated;
                primaryKeyMap = EventHelper.PrepareChangeData((VirtualEventId)eventId, out exceptionCreated);
            }
            //Execute action
            foreach (ResourceActionWrapper resourceAction in resourceActions)
            {
                //получаем возможно новый pk event
                eventId = EventHelper.FindDestiantionId(primaryKeyMap, eventId);
                //получаем возможно новый pk resource
                if (resourceAction.ResourceEntity.PrimaryKeyId != null)
                {
                    resourceAction.ResourceEntity.PrimaryKeyId = EventHelper.FindDestiantionId(primaryKeyMap,
                                                                                               resourceAction.ResourceEntity.PrimaryKeyId.Value);
                }
                //записываем возможно изменившийся pk event-a
                resourceAction.ResourceEntity[CalendarEventResourceEntity.FieldEventId] = eventId;
                //вызываем запросы на модификацию
                BusinessManager.Execute(resourceAction.ResourceActionRequest);
            }
        }