U8工作流开发手册.doc_第1页
U8工作流开发手册.doc_第2页
U8工作流开发手册.doc_第3页
U8工作流开发手册.doc_第4页
U8工作流开发手册.doc_第5页
免费预览已结束,剩余30页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

工作流开发手册1 功能介绍:工作流系统是以规格化的流程描述作为输入的软件组件,它维护流程的运行状态,并在人和应用之间分派活动、最终达到协同多人或服务共同完成工作任务的目的。2 使用过程:工作流系统的使用过程分为三个阶段:设计时、配置时、运行时;设计时阶段需要完成流程模型设计;配置时阶段需要完成工作流系统运行环境的配置、工作流模型发布及版本管理等工作;运行时阶段需要负责发起和完成流程实例等工作。U8系统安装完毕后,首先需要进入工作流环境配置模块设置MOM服务器和工作流引擎信息;配置的信息会通知到对应的MOM服务器,使得MOM服务器感知与其协同工作的工作流引擎信息。配置时涉及的功能模块及运行时的流程实例管理模块存在于工作流管理控制台中。环境配置完毕后,可以进行流程模型设计工作。通过流程设计器,设计过程中结合UAP工具中设计出来的业务对象和注册在MOM服务器上的消息和服务信息,生成流程模型。流程设计器设计出来的流程模型还不能直接投入使用,需要通过重定位模块对其消息和服务地址信息从设计时环境的地址转化为运行时地址后,才能正式使用。重定位模块通过“流程发布”动作来完成该动作的。流程模型发布后,业务应用就可通过消息发送接口发送特定类型的消息,消息通过MOM服务器通知工作流引擎,生成对应的流程实例,在流程实例处理过程中调用业务服务、生成需要人工交互的任务项、并最终协调完成流程实例的处理。流程实例可以被流程实例管理模块加以管理、修改。3 开发帮助基于新的工作流平台之上的审批流应用,利用UAP的数据引擎、MOM消息发布订阅和消息转发功能来完成审批这一类特殊流程的管理、配置、设计、使用、维护、监视操作。下图是工作流系统使用流程图:在上述流程涉及到业务系统开发人员的活动中,服务开发、服务注册、预制业务对象、编写预制运行时活动插件、编写客户端审批提交代码等工作是在业务模块中实现审批功能都可能涉及的动作。 3.1 开发与注册服务本处服务是指业务部门提供能、为了能满足特定业务功能而实现的组件中的方法;这些服务可在流程设计过程中运用于流程模型,体现为流程模型中的自动服务。3.2 服务开发服务开发无特别约定,服务内部如果需要CallContext、发起人等工作流系统内置变量信息,可以在流程设计过程中,指定变量 服务传入参数的映射方式来获得。流程模型内置变量: 变量名类型说明ActivityNamestring活动名称StartPerformerstring流程发起人工号CurrentPerformerstring执行者工号StartTimestring流程发起时间ActivityStartTimestring活动开始时间ActivityDelaystring延迟时间StartPerformerNamestring流程发起人姓名CurrentPerformerNamestring执行者姓名KeySetstring人工活动UNDO接口参数KeySetCalledContextobject人工活动UNDO接口参数CalledContextCallResultstring人工活动UNDO接口返回值LoginContextobject工作流构造LoginContext对象3.3 服务注册在工作流模型中,自动活动所调用的服务需要预先注册到MOM服务器上,注册过程如下:1.如果MOM上没建立所属子产品功能点,则首先建立该子产品功能点;建立方法:打开MOM集成工具,在集成目录U8ERP下加入子产品功能点,如下图:2.在所属子产品功能点的“集成接口”节点上,注册集成接口,如下图:进入注册集成接口界面后,首先设置集成注册码和集成接口名,集成接口注册吗是用于识别该注册服务的,要求在同一子产品节点下注册码惟一。然后需要设置服务调用端点(如果是本地调用,需要考虑调用路径问题!):设置服务路径时可以使用MOM预置的三个宏变量:%U8SOFT% 表示U8安装目录%UFCOMSQL% 表示ufcomsql目录%U8APPSRV% 表示u8应用服务器 例如:注册:D:U8SOFT SAMyLib.DLL 组件,使用宏变量后应该为:%U8SOFT%SAMyLib.DLL自动服务开发中的参数约束1、所有参数类型必须是基本类型和可SOAP序列化的类型;2、非基本类型的参数必须部署在GAC中;3、对于部署在本地的服务,支持ref,out参数(VB的ByRef同ref);4、对于VB中声明为ByRef的参数,必须是Variant类型。 支持的基本类型包括:void,string,(对应设计器变量类型 string )short,(对应设计器变量类型 float )int,(对应设计器变量类型 int )long,(对应设计器变量类型 int )double,(对应设计器变量类型 double )bool,(对应设计器变量类型 bool)datetime,(对应设计器变量类型 datetime)object(对应设计器变量类型 object )如果工作流实例中,对该服务调用后,由于某些原因,流程实例回滚(Rollback)时,该服务也需要回滚,则该服务还需要注册对应的Undo接口信息。约定Undo接口方法名为Un+方法名,参数、返回值同原注册的服务方法一致。为了能正确描述Undo接口,需要在扩展属性中增加3个属性: undo_class:如果是COM就表示为progid,是.Net表示为类的完全限定名 undo_type:assembly,com undo_location:当是.Net程序的时候表示为程序集的名如下图:服务例代码using System;using System.Collections.Generic;using System.Text;namespace EployeeSelfSevice public class Employee / / 申请休假 / / 员工号 / 假期类型 / 申请数量 / 申请是否成功 public bool ApplyHoliday(string EmployeeID,int HolidayType, int ApplyDateNumber) /TODO:如果符合申请条件,扣减该员工的可用假期数 return true; / / ApplyHoliday的Undo方法 / / 员工号 / 假期类型 / 申请数量 / 申请是否成功 public bool UnApplyHoliday(string EmployeeID, int HolidayType, int ApplyDateNumber) return true; 3.4 人工活动插件开发插件必须包含如下三个方法,名称可以不同,但参数必须一致public interface IAuditPluginbool UndoAudition(string primBizData,string auditAction, ref string bizdata,object calledCtx, ref string errMsg);bool DoAudition(string primBizData,string auditAction, ref string bizdata,object calledCtx, ref string errMsg);bool HandleBizException(string primBizData,string auditAction,ref string handleResult,ref string bizdata,object calledCtx, ref string errMsg);primBizData:KeySetauditAction的取值/ / 审批动作枚举类型/ Serializablepublic enum AuditActionSubmit = 0,/提交Agree = 1,/同意Disagree = 2,/不同意Dispatch = 3,/转签Reject = 4,/打回Revocation = 5,/撤销Return = 6,/退回Abandon = 7,/弃审Bizdata:业务需要传出的参数handleResult:是否需要重做,取值ReHandle/UnHandleusing System;using System.Collections.Generic;using System.Text;using UFSoft.U8.Framework.LoginContext;using UFIDA.U8.Audit.Interface;using UFSoft.U8.EX.Common;using UFSoft.U8.EX.Common.Args;using UFSoft.U8.EX.Server.BusinessObject;using UFSoft.U8.EX.Framework.DataModel;namespace UFSoft.U8.EX.CreditPlugins class FinalAuditPlugin:IAuditPlugin #region IAuditPlugin 成员 public bool DoAudition(string primBizData, string auditAction, ref string bizdata, object calledCtx, ref string errMsg) LoginService login = new LoginService(CalledContext)calledCtx); OrderBO bo = new OrderBO(login); AuditArgs auditArg = new AuditArgs(); int id = int.Parse(GetVoucherId(primBizData); bo.GetData(id); Order order = bo.data as Order ; auditArg.ID = order.orderHeader.id; auditArg.Guid = order.orderHeader.guid; auditArg.ufts = order.orderHeader.ufts; auditArg.cCode = order.orderHeader.ccode; auditArg.VarifyState = order.orderHeader.iverifystate; auditArg.Version = order.orderHeader.iversion; auditArg.UserName = login.UserInfo.UserName; auditArg.VerifierDate = login.UserInfo.operDate; auditArg.Verifier = login.UserInfo.UserName; auditArg.Row = -1; bo.BatchAudit(new AuditArgs auditArg ); return true; /throw new Exception(The method or operation is not implemented.); private string GetVoucherId(string keySetData) KeySetDataReader reader = new KeySetDataReader(keySetData); return readerVoucherId; private string GetVoucherType(string keySetData) KeySetDataReader reader = new KeySetDataReader(keySetData); return readerVoucherType; private string GetVoucherCode(string keySetData) KeySetDataReader reader = new KeySetDataReader(keySetData); return readerVoucherCode; public bool HandleBizException(string primBizData, string auditAction, string context, ref string handleResult, ref string bizdata, object calledCtx, ref string errMsg) throw new Exception(The method or operation is not implemented.); public bool UndoAudition(string primBizData, string auditAction, string context, ref string bizdata, object calledCtx, ref string errMsg) LoginService login = new LoginService(CalledContext)calledCtx); OrderBO bo = new OrderBO(login); AuditArgs auditArg = new AuditArgs(); int id = int.Parse(GetVoucherId(primBizData); bo.GetData(id); Order order = bo.data as Order; auditArg.ID = order.orderHeader.id; auditArg.Guid = order.orderHeader.guid; auditArg.ufts = order.orderHeader.ufts; auditArg.cCode = order.orderHeader.ccode; auditArg.VarifyState = order.orderHeader.iverifystate; auditArg.Version = order.orderHeader.iversion; auditArg.UserName = login.UserInfo.UserName; auditArg.VerifierDate = login.UserInfo.operDate; auditArg.Verifier = login.UserInfo.UserName; auditArg.Row = -1; bo.BatchUnAudit(new AuditArgs auditArg ); return true;/ throw new Exception(The method or operation is not implemented.); #endregion 1.1.2 VB插件的开发Option ExplicitDim service As PuServiceAdapterPublic Function DoAudition(keyData As String, auditAction As String , ByRef bizData As String, calledCtx As Object,ByRef errMsg As String) As Boolean Set service = New PuServiceAdapter DoAudition = service.VerifyVoucher(keyData, auditAction, context, calledCtx, bizData)End FunctionPublic Function UndoAudition(keyData As String, auditAction As String, ByRef bizData As String, calledCtx As Object,ByRef errMsg As String) As Boolean Set service = New PuServiceAdapter UndoAudition = service.UnVerifyVoucher(keyData, auditAction, calledCtx, bizData)End FunctionPublic Function HandleBizException(keyData As String, auditAction As String, ByRef handleResult As String, ByRef bizData As String, calledCtx As Object,ByRef errMsg As String) As Boolean HandleBizException = True Dim bizDataObj As New BizDataMap bizDataObj.LoadXML bizData If MsgBox(bizDataObj.Value(Error), vbRetryCancel) = vbRetry Then handleResult = ReHandle bizDataObj.Value(Action) = Retry bizDataObj.Value(Check) = False Else handleResult = UnHandle bizDataObj.Value(Action) = Done End If bizData = bizDataObj.XML MsgBox BizData = & bizDataEnd Function3.5 预制业务对象业务对象是指审批流程处理的各种类型业务对象(比如:采购订单、材料出库单、出口订单等)。新的审批流利用UAP的数据引擎来定义这些业务对象,这样就可以通过修改数据引擎中的业务对象的查询结果来形成不同的业务对象的Schema,从而可以将这些对象的Schema用作流程定义的条件并在流程运行时获取业务对象实例的属性值来进行相应的处理。3.6 UAP数据引擎进行业务对象设计审批流中用到的是UAP数据引擎中查询结果的数据,具体设计步骤及其与预置数据之间的关系如下:在数据引擎中添加业务对象设置业务对象基本属性为业务对象添加功能设置业务功能基本属性为功能添加业务实体关系查询设置实体关系查询基本属性为查询添加基础业务实体为查询添加列。查询结果中必须包含结果列VoucherId,VoucherCode,VoucherType。 这三列在审批流中是关键业务数据,会在任务项的扩展属性中出现,可以作为任务项显示名称、发送消息模版的数据提供者。命名必须注意完全匹配(注意大小写)为查询添加计算结果列为查询添加查询条件测试新增业务对象3.7 审批业务对象注册数据引擎中设计完毕业务对象后,就可提供给审批流系统使用。使用前,需要先注册审批业务对象(注意:与数据引擎中所描述的业务对象是两不同概念)。注册过程使用位于U8SOFTWorkflow目录下的工具AuditBusinessServiceTool.exe来完成。审批业务对象注册步骤如下:1 建立分类关系2 注册审批业务对象3 增加业务事件业务事件可理解为对审批对象所可以进行的审批操作,如对请假单这一审批业务对象,可以进行提交、审批、打回等操作。业务事件URL中包含响应该业务事件的业务模块定位信息,在运行期间,门户将根据该信息加载相应的业务模块来完成该业务事件的响应。URL预置格式如下: 上述各参数值与UFSystem. UA_Menu中的字段存在对应关系,id-UA_Menu. cMenu_Id,name-UA_Menu. cMenu_Name,authID-UA_Menu. cAuth_Id,SubFunction-UA_Menu.cSub_ID,其他参数保留,可不预置。如来料报检单: 上图中支持插件选项通常需要勾上。任务类型中,一般情况下,需填“1”(表明为审批类型的任务项目),但如果是为了表明为打回重做的任务类型,需要填入“2”。4 指定业务事件对应的业务实体本处的业务实体可对应到数据引擎中的业务对象下的功能中包含的某特定查询。设置界面如下:5指定业务事件所需要的关键业务参数关键业务参数将会在设计器中指定从业务实体中取数据的规则(XPath),流程实例运行时从符合业务实体格式描述的业务单据取得数据,并在调用业务模块处理该业务事件时传递给业务模块。通常业务事件均应至少包含三个参数:VoucherId,VoucherCode,VoucherType。5 设置业务事件插件通过菜单选项-业务插件进入插件注册界面,如下图:然后在业务对象事件下注册该事件处理后调用的插件。3.8 审批提交客户端编程提交流程图判断是否启用工作流,分别提供了存储过程和接口存储过程:Usp_WF_IsFlowControlled cBizObjectId nvarchar(40),cBizEventId nvarchar(40),iYear smallint,cAcc_Id nvarchar(3),bControlled bit out程序接口:提供给业务产品发起提交的接口UFIDA.U8.Audit.ServiceProxy.dllVB代码Dim oAudit as ObjectSet oAudit = CreateObject(“UFIDA.U8.Audit.ServiceProxy.AuditServiceProxy”)接口Public Function SubmitApplicationMessage(primBizData As String, calledCtx As CalledContext, ByRef isWFControled As Boolean,ByRef errMsg As String) As BooleanprimBizData : 关键业务数据XML串,XML串的Schema如下 calledCtx:Login中的登陆上下文isWFControlled:是否通过了发起条件errMsg:错误信息重载方法2Public Function SubmitApplicationMessage_2(bizObjectId As String, eventid As String, voucherId As String,calledCtx As CalledContext, ByRef isWFControled As Boolean,ByRef errMsg As String) As BooleanbizObjectId:业务对象Ideventid:业务事件IdvoucherId:单据id示例:1VB客户端调用Function SubmitApplicationMessage_2(bizObjectId As String, eventId As String, voucherId As String, calledCtx As CalledContext,ByRef isWFControled As Boolean,ByRef errMsg As String) As Boolean Dim login As U8Login.clsLogin 审批服务客户端代理 Dim auditSvc As New UFIDA_U8_Audit_ServiceProxy Login服务的LoginContext对象 Dim calledCtx As New UFSoft_U8_Framework_LoginContext 业务对象的标识,与与审批预置表(AuditBizObjects)中的业务对象主键相同 Dim strBizObjectId As String 业务事件的标识,与审批预置表(AuditBizEvents)中的业务事件主键相同 Dim strBizEventId As String 单据标识,也就是业务对象的实例标识 Dim iVoucherId As IntegerDim ret As Boolean是否满足开始条件Dim bControlled As Boolean错误信息 auditSvc On Error GoTo errHandler: auditSvc strBizObjectId = PU88 strBizEventId = PU88.Submit strContext = iVoucherId = 1 calledCtx.SubId = DP calledCtx.TaskID = login.GetTaskID(SubId) calledCtx.token = login.userToken If (strBizObjectId = ) Or (strBizEventId = ) Then MsgBox 请选择选择业务对象或业务事件! Else 业务进行自己的处理,可能需要发起自己的事务 ret = auditSvc. SubmitApplicationMessage_2 (strBizObjectId, strBizEventId, iVoucherId, calledCtx,bControlled,errMsg) If (ret = True) Then If bControlled = True ThenMsgBox (提交成功) 如果发起事务,执行其他业务逻辑,并提交事务End If Else MsgBox (提交失败,失败原因: & errMsg) 如果发起事务,回滚事务,并做其他处理 End If End If ReturnerrHandler: 业务自己的异常处理逻辑2.NET客户端调用public bool SubmitApplicationMessage(string bizObjectId,string eventId,string voucherId,string context,CalledContext calledCtx)参数说明:/ / 提交审批消息/ / 业务对象标识/ 业务事件标识/ 单据唯一标识/ 用户登录信息/ 返回提交调用结果,成功返回true,否则返回false。示例:using UFIDA.U8.Audit.BusinessInfo;using UFIDA.U8.Audit.BusinessService;using UFIDA.U8.Audit.WorkList;using UFIDA.U8.Audit.ServiceProxy;using UFSoft.U8.Framework.Login.UI;using UFSoft.U8.Framework.LoginContext;/子系统标识private const string SubId = DP;/需要根据各业务子系统进行替换try/创建审批服务的客户端代理AuditServiceProxy auditSvc = new AuditServiceProxy();/构造Login的 CalledContext对象CalledContext calledCtx = new CalledContext();calledCtx.subId = SubId;calledCtx.TaskID = _login.GetTaskID(SubId);calledCtx.token = _login.userToken;/业务对象标识 string bizObjectId = PU88; /业务事件标识 string bizEventId = PU88.Submit;/单据号int voucherId = 1;if (bizEventId = string.Empty | bizObjectId = string.Empty) MessageBox.Show(请选择选择业务对象或业务事件!); return; bool ret = auditSvc.SubmitApplicationMessage(bizObjectId,bizEventId,voucherId ,calledCtx,ref bControlled, ref errMsg);if(ret = true&bControlled)MessageBox.Show(提交成功);elseMessageBox.Show(提交失败,失败原因: + errMsg);catch(Exception ex)MessageBox.Show(ex.Message);3.9批审审批界面接口程序集:UFIDA.U8.Audit.ServiceProxy.dll功能:显示批量处理界面,返回批量处理参数。(注意:本版对批审的处理分两个步骤,先显示界面,返回选择参数,然后逐次调用3.10的审核接口进行批量处理)A. 显示批审界面 / 登陆上下文 / 审批动作,传出参数 / 审批状态,传出参数 / 审批意见,传出参数/ 用户点击同意返回True;点击取消则返回FalseFunction ShowAuditSimpleUI(calledCtx As CalledContext, byref action As Integer, byref state As Integer, byref opinion As String) As BooleanB. 显示批弃界面/ 登陆上下文 / 审批状态,传出参数 / 审批意见,传出参数 / 用户点击同意返回True;点击取消则返回FalseFunction ShowAuditAbandonUI(calledCtx As CalledContext, byref state As Integer,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论