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); } }
/// <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); } }