Ejemplo n.º 1
0
 //根据当前单据对象的状态控制可操作菜单项
 private void controlMenuItem(MB.Util.Model.DocState docState)
 {
     if (_MenuBinding.ContainsKey(GeneralOperateMenus.Approved))
     {
         _MenuBinding[GeneralOperateMenus.Approved].Enabled = docState == MB.Util.Model.DocState.Validated;
     }
     if (_MenuBinding.ContainsKey(GeneralOperateMenus.Completed))
     {
         _MenuBinding[GeneralOperateMenus.Completed].Enabled = docState == MB.Util.Model.DocState.Approved;
     }
     if (_MenuBinding.ContainsKey(GeneralOperateMenus.Withdraw))
     {
         _MenuBinding[GeneralOperateMenus.Withdraw].Enabled = docState == MB.Util.Model.DocState.Approved;
     }
     if (_MenuBinding.ContainsKey(GeneralOperateMenus.Suspended))
     {
         _MenuBinding[GeneralOperateMenus.Suspended].Enabled = docState != MB.Util.Model.DocState.Completed &&
                                                               docState != MB.Util.Model.DocState.Withdraw &&
                                                               docState != MB.Util.Model.DocState.Suspended;
     }
     if (_MenuBinding.ContainsKey(GeneralOperateMenus.CancelSuspended))
     {
         _MenuBinding[GeneralOperateMenus.CancelSuspended].Enabled = docState == MB.Util.Model.DocState.Suspended;
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取实体对象的单据状态。
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public MB.Util.Model.DocState GetEntityDocState(object entity)
        {
            object val2 = MB.Util.MyReflection.Instance.InvokePropertyForGet(entity, ENTITY_DOC_STATE);

            MB.Util.Model.DocState docState = (MB.Util.Model.DocState)Enum.Parse(typeof(MB.Util.Model.DocState), val2.ToString());
            return(docState);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 重新设置实体数据并刷新相应的控制处理。
        /// </summary>
        /// <param name="entityInfo"></param>
        public void ResetDocEntity(object entityInfo)
        {
            bool exists = MB.WinBase.UIDataEditHelper.Instance.CheckExistsDocState(entityInfo);

            if (exists)
            {
                MB.Util.Model.DocState docState = MB.WinBase.UIDataEditHelper.Instance.GetEntityDocState(entityInfo);
                controlMenuItem(docState);

                _CurrentEditEntity = entityInfo;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 根据当前实体的状态控制工具拦的状态。
        /// </summary>
        protected virtual void OnToolsButtonValidate()
        {
            if (!_BindingSource.CheckExistsCurrentItem())
            {
                return;
            }

            object entity = _BindingSource.Current;

            if (entity is DataRow)
            {
                throw new MB.Util.APPException("目前框架的实现还不支持DataRow 的绑定编辑处理。");
            }

            bntMoveFirstItem.Enabled    = !_MainBindingGridView.IsFirstRow; // _BindingSource.Position > 0;
            bntMovePreviousItem.Enabled = !_MainBindingGridView.IsFirstRow; // _BindingSource.Position > 0;
            bntMoveLastItem.Enabled     = !_MainBindingGridView.IsLastRow;  // _BindingSource.Position < _BindingSource.Count - 1;
            bntMoveNextItem.Enabled     = !_MainBindingGridView.IsLastRow;  // _BindingSource.Position < _BindingSource.Count - 1;
            // bntPositionItem.Text = _MainBindingGridView.FocusedRowHandle.ToString();// (_BindingSource.Position + 1).ToString();
            bntPositionItem.Text = string.Format("{0}/{1}", _MainBindingGridView.FocusedRowHandle + 1, _MainBindingGridView.RowCount);

            MB.WinBase.Common.ObjectState objectState = MB.WinBase.UIDataEditHelper.Instance.GetObjectState(entity);
            bntAddNewItem.Enabled       = notRejectCommand(UICommandType.AddNew) && true && this.CurrentEditType != ObjectEditType.OpenReadOnly;
            bntCancelItem.Enabled       = ((objectState == ObjectState.New && _BindingSource.Count > 1) || objectState == ObjectState.Modified);
            bntDeleteItem.Enabled       = notRejectCommand(UICommandType.Delete) && (objectState == ObjectState.Modified || objectState == ObjectState.Unchanged) && _BindingSource.Count > 1 && this.CurrentEditType != ObjectEditType.OpenReadOnly;
            bntSaveItem.Enabled         = notRejectCommand(UICommandType.Save) && (objectState == ObjectState.New || objectState == ObjectState.Modified);
            bntSubmitItem.Enabled       = notRejectCommand(UICommandType.Submit) && (objectState == ObjectState.Unchanged);
            bntCancelSubmitItem.Enabled = notRejectCommand(UICommandType.CancelSubmit) && objectState == ObjectState.Validated;

            //根据实体对象的状态变化设置相应的信息.
            MB.Util.Model.EntityState entityState = MB.WinBase.UIDataEditHelper.Instance.GetEntityState(entity);

            //判断是否存在单据状态属性
            bool exists = MB.WinBase.UIDataEditHelper.Instance.CheckExistsDocState(entity);

            if (exists)
            {
                MB.Util.Model.DocState docState = MB.WinBase.UIDataEditHelper.Instance.GetEntityDocState(entity);
                MB.WinBase.Binding.BindingSourceHelper.Instance.SetCtlReadOnly(_EditColumnCtlBinding, docState != MB.Util.Model.DocState.Progress);

                OnDocStateChanged(_BindingSource.Current, docState);
            }
            else
            {
                bntSubmitItem.Enabled       = false;
                bntCancelSubmitItem.Enabled = false;
            }
            MB.WinBase.Binding.BindingSourceHelper.Instance.SetCtlByAllowEditStates(_EditColumnCtlBinding, entityState);

            //根据模块的需要重新初始化操作菜单项。
            refreshFormatButtonItem();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 对象提交处理。
        /// </summary>
        /// <param name="isSubmit"></param>
        /// <returns></returns>
        protected virtual int ObjectSubmit(bool isSubmit)
        {
            //string[] updateProperty = new string[] { MB.WinBase.UIDataEditHelper.ENTITY_DOC_STATE };
            //object wiseObject = MB.Util.MyReflection.Instance.PropertyMemberwiseClone(_BindingSource.Current);
            //if(isSubmit)
            //    MB.Util.MyReflection.Instance.InvokePropertyForSet(wiseObject, MB.WinBase.UIDataEditHelper.ENTITY_DOC_STATE, MB.Util.Model.DocState.Submit);
            //else
            //    MB.Util.MyReflection.Instance.InvokePropertyForSet(wiseObject, MB.WinBase.UIDataEditHelper.ENTITY_DOC_STATE, MB.Util.Model.DocState.Progress);

            //MB.WinBase.UIDataEditHelper.Instance.SetEntityState(wiseObject, MB.Util.Model.EntityState.Modified);
            //int re = ObjectDataSave(wiseObject, updateProperty);
            //if (re > 0) {
            //    MB.WinBase.Binding.BindingSourceHelper.Instance.SetCtlReadOnly(_EditColumnCtlBinding, isSubmit);
            //    _ClientRuleObject.RaiseAfterDocStateChanged(_BindingSource.Current);

            //}
            object mainEntity = _BindingSource.Current;
            int    re         = _ClientRuleObject.Submit(mainEntity, !isSubmit);

            if (re >= 0)
            {
                //if (isSubmit)
                //    MB.Util.MyReflection.Instance.InvokePropertyForSet(mainEntity, MB.WinBase.UIDataEditHelper.ENTITY_DOC_STATE, MB.Util.Model.DocState.Submit);
                //else
                //    MB.Util.MyReflection.Instance.InvokePropertyForSet(mainEntity, MB.WinBase.UIDataEditHelper.ENTITY_DOC_STATE, MB.Util.Model.DocState.Progress);

                //刷新当前编辑的对象。

                _ClientRuleObject.RefreshEntity((int)_ClientRuleObject.MainDataTypeInDoc, _BindingSource.Current);

                _BindingSource.RaiseListChangedEvents = false;
                MB.WinBase.UIDataEditHelper.Instance.SetEntityState(mainEntity, MB.Util.Model.EntityState.Persistent);
                MB.WinBase.Binding.BindingSourceHelper.Instance.SetCtlReadOnly(_EditColumnCtlBinding, isSubmit);
                _BindingSource.EndEditNoRaiseEvent();
                _BindingSource.RaiseListChangedEvents = true;

                MB.Util.Model.DocState docState = MB.WinBase.UIDataEditHelper.Instance.GetEntityDocState(mainEntity);
                OnDocStateChanged(mainEntity, docState);
                //_ClientRuleObject.RaiseAfterDocStateChanged(mainEntity);
            }

            return(re);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 对象提交处理。
        /// </summary>
        /// <param name="isSubmit"></param>
        /// <returns></returns>
        protected virtual int ObjectSubmit(bool isSubmit)
        {
            object mainEntity = _EditBindingSource.Current;
            int    re         = _ClientRuleObject.Submit(mainEntity, !isSubmit);

            if (re >= 0)
            {
                //刷新当前编辑的对象。
                _ClientRuleObject.RefreshEntity((int)_ClientRuleObject.MainDataTypeInDoc, _EditBindingSource.Current);
                _EditBindingSource.RaiseListChangedEvents = false;
                MB.WinBase.UIDataEditHelper.Instance.SetEntityState(mainEntity, MB.Util.Model.EntityState.Persistent);
                MB.WinBase.Binding.BindingSourceHelper.Instance.SetCtlReadOnly(_EditColumnCtlBinding, isSubmit);
                _EditBindingSource.EndEditNoRaiseEvent();
                _EditBindingSource.RaiseListChangedEvents = true;

                MB.Util.Model.DocState docState = MB.WinBase.UIDataEditHelper.Instance.GetEntityDocState(mainEntity);
                OnDocStateChanged(mainEntity, docState);
            }
            return(re);
        }
Ejemplo n.º 7
0
        private void SetCtrlReadOnly()
        {
            if (MB.Util.General.IsInDesignMode() || _BaseDataBindingEdit.CurrentEditType == ObjectEditType.DesignDemo)
            {
                return;
            }

            //判断是否存在单据状态属性
            bool exists = MB.WinBase.UIDataEditHelper.Instance.CheckExistsDocState(_BaseDataBindingEdit.CurrentEditEntity);

            if (exists)
            {
                MB.Util.Model.DocState docState = MB.WinBase.UIDataEditHelper.Instance.GetEntityDocState(_BaseDataBindingEdit.CurrentEditEntity);

                this.ReadOnly = (docState != MB.Util.Model.DocState.Progress);
            }
            if (_BaseDataBindingEdit.CurrentEditType == ObjectEditType.OpenReadOnly)
            {
                this.ReadOnly = true;
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 获取当前编辑单据的状态。
        /// 特殊说明: 在UI 层操作时 由于该方法要频繁进行调用,所以把它实现在UI层 而非作为服务来提供。
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public MB.WinBase.Common.ObjectState GetObjectState(object entity)
        {
            var val = MB.Util.MyReflection.Instance.InvokePropertyForGet(entity, ENTITY_STATE_PROPERTY);

            if (val == null)
            {
                throw new MB.Util.APPException(string.Format(" {0} 不是系统有效的主表实体对象,系统所认识的实体对象至少包含 {1} 属性!", entity.GetType().FullName, ENTITY_STATE_PROPERTY));
            }

            MB.Util.Model.EntityState state = (MB.Util.Model.EntityState)Enum.Parse(typeof(MB.Util.Model.EntityState), val.ToString());

            if (state == MB.Util.Model.EntityState.New)
            {
                return(MB.WinBase.Common.ObjectState.New);
            }
            else if (state == MB.Util.Model.EntityState.Deleted)
            {
                return(MB.WinBase.Common.ObjectState.Deleted);
            }
            else if (state == MB.Util.Model.EntityState.Modified)
            {
                return(MB.WinBase.Common.ObjectState.Modified);
            }
            else if (state == MB.Util.Model.EntityState.Persistent)
            {
                bool existsDocState = MB.Util.MyReflection.Instance.CheckObjectExistsProperty(entity, ENTITY_DOC_STATE);
                if (!existsDocState)
                {
                    return(MB.WinBase.Common.ObjectState.Unchanged);
                }

                MB.Util.Model.DocState docState = GetEntityDocState(entity);
                if ((int)docState >= MB.BaseFrame.SOD.OVER_DOC_STATE_LIMIT)
                {
                    return(Common.ObjectState.OverDocState);
                }

                switch (docState)
                {
                case MB.Util.Model.DocState.Progress:
                    return(MB.WinBase.Common.ObjectState.Unchanged);

                case MB.Util.Model.DocState.Validated:
                    return(MB.WinBase.Common.ObjectState.Validated);

                case MB.Util.Model.DocState.Approved:
                    return(MB.WinBase.Common.ObjectState.Approved);

                case MB.Util.Model.DocState.Completed:
                    return(MB.WinBase.Common.ObjectState.Completed);

                case MB.Util.Model.DocState.Suspended:
                    return(MB.WinBase.Common.ObjectState.Suspended);

                case MB.Util.Model.DocState.Withdraw:
                    return(MB.WinBase.Common.ObjectState.Withdraw);

                default:
                    throw new MB.Util.APPException(string.Format("从DocState 转换到ObjectState 时,对于DocState 还没有进行处理!", docState.ToString()));
                }
            }
            else if (state == MB.Util.Model.EntityState.Transient)
            {
                return(MB.WinBase.Common.ObjectState.None);
            }
            else
            {
                throw new MB.Util.APPException("根据主表的实体对象转换为所认识的对象状态是有误,请检查EntityState 和 DocState!");
            }
        }
Ejemplo n.º 9
0
 /// <summary>
 ///  在单据状态发生时产生。
 /// </summary>
 /// <param name="mainEntity"></param>
 /// <param name="docState"></param>
 protected virtual void OnDocStateChanged(object mainEntity, MB.Util.Model.DocState newDocState)
 {
     _ClientRuleObject.RaiseAfterDocStateChanged(mainEntity);
 }
Ejemplo n.º 10
0
        /// <summary>
        /// 根据当前实体的状态控制工具拦的状态。
        /// </summary>
        protected virtual void OnToolsButtonValidate()
        {
            if (!_MainGridBindingSource.CheckExistsCurrentItem())
            {
                return;
            }

            object entity = _EditBindingSource.Current;

            if (entity is DataRow)
            {
                throw new MB.Util.APPException("目前框架的实现还不支持DataRow 的绑定编辑处理。");
            }

            bntMoveFirstItem.Enabled    = _MainBindingGridView != null && !_MainBindingGridView.IsFirstRow;
            bntMovePreviousItem.Enabled = _MainBindingGridView != null && !_MainBindingGridView.IsFirstRow;
            bntMoveLastItem.Enabled     = _MainBindingGridView != null && !_MainBindingGridView.IsLastRow;
            bntMoveNextItem.Enabled     = _MainBindingGridView != null && !_MainBindingGridView.IsLastRow;
            if (_MainBindingGridView != null)
            {
                bntPositionItem.Caption = string.Format("{0}/{1}", _MainBindingGridView.FocusedRowHandle + 1, _MainBindingGridView.RowCount);
            }

            MB.WinBase.Common.ObjectState objectState = MB.WinBase.UIDataEditHelper.Instance.GetObjectState(entity);
            bntAddNewItem.Enabled = true && this.CurrentEditType != ObjectEditType.OpenReadOnly;
            //判断是否为扩展的操作类型
            bool isExtendDocState = objectState == ObjectState.OverDocState;

            bntDeleteItem.Enabled = !isExtendDocState && (objectState == ObjectState.Modified || objectState == ObjectState.Unchanged) &&
                                    _MainGridBindingSource.Count > 1 && this.CurrentEditType != ObjectEditType.OpenReadOnly;
            bntSaveItem.Enabled         = !isExtendDocState && (objectState == ObjectState.New || objectState == ObjectState.Modified);
            bntSubmitItem.Enabled       = !isExtendDocState && (objectState == ObjectState.Unchanged);
            bntCancelSubmitItem.Enabled = !isExtendDocState && objectState == ObjectState.Validated;

            _BusinessOperateTrace.ResetDocEntity(entity);

            //根据实体对象的状态变化设置相应的信息.
            MB.Util.Model.EntityState entityState = MB.WinBase.UIDataEditHelper.Instance.GetEntityState(entity);

            //判断是否存在单据状态属性
            bool exists = MB.WinBase.UIDataEditHelper.Instance.CheckExistsDocState(entity);

            if (exists)
            {
                MB.Util.Model.DocState docState = MB.WinBase.UIDataEditHelper.Instance.GetEntityDocState(entity);
                if (bntDeleteItem.Enabled)
                {
                    //只有在录入中的数据才可以进行删除
                    bntDeleteItem.Enabled = docState == MB.Util.Model.DocState.Progress;
                }
                MB.WinBase.Binding.BindingSourceHelper.Instance.SetCtlReadOnly(_EditColumnCtlBinding, docState != MB.Util.Model.DocState.Progress);

                OnDocStateChanged(_EditBindingSource.Current, docState);
            }
            else
            {
                bntSubmitItem.Enabled       = false;
                bntCancelSubmitItem.Enabled = false;
            }
            MB.WinBase.Binding.BindingSourceHelper.Instance.SetCtlByAllowEditStates(_EditColumnCtlBinding, entityState);
            //设置当前编辑Form 为只读属性
            if (_CurrentEditType == ObjectEditType.OpenReadOnly)
            {
                MB.WinBase.Binding.BindingSourceHelper.Instance.SetCtlReadOnly(_EditColumnCtlBinding, true);
            }
            //根据模块的需要重新初始化操作菜单项。
            OnAfterRefreshButtonItem();
        }