1.使用工作流的前提,必须有一个完整的业务对象1)通过详细的业务和流程分析获取对应的业务对象,在UAP数据引擎中确定当前业务对象应包含的功能有哪些(不同的业务事件需要不同的业务功能)每个业务功能返回的查询结果集需要包含哪些字段(包含计算列),查询结果中必须包含结果列VoucherId,VoucherCode,VoucherType。这三列在审批流中是关键业务数据,会在任务项的扩展属性中出现,可以作为任务项显示名称、发送消息模版的数据提供者。命名必须注意完全匹配(注意大小写)2)在流程发布的时候,结果集的schema注册到MOM中作为工作流消息体的schema,在设计器中可以参照该schema来给流程变量赋值,从而在运行时流程实例可以获取相应变量的值1.1.UAP数据引擎进行业务对象设计1.2.审批业务对象的注册可以使用AuditBusinessServiceTool.exe工具来进行工作流相关数据的预置,也可以直接预置sql脚本的方式,使用工具的步骤如下:1.先建立分类关系2.注册审批业务对象3.增加业务事件业务事件可理解为对审批对象所可以进行的审批操作,如对请假单这一审批业务对象,可以进行提交、审批、打回等操作。业务事件URL中包含响应该业务事件的业务模块定位信息,在运行期间,门户将根据该信息加载相应的业务模块来完成该业务事件的响应。URL预置格式如下:?xmlversion=1.0encoding=utf-8?CommandparamName=idValue=/paramName=nameValue=/paramName=authIDValue=/paramName=cmdLineValue=/paramName=docTypeValue=/paramName=docIDValue=/paramName=subFunctionValue=/paramName=SubSysIDValue=//Command上述各参数值与UFSystem.UA_Menu中的字段存在对应关系,id-UA_Menu.cMenu_Id,name-UA_Menu.cMenu_Name,authID-UA_Menu.cAuth_Id,SubFunction-UA_Menu.cSub_ID,其他参数保留,可不预置。如来料报检单:?xmlversion=1.0encoding=utf-8?CommandparamName=idValue=QM020101/paramName=nameValue=来料报检单/paramName=authIDValue=QM02010101/paramName=cmdLineValue=/paramName=docTypeValue=/paramName=docIDValue=/paramName=subFunctionValue=/paramName=SubSysIDValue=QM//Command4.指定业务事件对应的业务实体务,本处的业务实体可对应到数据引擎中的业务对象下的功能中包含的某特定查询。设置界面如下:5.指定业务事件所需要的关键业务参数关键业务参数将会在设计器中指定从业务实体中取数据的规则(XPath),流程实例运行时从符合业务实体格式描述的业务单据取得数据,并在调用业务模块处理该业务事件时传递给业务模块。通常业务事件均应至少包含三个参数:VoucherId,VoucherCode,VoucherType。6.设置业务事件插件通过菜单选项-》业务插件进入插件注册界面,如下图然后在业务对象事件下注册该事件处理后调用的插件审批业务对象用到的所有表结构如下AuditObjectCategory(业务对象分类预置表)AuditBizObjects(业务对象预置表)AuditBizEvents(业务事件预置表)AuditPlugins(审批流中插件预置表)AuditEventPlugins(业务事件挂接插件预置表)AuditBizPriParams(业务事件参数预置表)AuditMsgTypeConfig(审批消息)2.开发与注册服务1)服务开发:无特殊约定,服务内部如果需要CallContext、发起人等工作流系统内置变量信息,可以在流程设计过程中,指定变量->服务传入参数的映射方式来获得。自动服务开发中的参数约束1、所有参数类型必须是基本类型和可SOAP序列化的类型;2、非基本类型的参数必须部署在GAC中;3、对于部署在本地的服务,支持ref,out参数(VB的ByRef同ref);4、对于VB中声明为ByRef的参数,必须是Variant类型。string,(对应设计器变量类型string)short,(对应设计器变量类型float)int,(对应设计器变量类型int)long,(对应设计器变量类型int)double,(对应设计器变量类型double)bool,(对应设计器变量类型string)datetime,(对应设计器变量类型string)object(对应设计器变量类型object)如果工作流实例中,对该服务调用后,由于某些原因,流程实例回滚(Rollback)时,该服务也需要回滚,则该服务还需要注册对应的Undo接口信息。约定Undo接口方法名为Un+方法名,参数、返回值同原注册的服务方法一致。为了能正确描述Undo接口,需要在扩展属性中增加3个属性:1、undo_class:如果是COM就表示为progid,是.Net表示为类的完全限定名2、undo_type:assembly,com3、undo_location:当是.Net程序的时候表示为程序集的名b)服务注册在工作流模型中,自动活动所调用的服务需要预先注册到MOM服务器上,过程如下:3.人工活动插件开发目的:1.保证事务性的要求。审批过程中为了保证审批动作和业务处理的一致性(保证审批动作真实的反映业务状态和处理动作的状况),以及执行退回、弃审、打回、撤消等业务功能时,业务状态的正确回滚和审批进程对这些动作的如实记录。这些行为都需要有事务来保证其一致性和完整性2.流程灵活定制的要求。在审批过程中并不是每一个流程活动都需要对业务状态进行更改,为了执行退回、撤消等业务活动时能够根据业务规则对业务状态进行更新或者回滚,需要业务能够提供根据业务逻辑对业务状态进行操作的服务和接口,配制后由审批流或者工作流引擎来调度实现正确的业务功能。为了保证灵活高效的执行业务活动要求业务提供自己的逻辑实现,而插件机制恰好能够实现该目的。1)VB插件写法OptionExplicitDimserviceAsPuServiceAdapterPublicFunctionDoAudition(keyDataAsString,auditActionAsString,contextAsString,ByRefbizDataAsString,calledCtxAsObject)AsBooleanEndFunctionPublicFunctionUndoAudition(keyDataAsString,auditActionAsString,contextAsString,ByRefbizDataAsString,calledCtxAsObject)AsBooleanEndFunction2).Net插件写法classFinalAuditPlugin:IAuditPluginpublicboolDoAudition(stringprimBizData,stringauditAction,stringcontext,refstringbizdata,objectcalledCtx)publicboolUndoAudition(stringprimBizData,stringauditAction,stringcontext,refstringbizdata,objectcalledCtx)publicboolHandleBizException(stringprimBizData,stringauditAction,stringcontext,refstringhandleResult,refstringbizdata,objectcalledCtx)4.业务组件调用工作流的具体接口工作流对外提供的接口都是UFIDA.U8.Audit.ServiceProxy.dll中的AuditServiceProxy类1)提交1.VB客户端调用FunctionSubmitApplicationMessage_2(bizObjectIdAsString,eventIdAsString,voucherIdAsString,contextAsString,calledCtxAsCalledContext)AsBoolean2..NET客户端调用publicboolSubmitApplicationMessage(stringbizObjectId,stringeventId,stringvoucherId,stringcontext,CalledContextcalledCtx)2)审核3)撤销接口publicboolRevokeAudition(stringprocessInstId,CalledContextcalledCtx)publicboolRevokeAudition(stringvoucherId,stringvoucherType,CalledContextcalledCtx)4)弃审5.运行时用的所有表及含意图一描述了各个表之间的对应关系,其中WF_ActiveFlow为关联主表,PIID字段分别一对多关联WF_FlowState,Table_Task;通过VoucherID,VoucherCode,VoucherType,cBizEventId,cBizObjectId,cYear,cAcc_Id和WFAudit表多对多关联。Table_Task通过cTK_ID一对多关联Table_Task_Relation表。ID_CODE_TYPE_OID_EIDcProcInstID_PIIDcTK_IDPIIDWF_ActiveFlowPIIDVoucherIDVoucherCodeVoucherTypecBizObjectIdcBizEventIdcYearcAcc_IdFlagCodeWF_FlowStatePIIDTable_TaskcTK_IDcProcInstIDTable_Task_RelationcTK_IDWFAuditVoucherIDVoucherTypeVoucherCodeBizObjectIdBizEventIdAccountIdAccountYear