//根据当前单据对象的状态控制可操作菜单项 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; } }
/// <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); }
/// <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; } }
/// <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(); }
/// <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); }
/// <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); }
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; } }
/// <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!"); } }
/// <summary> /// 在单据状态发生时产生。 /// </summary> /// <param name="mainEntity"></param> /// <param name="docState"></param> protected virtual void OnDocStateChanged(object mainEntity, MB.Util.Model.DocState newDocState) { _ClientRuleObject.RaiseAfterDocStateChanged(mainEntity); }
/// <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(); }