自定义审批流(开发)U9客户化开发支持部杨旭2009年 6月20日课程编号:课程概述后台模型开发前后台代码开发审批预置数据主题课程概述后台模型开发前后台代码开发审批预置数据主题课程概述能解决什么问题听课基础、课程内容考查目标课程概述后台模型开发前后台代码开发审批预置数据主题审批流后台模型理解实体状态机状态机的作用状态的迁移如何定义状态机审批动作BP实体状态机状态机模型状态1)状态的数量和名称根据各业务模块实际情况而定;2)状态名称,显示名称,及该状态是否完成状态事件驱动1)事件驱动是用来定义当事件发生状态的迁移的;2)事件一般由前台对后台状态影响的操作来确定,比如前台点提交时需要请求后台更改状态为办理中,审核时需要请求后台根据具体情况来更改状态。3)如果是审批事件,请在“事件”属性中选择UFIDA.U9.GeneralEvents中的审批结束事件,如果不是,则在BE中新建事件或者使用其模块统一做的事件。实体状态机模型开发界面审批动作BP提交审核弃审执行作废课程概述后台模型开发前后台代码开发审批预置数据主题实体状态机代码示例1、作废事件驱动private State DiscardEventDrivenImp(UFIDA.U9.HI.ProbationDoc.DiscardEvent ev){// To do ...State toState = CurrentState;toState = State.Discard;//如果是审批流则需终止审批过程,兼容确认方式的审批过程if (this.Entity.DocType.ConfirmType == U9.Base.Doc.ConfirmTypeEnum.ApproveFlow){if (this.Entity.DocStatus == DocStatusEnum.Approving){ApprovalService.Instance.TerminateApproval(this.Entity);}else if (this.Entity.DocStatus == DocStatusEnum.Approved){ApprovalService.Instance.KillApproval(this.Entity);}}return toState;}实体状态机代码示例2、提交事件驱动private State OpenStart_SubmitEventDrivenImp(UFIDA.U9.HI.ProbationDoc.SubmitEvent ev){// To do ...State toState = CurrentState;//TODO:实现转移条件toState = State.Approving;if (this.Entity.DocType.ConfirmType == U9.Base.Doc.ConfirmTypeEnum.ApproveFlow){ApprovalService.Instance.SubmitApproval(this.Entity);ServiceOrderSubscriber subscriber = new ServiceOrderSubscriber();subscriber.EntityKey = this.Entity.Key;EventHelper.SubscribeApprovalResultEvent(this.Entity.Key, subscriber);}return toState;}其中ServiceOrderSubscriber类为状态机生成的事件侦听器类(后面会提到)ApprovalService需要项目引用UFIDA.U9.Approval.Util.dll实体状态机代码示例3、审核事件驱动private State Approving_ApproveEventDrivenImp(UFIDA.U9.GeneralEvents.ApprovalResultEventev){State toState = CurrentState;if (this.Entity.DocType.ConfirmType == U9.Base.Doc.ConfirmTypeEnum.ComfirmWork){ toState = State.Approved;return toState;}if (ev.IsTerminate) //终止审批事件{ ApprovalService.Instance.TerminateApproval(this.Entity);toState = State.OpenStart;}else{ if (ev.IsApprovaled)toState = State.Approved; elsetoState = State.OpenStart; } return toState;}实体状态机代码示例4.执行事件驱动private State Approved_ExecuteEventDrivenImp(UFIDA.U9.HI.ProbationDoc.ExecuteEvent ev){//To do ...State toState=CurrentState;//TODO:实现转移条件if(true){toState = State.Closed;}return toState;}单据执行的业务逻辑可在插入,也可在单据BE的onsetdefaltvalue中插入实体状态机代码示例5.弃审事件驱动private State Approved_UnApproveEventDrivenImp(UFIDA.U9.HI.ProbationDoc.UnApproveEvent ev){State toState = CurrentState;//TODO:实现转移条件if (this.Entity.DocumentType.ConfirmType== UFIDA.U9.Base.Doc.ConfirmTypeEnum.ApproveFlow){ApprovalService.Instance.KillApproval(this.Entity);}toState = State.OpenStart;return toState;}实体状态机代码示例6.事件...