Esempio n. 1
0
                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);
                        }
                    }
                }
Esempio n. 2
0
                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));
                    }
                }
Esempio n. 3
0
                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));
                    }
                }