U8开发之工作流集成Word文件下载.docx
《U8开发之工作流集成Word文件下载.docx》由会员分享,可在线阅读,更多相关《U8开发之工作流集成Word文件下载.docx(42页珍藏版)》请在冰豆网上搜索。
对单据内容表示不同意见,流程回退到开始节点
●弃审:
放弃对单据的审批,流程回退,单据处于待审状态
●撤销:
流程完全回退,整个流程实例被撤销,单据回到开立状态
●重新提交:
当流程被退回到开始节点,需要执行重新提交操作,重新发起流程
●审批进程:
以时间先后顺序列示审批过程,包括审批人、审批时间、审批意见、审批动作等
●驳回:
审批不同意并退回给提交人
●转签:
审批人将当前审批任务转给另外一个人完成
●工作任务委托:
审批人可以按单据类型将审批任务委托给别人代为进行,和转签的区别是:
转签针对一张单据,工作任务委托针对一种单据类型的所有单据
●邮件审批:
工作流引擎可以给审批人发送一封邮件,其中包括了待审单据的内容,收件人可以直接在邮件正文或者打开邮件附件完成单据的审批操作
●UTU审批:
工作流引擎可以给UTU发送一条待审消息,审批人可以在UTU中完成审批操作
●快速审批:
在CS和BS的消息中心中,可以不用打开单据,直接根据待审任务完成单据的审批
●自动提醒:
当流程停在某一个审批节点一定时间后,工作流引擎可以给审批人发送消息提醒其尽快审批
●自动转签:
当流程停在某一个审批节点一定时间后,工作流引擎可以将当前审批任务转签给指定的另外一个人
●邮件审批模板:
发送给接收人的审批邮件、审批UTU消息、快速审批任务,附带的单据内容和格式是根据设定的邮件审批模板确定的
2)流程设置
●本人逐级弃审:
不能弃审掉别人对单据做的审批,并且弃审的时候不能选择弃审到的节点,必须由审核人自己弃审。
●必须制单人提交:
提交人和制单人必须是同一个人
●判断用户数据权限:
在审核、弃审、撤销的时候,系统会判断当前操作人对前面已经完成审批的的人员的“用户”类别数据权限,这个数据权限可以在系统里的“数据权限控制”中的“记录级权限”中设置
●流程发起规则:
针对一种单据可以定义多个流程模型,在“提交”时,每张单据用数据配置流程发起规则,单据最终按照匹配成功的流程模型走流程。
●审批中修改控制:
执行单据审批时可以修改单据的某个字段,配置时以单据的字段级权限为基础
●邮件审批发送表头附件:
发送待审邮件的时候是否将单据上的表头附件一起发出
3.目标
本文主要介绍工作流的基本概念、使用方法、二次开发方法,主要面向二次开发人员。
4.开发指南
4.1.工作流二次开发流程图
在上述流程涉及到业务系统开发人员的活动中,服务开发、服务注册、预制业务对象、编写预制运行时活动插件、编写客户端审批提交代码等工作是在业务模块中实现审批功能都可能涉及的动作。
4.2.服务开发
本处服务是指业务部门提供能、为了能满足特定业务功能而实现的组件中的方法;
这些服务可在流程设计过程中运用于流程模型,体现为流程模型中的自动服务。
服务开发无特别约定,服务内部如果需要CallContext、发起人等工作流系统内置变量信息,可以在流程设计过程中,指定变量->服务传入参数的映射方式来获得。
流程模型内置变量:
变量名
类型
说明
ActivityName
string
[活动名称]
StartPerformer
[流程发起人工号]
CurrentPerformer
[执行者工号]
StartTime
[流程发起时间]
ActivityStartTime
[活动开始时间]
ActivityDelay
[延迟时间]
StartPerformerName
[流程发起人姓名]
CurrentPerformerName
[执行者姓名]
KeySet
[人工活动UNDO接口参数KeySet]
CalledContext
object
[人工活动UNDO接口参数CalledContext]
CallResult
[人工活动UNDO接口返回值]
LoginContext
[工作流构造LoginContext对象]
在工作流模型中,自动活动所调用的服务需要预先注册到MOM上,注册过程如下:
1)如果MOM上没建立所属子产品功能点,则首先建立该子产品功能点;
建立方法:
打开U8API资源管理器,在U8WorkFlow下注册子分类目录,如下图:
2)在所属子产品功能点的“服务接口”节点上,注册服务接口,如下图:
进入注册服务接口界面后,首先设置服务接口编码和服务接口名,服务接口编码是用于识别该注册服务的,要求在同一子产品节点下编码惟一。
然后需要设置服务接口定义/描述(如果是.NET组件,需要考虑调用路径问题!
):
MSDCOM(1.0)注册
DotNetAssemblyForRPC组件注册
MSDCOM(RPC)注册
设置服务路径时可以使用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"
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程序的时候表示为程序集的名
如下图:
服务例代码
4.3.人工活动插件开发
插件必须包含如下三个方法,名称可以不同,但参数必须一致
接口:
publicinterfaceIAuditPlugin
{
boolUndoAudition(stringprimBizData,stringauditAction,refstringbizdata,objectcalledCtx,refstringerrMsg);
boolDoAudition(stringprimBizData,stringauditAction,refstringbizdata,objectcalledCtx,refstringerrMsg);
boolHandleBizException(stringprimBizData,stringauditAction,refstringhandleResult,refstringbizdata,objectcalledCtx,refstringerrMsg);
}
primBizData:
参数:
auditAction的取值
///<
summary>
///审批动作枚举类型
///<
/summary>
[Serializable]
publicenumAuditAction
Submit=0,//提交
Agree=1,//同意
Disagree=2,//不同意
Dispatch=3,//转签
Reject=4,//打回
Revocation=5,//撤销
Return=6,//退回
Abandon=7,//弃审
Bizdata:
业务需要传出的参数
handleResult:
是否需要重做,取值ReHandle/UnHandle
C#插件代码示例
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingUFSoft.U8.Framework.LoginContext;
usingUFIDA.U8.Audit.Interface;
usingUFSoft.U8.EX.Common;
usingUFSoft.U8.EX.Common.Args;
usingUFSoft.U8.EX.Server.BusinessObject;
usingUFSoft.U8.EX.Framework.DataModel;
namespaceUFSoft.U8.EX.CreditPlugins
{
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.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(newAuditArgs[]{auditArg});
returntrue;
//thrownewException("
Themethodoroperationisnotimplemented."
);
privatestringGetVoucherId(stringkeySetData)
KeySetDataReaderreader=newKeySetDataReader(keySetData);
returnreader["
VoucherId"
];
privatestringGetVoucherType(stringkeySetData)
VoucherType"
privatestringGetVoucherCode(stringkeySetData)
VoucherCode"
publicboolHandleBizException(stringprimBizData,stringauditAction,stringcontext,refstringhandleResult,refstringbizdata,objectcalledCtx,refstringerrMsg)
thrownewException("
publicboolUndoAudition(stringprimBizData,stringauditAction,stringcontext,refstringbizdata,objectcalledCtx,refstringerrMsg)
Orderorder=bo.dataasOrder;
bo.BatchUnAudit(newAuditArgs[]{auditArg});
//
#endregion
}
VB插件代码示例:
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
UndoAudition=service.UnVerifyVoucher(keyData,auditAction,calledCtx,bizData)
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"
Check"
False"
Else
UnHandle"
Done"
EndIf
bizData=bizDataObj.XML
MsgBox"
BizData="
&
bizData
4.4.预置业务对象
业务对象是指审批流程处理的各种类型业务对象(比如:
采购订单、材料出库单、出口订单等)。
新的审批流利用UAP的数据引擎来定义这些业务对象,这样就可以通过修改数据引擎中的业务对象的查询结果来形成不同的业务对象的Schema,从而可以将这些对象的Schema用作流程定义的条件并在流程运行时获取业务对象实例的属性值来进行相应的处理。
4.4.1.UAP数据引擎进行业务对象设计
审批流中用到的是UAP数据引擎中查询结果的数据,具体设计步骤及其与预置数据之间的关系如下:
在数据引擎中添加业务对象
设置业务对象基本属性
为业务对象添加功能
设置业务功能基本属性
为功能添加业务实体关系查询
设置实体关系查询基本属性
为查询添加基础业务实体
为查询添加列。
查询结果中必须包含结果列VoucherId,Vouch