用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporationNCV5流程平台用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation流程框架流程框架WorkflowFrameworkProcessDefinitionWorkListAdministration&AuditBusinessFlowDesignerApprovalFlowDesignerExchangeEngineDataMappingRuleEngineInvokedApplicationsEmailScriptsBusinessServiceWebServiceOrganizationModelMetadataRepositoryApplicationClientApplicationModelWorkflowEngine流程框架用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation单据元模型单据物理模型(数据库表)单据类型单据动作单据函数单据VO对照单据UI单据项目单据VO模型•单据类型单据是对业务数据的抽象,单据类型是对单据的分类。•单据动作及脚本是对单据业务处理行为的抽象,具有可定制的动作脚本。用于驱动流程的流转。可对应于单据UI上的某个菜单。•单据函数是对服务于单据的业务功能的抽取。可用于动作脚本和条件判定。•单据UI单据的界面展现模型,包括四大模板以及UI工厂等。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation单据元模型•单据项目是对单据业务数据的描述。一般与单据的VO模型对应。•单据VO对照描述了流程平台所需的信息(比如制单人、审批人、单据ID等)在单据VO模型上的对应关系。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation单据类型•单据类型是对单据的分类。单据的元信息都是基于单据类型来定义。在定义单据类型时,单据类型必须属于某个系统类型。单据类型的注册信息比较多,由功能点[客户化]-[二次开发工具]-[单据管理]-[单据类型管理]维护,如图所示,一般由各个产品组预置。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation单据动作及脚本•是对单据业务处理行为的抽象,具有可定制的动作脚本。业务单据正是通过单据动作与流程平台进行交互的,从而驱动流程的流转。可对应于单据UI上的某个菜单。由功能点[客户化]-[二次开发工具]-[单据管理]-[单据动作管理]和[单据动作执行脚本]维护。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation单据函数•服务于单据的业务功能的抽取,是进行业务逻辑处理的组件。可用于动作脚本和条件判定。由功能点[客户化]-[二次开发工具]-[流程配置]-[数据交换管理]维护。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation单据项目管理•是对单据业务数据的描述。一般与单据的VO模型对应。由功能点[客户化]-[二次开发工具]-[单据管理]-[单据项目管理]维护用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation业务流程定义添加上下游单据,下游单据在流程配置的时候选择上游单据上游单据在流程配置时进行消息驱动配置用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation推式流程:单据动作管理配置推式流程:单据动作管理配置上游单据审核-进行驱动配置;下游单据保存-推式动作用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation增加业务类型增加业务类型((业务流程管理业务流程管理))核算规则是系统定义的,包含特定业务含义;一般选择“普通业务类”用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation数据交换用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation业务流程步骤流程1,业务建模时主实体实现接口流程信息获取(nc.itf.uap.pf.metadata.IFlowBizItf),上游单据还要实现交换前后对单据VO的调整处理(nc.itf.uap.pf.metadata.IVoChangeAdjustItf)2,必须有单据类型,并生成动作脚本,如果做推式单据则下游单据需要增加PUSHSAVE脚本,动作属性为推式动作,代码同WRITE动作脚本3,在数据交换节点设置上游单据或者下游单据,并对设置的上下游信息进行数据交换,数据交换时注意单据类型为赋值类型,值为单据类型编码,单据状态赋值为84,增加业务流程(也叫业务类型),这样可对单据类型+业务类型进行流程配置如不增加业务类型,就只能在common类型配置流程5,流程配置节点,选择一种业务类型或者common业务类型,增加按钮增加上游单据类型和下游单据类型。上游单据为自制单据,下游单据为参照单据。下游单据点流程配置按钮,在一个页配置上游单据。此时拉式单据就可以测试了。。推式单据还需要在上游单据点流程配置按钮,在消息配置页选择需要推式的动作点,比如保存或者审核(脚本需要在脚本管理那选上可进行驱动配置才可设置),点新增选择单据类型,再在脚本那选择pushsave脚本就可建立动作触发关联。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation审批流定义•审批流定义按照单据类型(+业务类型)进行了分类。用户可以基于单据类型定义审批流,也可以基于单据类型+业务类型(如果配置了业务流程)来定义审批流。一个单据类型(+业务类型)下可以定义多个审批流,这里可以把单据类型(+业务类型)理解为过程包的概念。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation流程模型•过程(Process)由许多被执行的活动和一系列决定活动执行次序的转移构成。•活动(Activity)审批流程中的一个个步骤统称为活动(或任务),包括制单活动、审批活动、虚活动、子流程。•转移(Transition)活动间的流转,是两个活动间的有向连接。转移条件(Condition):可为转移定义条件,只有满足条件的转移才可流转。转移优先级(Priority):优先级高的转移分支将被优先选择。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation流程模型•参与者(Participant)活动的执行者,是对系统中组织模型的引用。目前支持[操作员]、[角色]以及[动态组织]类型的参与者。在设计器中,活动和参与者由同一个图元来展现。•分支/汇总(Split/Join)活动的前驱/后继条件可通过Split/Join-AND/XOR属性组合为过程的选择、并行结构进行建模。加上顺序和循环,这四个基本结构就可描述大多数过程结构。同时,工作流引擎还支持两种反向流转模式:驳回和弃审。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation流程模型•抢占和会签审批活动的一个属性。会签:只有审批活动的参与者中所有用户完成审批后,该审批活动才能结束。抢占:只要审批活动的参与者中任何一人完成审批后,该审批活动即结束。•可指派审批活动的一个属性。如果审批活动定义了可指派属性,则该审批活动的实际执行者需要从其参与者中手工选择。指派的分支优先被选择。•流程限定审批活动的一个属性。用于设定前后两个审批活动的参与者之间的关系。支持“同公司”和“同部门”两种类型。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation流程模型代理人(Agent)审批活动的一个属性。制单活动不可设置代理人;只可为参与者为『操作员』类型的审批活动设置多级代理人;代理人只可为『操作员』。消息配置(MessageConfig)审批活动的一个属性。可为每个审批活动配置额外的消息通知机制。即在满足触发条件时,以消息、短信、邮件方式通知相关人员。可以为每个审批活动配置额外的消息发送机制。对于制单活动,发送条件必须为“无条件”。对于审批活动,发送条件可为“无条件”、“审核通过”和“审核不通过”三种(注:对于审批活动,“无条件”即该审批活动完成之后就发送)。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation流程定义的选择对于某个单据类型(+业务类型),根据制单人的不同,可定义多个审批流程定义。由于制单人类型支持『操作员』、『角色』和『动态组织』三类,一个操作员制单后,究竟走哪条流程定义,系统按照如下顺序优先选择流程定义:制单人为『操作员』类型的流程;制单人为『角色』类型的流程——若制单人委派了多个角色,则只找第一个角色定义的流程;制单人为『动态组织』类型的流程。用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation流程结果与单据状态流程结果与单据状态1:自由态:即单据尚在编写中(已保存或尚未保存)并未提交到审批流的状态。2:提交态:通过执行单据动作SAVE或EDIT,将单据送审后的状态。提交态是审批流内部的一个状态,它的回写并不通过审批流检查类进行。只能由业务组通过SAVE动作脚本自己对单据状态进行设置。所以有的业务组的单据并没有提交态的概念。3:审批进行中:流程实例正处于运行中的状态。4:审批完成:如果流程实例正常运行完成,该单据的审批过程即完成。审批流程结束后具有最终审批结果:通过或不通过,这也是单据的最终审批结果。自由态提交态进行中完成态17236548用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation流程结果与单据状态流程结果与单据状态状态转换触发条件自由态-〉提交态①制单后通过执行单据动作SAVE/EDIT将单据送审。提交态-〉进行中②送审后只要有人已审核,即为进行中进行中-〉完成态③流程实例按照定义一步步审批,直至正常流转结束。完成态-〉自由态④一弃到底自由态-〉完成态⑤提交即审批通过完成态-〉进行中⑥逐级弃审提交态-〉自由态⑦驳回到制单人进行中-〉自由态⑧1.驳回到制单人;2.流程流转到制单活动;3.第一个审批人弃审用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation三、范例流程三、范例流程--审批审批流流组织模型审批流程销售部门开发部门管理部门职员leijunjlliuyuan评估员zsbheyhzgchenxy部门经理liujianzjblicp财务经理cchhgylhwei总经理sj,fangj用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporationnc.bs.pub.pf.pfframe.PFBusiAction后台平台类nc.itf.uap.pf.IPFBusiAction平台接口nc.bs.pub.pf.PfUtilBO后台BO类,逐步取消,实际也是调用平台接口nc.itf.uap.pf.IPFBusiActionnc.ui.pub.pf.PfUtilClient前台平台类nc.ui.trade.businessaction.BusinessAction业务动作类,按钮调用相关平台类相关平台类PfUtilClient类单据审核方法processActionFlow(Containerparent,StringactionName,StringbillType,StringcurrentDate,AggregatedValueObjectvo,ObjectuserObj)参数说明:parent(ClientUI对象,可为空)actionName(动作名称UNAPPROVE,APPROVE)currentDate(当前日期)vo(聚合VO类)userObj(ClientUICheckRuleGetter类名称)IPFWorkflowQry接口查询单据的审批情况IPfBackCheck2单据VO如果实现该接口,则进行逐级反审批,反之为一弃到底模式用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporation业务UIPfUtilBOObjectprocessActionFlow()AbstractCompilerPfUtilClient“APPROVE”或“UNAPPROVE”或其他queryActionHint()1.判断是否进行动作前提示IUIBeforeProcAction.runClass()2.获取动作执行前的处理类,并执行wfVo=checkWorkFlow()3.动作为“APPROVE”,则弹出审批对话框.retObj=processAction(wfVo)5.retObj实现了IProcActionRetObject,则获取动作执行后的处理类,并执行IUIAfterProcAction.runClass()6.上述过程的异常类型为IPfRetException且需要处理,则再次进行处理retObj=runAfterActionException()7.retObj实现了PfUtilActionVO,则前台显示loadDLG()BillQueryDLG.showModal()retObj=processActionFlowInner()returnnull;wfVo=null;3'.动作非“APPROVE”3a.用户取消了审批对话框wfVo=checkWorkFlow()WorkFlowCheckDlgnewWorkFlowCheckDlg(wfVo)PFBusiActionretObj=processAction(wfVo)getVariableValue()actionBeforeWorkFlow()retObj=actionOnStep()startApproveFlowAfterAction()动作为”SAVE”,”EDIT”,则启动审批流actiondrive()动作为最后一个动作,执行动作驱动处理弃审动作约束检查PFActionConstrictActionConstrict()EngineServicesendWorkFlowOnSave()TaskManageracceptTaskFromBusi(task)procActionFlow(paraVo)processWorkFlow(paraVo)intFlag=forwardCheckFlow(paraVo)PFBusiStateexecApproveState(paraVo,intFlag)与用户交互:1.审批意见2.指派信息execApproveGoing(paraVo,intFlag)execUnApproveFree(paraVo,intFlag)execApprovePass(paraVo,intFlag)execApproveNoPass(paraVo,intFlag)WorkflowQueryintFlag=queryWorkflowStatus(billId)查询单据审批状态:-1-自由态0-审批不通过1-审批通过2-进行中3-提交态执行动作脚本execApprovePass(paraVo)如果制单即审批通过,或没有审批流定义,则直接审批通过returnIWorkFlowRet流程仍处于审批进行中时直接返回用友软件股份有限公司UFIDA@20062006UFIDASoftwareCorporationThanks!