Example #1
0
        protected void btnSave_ServerClick(object sender, EventArgs e)
        {
            DataTable dt = ((DataTable)ViewState["Resources"]).Copy();

            List <CalendarEventResourceEntity> list = new List <CalendarEventResourceEntity>();

            foreach (DataRow dr in dt.Rows)
            {
                CalendarEventResourceEntity cero = BusinessManager.InitializeEntity <CalendarEventResourceEntity>(CalendarEventResourceEntity.ClassName);
                string[] elem = dr["Id"].ToString().Split(new string[] { "::" }, StringSplitOptions.RemoveEmptyEntries);
                if (elem[1] != "0")
                {
                    MetaClass mcEl = MetaDataWrapper.GetMetaClassByName(elem[1]);
                    if (mcEl.IsCard)
                    {
                        elem[1] = mcEl.CardOwner.Name;
                    }
                }

                if (elem[1] == "0")
                {
                    cero.Email = elem[0];
                }
                else if (elem[1] == Principal.GetAssignedMetaClass().Name)
                {
                    cero.PrincipalId = PrimaryKeyId.Parse(elem[0]);
                }
                else if (elem[1] == ContactEntity.GetAssignedMetaClassName())
                {
                    cero.ContactId = PrimaryKeyId.Parse(elem[0]);
                }
                else if (elem[1] == OrganizationEntity.GetAssignedMetaClassName())
                {
                    cero.OrganizationId = PrimaryKeyId.Parse(elem[0]);
                }

                cero.Name   = dr["Name"].ToString();
                cero.Status = (int)eResourceStatus.NotResponded;
                list.Add(cero);
            }

            CalendarEventEntity ceo = (CalendarEventEntity)BusinessManager.Load(CalendarEventEntity.ClassName, _workObjectId);
            CalendarEventUpdateResourcesRequest req = new CalendarEventUpdateResourcesRequest(ceo, list.ToArray());

            BusinessManager.Execute(req);

            if (Request["CommandName"] != null)
            {
                CommandParameters cp = new CommandParameters(Request["CommandName"]);
                Mediachase.Ibn.Web.UI.WebControls.CommandHandler.RegisterCloseOpenedFrameScript(this.Page, cp.ToString());
            }
            else
            {
                Mediachase.Ibn.Web.UI.WebControls.CommandHandler.RegisterCloseOpenedFrameScript(this.Page, String.Empty);
            }
        }
Example #2
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);
            }
        }