U8工作流开发手册.docx
《U8工作流开发手册.docx》由会员分享,可在线阅读,更多相关《U8工作流开发手册.docx(27页珍藏版)》请在冰豆网上搜索。
U8工作流开发手册
工作流开发手册
1功能介绍:
工作流系统是以规格化的流程描述作为输入的软件组件,它维护流程的运行状态,并在人和应用之间分派活动、最终达到协同多人或服务共同完成工作任务的目的。
2使用过程:
工作流系统的使用过程分为三个阶段:
设计时、配置时、运行时;设计时阶段需要完成流程模型设计;配置时阶段需要完成工作流系统运行环境的配置、工作流模型发布及版本管理等工作;运行时阶段需要负责发起和完成流程实例等工作。
U8系统安装完毕后,首先需要进入工作流环境配置模块设置MOM服务器和工作流引擎信息;配置的信息会通知到对应的MOM服务器,使得MOM服务器感知与其协同工作的工作流引擎信息。
配置时涉及的功能模块及运行时的流程实例管理模块存在于工作流管理控制台中。
环境配置完毕后,可以进行流程模型设计工作。
通过流程设计器,设计过程中结合UAP工具中设计出来的业务对象和注册在MOM服务器上的消息和服务信息,生成流程模型。
流程设计器设计出来的流程模型还不能直接投入使用,需要通过重定位模块对其消息和服务地址信息从设计时环境的地址转化为运行时地址后,才能正式使用。
重定位模块通过“流程发布”动作来完成该动作的。
流程模型发布后,业务应用就可通过消息发送接口发送特定类型的消息,消息通过MOM服务器通知工作流引擎,生成对应的流程实例,在流程实例处理过程中调用业务服务、生成需要人工交互的任务项、并最终协调完成流程实例的处理。
流程实例可以被流程实例管理模块加以管理、修改。
3开发帮助
基于新的工作流平台之上的审批流应用,利用UAP的数据引擎、MOM消息发布订阅和消息转发功能来完成审批这一类特殊流程的管理、配置、设计、使用、维护、监视操作。
下图是工作流系统使用流程图:
在上述流程涉及到业务系统开发人员的活动中,服务开发、服务注册、预制业务对象、编写预制运行时活动插件、编写客户端审批提交代码等工作是在业务模块中实现审批功能都可能涉及的动作。
3.1开发与注册服务
本处服务是指业务部门提供能、为了能满足特定业务功能而实现的组件中的方法;这些服务可在流程设计过程中运用于流程模型,体现为流程模型中的自动服务。
3.2服务开发
服务开发无特别约定,服务内部如果需要CallContext、发起人等工作流系统内置变量信息,可以在流程设计过程中,指定变量->服务传入参数的映射方式来获得。
流程模型内置变量:
变量名
类型
说明
ActivityName
string
[活动名称]
StartPerformer
string
[流程发起人工号]
CurrentPerformer
string
[执行者工号]
StartTime
string
[流程发起时间]
ActivityStartTime
string
[活动开始时间]
ActivityDelay
string
[延迟时间]
StartPerformerName
string
[流程发起人姓名]
CurrentPerformerName
string
[执行者姓名]
KeySet
string
[人工活动UNDO接口参数KeySet]
CalledContext
object
[人工活动UNDO接口参数CalledContext]
CallResult
string
[人工活动UNDO接口返回值]
LoginContext
object
[工作流构造LoginContext对象]
3.3服务注册
在工作流模型中,自动活动所调用的服务需要预先注册到MOM服务器上,注册过程如下:
1.如果MOM上没建立所属子产品功能点,则首先建立该子产品功能点;建立方法:
打开MOM集成工具,在集成目录-U8ERP下加入子产品功能点,如下图:
2.在所属子产品功能点的“集成接口”节点上,注册集成接口,如下图:
进入注册集成接口界面后,首先设置集成注册码和集成接口名,集成接口注册吗是用于识别该注册服务的,要求在同一子产品节点下注册码惟一。
然后需要设置服务调用端点(如果是本地调用,需要考虑调用路径问题!
):
设置服务路径时可以使用MOM预置的三个宏变量:
%U8SOFT%表示U8安装目录
%UFCOMSQL%表示ufcomsql目录
%U8APPSRV%表示u8应用服务器
例如:
注册:
D:
\U8SOFT\SA\MyLib.DLL组件,
使用宏变量后应该为:
%U8SOFT%\SA\MyLib.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程序的时候表示为程序集的名
如下图:
服务例代码
3.4人工活动插件开发
插件必须包含如下三个方法,名称可以不同,但参数必须一致
publicinterfaceIAuditPlugin
{
boolUndoAudition(stringprimBizData,stringauditAction,refstringbizdata,objectcalledCtx,refstringerrMsg);
boolDoAudition(stringprimBizData,stringauditAction,refstringbizdata,objectcalledCtx,refstringerrMsg);
boolHandleBizException(stringprimBizData,stringauditAction,refstringhandleResult,refstringbizdata,objectcalledCtx,refstringerrMsg);
}
primBizData:
KeySet
auditAction的取值
///
///审批动作枚举类型
///
[Serializable]
publicenumAuditAction
{
Submit=0,//提交
Agree=1,//同意
Disagree=2,//不同意
Dispatch=3,//转签
Reject=4,//打回
Revocation=5,//撤销
Return=6,//退回
Abandon=7,//弃审
}
Bizdata:
业务需要传出的参数
handleResult:
是否需要重做,取值ReHandle/UnHandle
usingSystem;
usingSystem.Text;
usingUFIDA.U
{
classFinalAuditPlugin:
IAuditPlugin
{
#regionIAuditPlugin成员
publicboolDoAudition(stringprimBizData,stringauditAction,refstringbizdata,objectcalledCtx,refstringerrMsg)
{
LoginServicelogin=newLoginService((CalledContext)calledCtx);
OrderBObo=newOrderBO(login);
AuditArgsauditArg=newAuditArgs();
intid=int.Parse(GetVoucherId(primBizData));
bo.GetData(id);
Orderorder=bo.dataasOrder;
auditArg.Row=-1;
bo.BatchAudit(newAuditArgs[]{auditArg});
returntrue;
//thrownewException("Themethodoroperationisnotimplemented.");
}
privatestringGetVoucherId(stringkeySetData)
{
KeySetDataReaderreader=newKeySetDataReader(keySetData);
returnreader["VoucherId"];
}
privatestringGetVoucherType(stringkeySetData)
{
KeySetDataReaderreader=newKeySetDataReader(keySetData);
returnreader["VoucherType"];
}
privatestringGetVoucherCode(stringkeySetData)
{
KeySetDataReaderreader=newKeySetDataReader(keySetData);
returnreader["VoucherCode"];
}
publicboolHandleBizException(stringprimBizData,stringauditAction,stringcontext,refstringhandleResult,refstringbizdata,objectcalledCtx,refstringerrMsg)
{
thrownewException("Themethodoroperationisnotimplemented.");
}
publicboolUndoAudition(stringprimBizData,stringauditAction,stringcontext,refstringbizdata,objectcalledCtx,refstringerrMsg)
{
LoginServicelogin=newLoginService((CalledContext)calledCtx);
OrderBObo=newOrderBO(login);
AuditArgsauditArg=newAuditArgs();
intid=int.Parse(GetVoucherId(primBizData));
bo.GetData(id);
Orderorder=bo.dataasOrder;
auditArg.Row=-1;
bo.BatchUnAudit(newAuditArgs[]{auditArg});
returntrue;
//thrownewException("Themethodoroperationisnotimplemented.");
}
#endregion
}
}
1.1.2VB插件的开发
OptionExplicit
DimserviceAsPuServiceAdapter
PublicFunctionDoAudition(keyDataAsString,auditActionAsString,ByRefbizDataAsString,calledCtxAsObject,ByReferrMsgAsString)AsBoolean
Setservice=NewPuServiceAdapter
DoAudition=service.VerifyVoucher(keyData,auditAction,context,calledCtx,bizData)
EndFunction
PublicFunctionUndoAudition(keyDataAsString,auditActionAsString,ByRefbizDataAsString,calledCtxAsObject,ByReferrMsgAsString)AsBoolean
Setservice=NewPuServiceAdapter
UndoAudition=service.UnVerifyVoucher(keyData,auditAction,calledCtx,bizData)
EndFunction
PublicFunctionHandleBizException(keyDataAsString,auditActionAsString,ByRefhandleResultAsString,ByRefbizDataAsString,calledCtxAsObject,ByReferrMsgAsString)AsBoolean
HandleBizException=True
DimbizDataObjAsNewBizDataMap
bizDataObj.LoadXMLbizData
IfMsgBox(bizDataObj.Value("Error"),vbRetryCancel)=vbRetryThen
handleResult="ReHandle"
bizDataObj.Value("Action")="Retry"
bizDataObj.Value("Check")="False"
Else
handleResult="UnHandle"
bizDataObj.Value("Action")="Done"
EndIf
bizData=bizDataObj.XML
MsgBox"BizData="&bizData
EndFunction
3.5预制业务对象
业务对象是指审批流程处理的各种类型业务对象(比如:
采购订单、材料出库单、出口订单等)。
新的审批流利用UAP的数据引擎来定义这些业务对象,这样就可以通过修改数据引擎中的业务对象的查询结果来形成不同的业务对象的Schema,从而可以将这些对象的Schema用作流程定义的条件并在流程运行时获取业务对象实例的属性值来进行相应的处理。
3.6UAP数据引擎进行业务对象设计
审批流中用到的是UAP数据引擎中查询结果的数据,具体设计步骤及其与预置数据之间的关系如下:
在数据引擎中添加业务对象
设置业务对象基本属性
为业务对象添加功能
设置业务功能基本属性
为功能添加业务实体关系查询
设置实体关系查询基本属性
为查询添加基础业务实体
为查询添加列。
查询结果中必须包含结果列VoucherId,VoucherCode,VoucherType。
这三列在审批流中是关键业务数据,会在任务项的扩展属性中出现,可以作为任务项显示名称、发送消息模版的数据提供者。
命名必须注意完全匹配(注意大小写)
为查询添加计算结果列
为查询添加查询条件
测试新增业务对象
3.7审批业务对象注册
数据引擎中设计完毕业务对象后,就可提供给审批流系统使用。
使用前,需要先注册审批业务对象(注意:
与数据引擎中所描述的业务对象是两不同概念)。
注册过程使用位于U8SOFT\Workflow目录下的工具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
@cBizObjectIdnvarchar(40),
@cBizEventIdnvarchar(40),
@iYearsmallint,
@cAcc_Idnvarchar(3),
@bControlledbitout
程序接口:
提供给业务产品发起提交的接口
.dll
VB代码
DimoAuditasObject
SetoAudit=CreateObject(“”)
接口
PublicFunctionSubmitApplicationMessage(primBizDataAsString,calledCtxAsCalledContext,ByRefisWFControledAsBoolean,ByReferrMsgAsString)AsBoolean
primBizData:
关键业务数据XML串,XML串的Schema如下
--业务对象id-->
—业务事件-->
--单据号-->
—时间戳-->
—其他插件或服务需要用到的参数,如AuthId-->
calledCtx:
Login中的登陆上下文
isWFControlled:
是否通过了发起条件
errMsg:
错误信息
重载方法2
PublicFunctionSubmitApplicationMessage_2(bizObjectIdAsString,eventidAsString,voucherIdAsString,calledCtxAsCalledContext,ByRefisWFControledAsBoolean,ByReferrMsgAsString)AsBoolean
bizObjectId:
业务对象Id
eventid:
业务事件Id
voucherId:
单据id
示例:
1.VB客户端调用
FunctionSubmitApplicationMessage_2(bizObjectIdAsString,eventIdAsString,voucherIdAsString,calledCtxAsCalledContext,ByRefisWFControledAsBoolean,ByReferrMsgAsString)AsBoolean
'DimloginAsU8Login.clsLogin
'审批服务客户端代理
'DimauditSvcAsNewUFIDA_U8_Audit_ServiceProxy
'Login服务的LoginContext对象
DimcalledCtxAsNewUFSoft_U8_Framework_LoginContext
'业务对象的标识,与与审批预置表(AuditBizObjects)中的业务对象主键相同
DimstrBizObjectIdAsString
'业务事件的标识,与审批预置表(AuditBizEvents)中的业务事件主键相同
DimstrBizEventIdAsString
'单据标识,也就是业务对象的实例标识
DimiVoucherIdAsInteger
DimretAsBoolean
‘是否满足开始条件
DimbControlledAsBoolean
‘错误信息
auditSvc
OnErrorGoToerrHandler:
auditSvc
strBizObjectId="PU88"
strBizEventId="PU88.Submit"
strContext=""
iVoucherId=1
calledCtx.SubId="DP"
calledCtx.TaskID=login.GetTaskID(SubId)