private void Update(UiViewButtonState state) { var viewButtonsByUiView = _set._viewButtonsByUiView; var viewButtonDicById = _set._viewButtonDicById; var oldState = viewButtonDicById[state.Id]; viewButtonDicById[state.Id] = state; foreach (var item in viewButtonsByUiView) { if (item.Value.Contains(oldState)) { item.Value.Remove(oldState); item.Value.Add(state); } } }
private void Handle(IAcSession acSession, IUiViewButtonUpdateIo input, bool isCommand) { var acDomain = _set._acDomain; var viewButtonRepository = acDomain.RetrieveRequiredService <IRepository <UiViewButton> >(); var bkState = acDomain.UiViewSet.GetUiViewButtons().FirstOrDefault(a => a.Id == input.Id); if (bkState == null) { throw new NotExistException(); } if (input.FunctionId.HasValue) { FunctionState function; if (!acDomain.FunctionSet.TryGetFunction(input.FunctionId.Value, out function)) { throw new ValidationException("非法的托管功能标识" + input.FunctionId); } } UiViewButton entity; var stateChanged = false; lock (Locker) { if (acDomain.UiViewSet.GetUiViewButtons().All(a => a.Id != input.Id)) { throw new NotExistException(); } entity = viewButtonRepository.GetByKey(input.Id); if (entity == null) { throw new NotExistException(); } entity.Update(input); var newState = UiViewButtonState.Create(acDomain, entity); stateChanged = newState != bkState; if (stateChanged) { Update(newState); } if (isCommand) { try { viewButtonRepository.Update(entity); viewButtonRepository.Context.Commit(); } catch { if (stateChanged) { Update(bkState); } viewButtonRepository.Context.Rollback(); throw; } } } if (isCommand && stateChanged) { acDomain.MessageDispatcher.DispatchMessage(new UiViewButtonUpdatedEvent(acSession, entity, input, isPrivate: true)); } }
private void Handle(IAcSession acSession, IUiViewButtonCreateIo input, bool isCommand) { var acDomain = _set._acDomain; var viewButtonsByUiView = _set._viewButtonsByUiView; var viewButtonDicById = _set._viewButtonDicById; var viewButtonRepository = acDomain.RetrieveRequiredService <IRepository <UiViewButton> >(); if (!input.Id.HasValue) { throw new ValidationException("标识是必须的"); } UiViewButton entity; lock (Locker) { ButtonState button; if (!acDomain.ButtonSet.TryGetButton(input.ButtonId, out button)) { throw new ValidationException("按钮不存在"); } UiViewState view; if (!acDomain.UiViewSet.TryGetUiView(input.UiViewId, out view)) { throw new ValidationException("界面视图不存在"); } if (input.FunctionId.HasValue) { FunctionState function; if (!acDomain.FunctionSet.TryGetFunction(input.FunctionId.Value, out function)) { throw new ValidationException("托管功能不存在"); } } if (acDomain.UiViewSet.GetUiViewButtons().Any(a => a.Id == input.Id.Value)) { throw new ValidationException("给定标识的界面视图按钮已经存在"); } entity = UiViewButton.Create(input); var state = UiViewButtonState.Create(acDomain, entity); if (!viewButtonsByUiView.ContainsKey(view)) { viewButtonsByUiView.Add(view, new List <UiViewButtonState>()); } if (!viewButtonsByUiView[view].Contains(state)) { viewButtonsByUiView[view].Add(state); } if (!viewButtonDicById.ContainsKey(state.Id)) { viewButtonDicById.Add(state.Id, state); } if (isCommand) { try { viewButtonRepository.Add(entity); viewButtonRepository.Context.Commit(); } catch { if (viewButtonsByUiView.ContainsKey(view)) { if (viewButtonsByUiView[view].Any(a => a.Id == entity.Id)) { var item = viewButtonsByUiView[view].First(a => a.Id == entity.Id); viewButtonsByUiView[view].Remove(item); } } if (viewButtonDicById.ContainsKey(entity.Id)) { viewButtonDicById.Remove(entity.Id); } viewButtonRepository.Context.Rollback(); throw; } } } if (isCommand) { acDomain.MessageDispatcher.DispatchMessage(new UiViewButtonAddedEvent(acSession, entity, input, isPrivate: true)); } }