NCV5-流程平台技术红皮书(10)

2020-03-29 19:26

注意:如果NC中间件管理了多个帐套,则它们共享统一的动作脚本。

3.1 执行脚本编写

在脚本里可以对从UI端传递过来的单据聚合VO进行业务处理,这其中就包含有对审批流的处理。[单据动作执行脚本]功能点为方便执行脚本的编写,提供了单据类型注册的应用函数以及常用语法宏。

在开发环境中,我们一般把通过功能点生成的诸如N_40_APPROVE.java动作脚本源文件导入到项目中进行开发。但如果直接对源文件进行修改,记得要修改相应的getCodeRemark()方法,否则通过功能节点打开时,将会看到不一致的脚本。

下面对单据动作脚本中与审批流相关的常用语法宏进行分析。当然,完全可以不使用下述的语法宏而直接使用Java标准语法来编写动作执行脚本。

动作脚本类图:

nc.bs.pub.compiler.IPfRunAbstractCompilerAbstractCompiler2nc.bs.pub.action.N_88_SAVEN_30_APPROVE>>>

常用语法:

第 43 页

语法宏与实际代码的对照表: 单据动作处理 语法宏 setParameter(\setParameter(\setParameter(\setParameter(\setParameter(\setParameter(\runClassCom@\&PFBILLTYPE:String,&PFDATE:String,&PFFLOW:nc.vo.pub.pf.PfUtilWorkFlowVO, &PFVO:nc.vo.pub.AggregatedValueObject, &PFUSEROBJ:Object\@; runClass(\&PFBILLTYPE:String,&PFDATE:String,&PFFLOW:nc.vo.pub.pf.PfUtilWorkFlowVO, &PFVO:nc.vo.pub.AggregatedValueObject, &PFUSEROBJ:Object\if (retObj != null) { m_methodReturnHas.put(\} 单据动作批处理 setParameter(\setParameter(\setParameter(\setParameter(\setParameter(\setParameter(\runClassCom@\&PFBILLTYPE:String,&PFDATE:String,&PFVOS:nc.vo.pub.AggregatedValueObject[], &PFUSEROBJS:Object[],&PFFLOW:nc.vo.pub.pf.PfUtilWorkFlowVO\@; runClass(\&PFBILLTYPE:String,&PFDATE:String,&PFVOS:nc.vo.pub.AggregatedValueObject[], &PFUSEROBJS:Object[],&PFFLOW:nc.vo.pub.pf.PfUtilWorkFlowVO\vo,m_keyHas,m_methodReturnHas); if (retObj != null) { m_methodReturnHas.put(\ 审procActionFlow@@; 批处Object m_sysflowObj= procActionFlow(vo); 理 //###返回值:流程仍处于审批进行中时直接返回IWorkFlowRet if (m_sysflowObj!=null){ return m_sysflowObj; } 批审Hashtable m_sysHasNoPassAndGonging= procFlowBacth@@; 第 44 页

批Hashtable m_sysHasNoPassAndGonging= procFlowBacth(vo) ; 处理 弃procUnApproveFlow@@; 审处boolean isFinishToGoing = procUnApproveFlow(vo); 理 //###返回值:true-审批流程由完成态返回到运行态;false-其他情况 批弃审处理 procUnFlowBatch@@; for (int i = 0; i < getVos().length; i++) { setVo(getVos()[i]); boolean isFinishToGoing = procUnApproveFlow(vo); //###返回值:true-审批流程由完成态返回到运行态;false-其他情况 }

注意:单据批动作处理必须与批量的动作脚本相对应!

3.2 返回值

流程平台对某些动作脚本执行后的返回值具有特殊的要求,单据动作调用会对其进行特殊的处理。 返回对象 IWorkFlowRet Object[]数组 ArrayList String PfUtilActionVO IProcActionRetObject 取值 第一个元素为IWorkflowBatch对象 单据Id 说明 一般用于审批的动作脚本,且在流程审批进行中时才返回该对象。 一般用于批动作处理的动作脚本。 一般用于送审SAVE或EDIT的动作脚本,以便从返回值中获得单据Id。 UI端PfUtilClient动作处理完后显示UI界面(DLG或PNL) UI端PfUtilClient会执行业务组的前台动作执行后处理 第 45 页

4. 审批流平台

4.1 审批状态回写与查询 4.1.1状态回写

分为两种,一种是对单据聚合VO的回写;一种是对单据数据库表的回写,是在审批流检查类中完成。参见4.6.1节。

4.1.2状态查询

后台API:

int nc.bs.pub.pf.PfUtilBO.queryWorkFlowStatus( String busiType, //业务类型PK String billType, //单据类型PK String billId) //单据Id

返回值: 常量 IWorkFlowStatus.NOT_STARTED_IN_WORKFLOW IWorkFlowStatus.WORKFLOW_ON_PROCESS IWorkFlowStatus.WORKFLOW_FINISHED IWorkFlowStatus.BILLTYPE_NO_WORKFLOW IWorkFlowStatus.BILL_NOT_IN_WORKFLOW IWorkFlowStatus.ABNORMAL_WORKFLOW_STATUS 对应的内部状态 IPfRetCheckInfo.COMMIT IPfRetCheckInfo.GOINGON IPfRetCheckInfo.PASSING IPfRetBackCheckInfo.NOSTATE IWorkFlowStatus.NOT_APPROVED_IN_WORKFLOW IPfRetCheckInfo.NOPASS

4.2 送审

送审也称为提交,就是单据产生后进入到流程平台并启动审批流的步骤,通过调用单据动作处理来完成。审批流的触发支持两种单据动作,分别为“SAVE”和“EDIT”,即动作编码以两者结尾即可。送审后,流程平台会根据单据类型和制单人ID查找符合条件的流程定义并实例化然后启动它。如果找不到流程定义,则不启动审批流。

送审分为两种情形,一种是前台送审,即业务UI新增单据后保存并提交;另一种是后台送审,即某张单据在后台推式生成另一张单据时。

第 46 页

4.2.1动作处理

前台送审调用示例:

Object retObj = nc.ui.pub.pf.PfUtilClient.processAction(parentUI, “SAVE”, “D1”, “2005-05-30 12:23:44”, billVo, userObj, null, null )

如果单据数据billVo中没有保存制单人的信息,则可通过动作编码来传递。但要求原动作编码不能长于20个字符。

Object retObj = nc.ui.pub.pf.PfUtilClient.processAction(parentUI, “SAVE”+billMakerUserId, “D1”, “2005-05-30 12:23:44”, billVo, userObj, null, null )

后台送审调用示例:

Object retObj = new PfUtilBO().processAction(

“SAVE”, “D1”, “2005-05-30 12:23:44”, null, billVo, userObj )

前台送审与后台送审的区别在于,前台送审会先向服务器获取流程定义中第一个审批人的可指派信息,以便于与客户端交互。而后台送审则默认为不可指派。

对于单张单据的送审,也可以按照批量的方式来处理(这种应用在NC财务和供应链产品中比较常见),这时VO数组中传递的就是一张单据。

4.2.2动作脚本

送审的动作脚本没有特殊的要求,可以在脚本中进行单据VO的保存,也可以对单据VO进行更新。但如果单据UI的开发使用了UI工厂,为了维护单据数据的一致性,可在脚本中调用如下方法来保存单据并更新聚合VO。

retObj=runClass(\\

或者

SuperVO headVO = (SuperVO) billVo.getParentVO(); //主表必须为SuperVO SuperDMO dmo = new SuperDMO();

//从数据库获取到更新了ts的VO

billVo.setParentVO(dmo.queryByPrimaryKey(headVO.getClass(), headVO.getPrimaryKey()));

注意:NC30要求送审的动作脚本必须返回ArrayList或String类型的对象,在NC31中并没有这种限制了,但前提是单据聚合VO中包含有完整的单据号和单据ID信息。

第 47 页


NCV5-流程平台技术红皮书(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:课题评审评分标准及课题意见表 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: