ncv5-流程平台技术红皮书_第1页
ncv5-流程平台技术红皮书_第2页
ncv5-流程平台技术红皮书_第3页
ncv5-流程平台技术红皮书_第4页
ncv5-流程平台技术红皮书_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

此文件受到UFIDA的保护,并已在保护中心,外泄必纠NC-UAPUAP 第一 工作流与 信息系统的演 企业业务流 工作 第二 流程平 单据元模 单据类 单据动作及单据函 单据 单据项 单据VO对 业务流平 业务类 流程配 单据VO交 流平 流程定 工作 流程结果与单据状 反向流 流程第三 开发规 平台缓存数 动作处 UI端调用- BS端调 返回 动作............................................................................................执行编 返回 流平 状态回写与查 送 弃 删 流相关接 业务流平 动作驱 单据VO交 单据UI菜单填充与响 业务流相关接 第四 开发流 附 NC5.0服 应用模 发 接 第一章工作流与OperatingOperatingOperating11975-19851985-19951995-20021998-2005企业业务流2工作Theautomationofabusinessprocess,inwholeorpart,duringwhichs,informationortasksarepassedfromoneparticipanttoanotherforaction,accordingtoasetofproceduralrules(WFMC).工作流管理系统(WorkflowManagementSystem,WFMS)的主要功能是通过计算机技业务过程管理(Businessprocessmanagement),非企业绩效管理(BusinessPerformanceManagement)。包括了过程建模、过程自动化、企业应用集成、业务活动监第二章流程平(EPC、Petri网、语义-行为模型等)比较,活动网络图具有直观自然、可读性好的特性。BusinessFlowApprovalFlowInvokedBusinessFlowApprovalFlowInvokedProcessAdministration&ExchangeDataWorkRuleWorkflowWeb3整个业务流程框架的是工作流引擎。它负责解释执行由业务流设计器和流设计器设计的流程定义。流程定义可以NC系统建立的功能模型、组织模型以及各种元数交、、弃审、驳回等)来处理工作项,从而驱动流程流转。工作流引擎在流转过程中 NCVOUI、单据动单据函单据VO对单据单据项单据VO模单据物理模(数据库表4单据类时,单据类型必须属于某个系统类型。单据类型的信息比较多,由功能点[客户化]-[二5节参照查询对应的DMO类:用于查询单据VO数据的业务逻辑类。必须实现接口流检查类:通过编写流检查类,并在该类中实现流相关接口,来达到使用还需要实现节点查找接口(4.6节。系统类开发工具]-[会计平台]-[系统类型定义],如图6所示。6模块名:标识该系统所属的产品模块。对应于NC_HOME/modules/下 名主子关系系统类 F1F1F2F27单据动作及[客户化]-[二次开发工具]-[单据管理]-[单据动作管理],如图8所示。820个英文字符。的框,如:是否保存?91.2.1单据动作10单据函 11单据函数(组件)它不可应用于条件、动作约束、工作项配置中。1.3.1参数格单据单据的界面展现模型,包括四大模板以及UI工厂等。每个单据还与一个它的功能单据项12多语资源IDID单据VO对应关系。由功能点[客户化]-[二次开发工具]-[单据管理]-[单据VO对照管理],如图6所13VOVOVOVOVOVOID:单据VOIDNC业务流平台进行了简化,其设计思想是基于以下认识:业务流程是由单据组成的,实现。NC业务流提供一种平台机制,在此可以根据用户的实际业务重新组织这些单据、动14业务类对业务流程的分类。各个公司可定义自己的业务流程,5.0支持业务类型,即在集1515流程配16成(VO交换。勾选此项,在流程配置中才可配置该单据的来源单据,否单据权限配17单据来源配据,可以在业务流程中为当前单据提供业务数据(VO交换,以保持业务数据的18动作约束配19图20动作定动作驱动配21(1.2节。单据VO交存,比如“nc.ui.pf.changedirCHG21TO30”、“nc.bs.pf.changedir.CHG21TO30”等。单据VO交换可发生后或,并在交换后可进行特殊的业务处理。详细见第三章5.222用于显示来源单据的UI类:参照来源单据时,使用的来源单据显示UI。默认为“nc.ui.pub.pf.BillSourceDLG<c.ui.po.pb.ooiQeDG>用于查询来源单据的节点标识:被参照的来源单据的Nodekey23Join(Priority(Subflow流程定NC5.0的流定义模型遵循WfMC的XPDL1.0过程定义规范,具有严格的语义和丰图24流定义-浏图25流定义-设流定义按照单据类型(+业务类型)进行了分类。用户可以基于单据类型定义流程模过程活动流程中的一个个步骤统称为活动(或任务,包括制单活动、活动、虚活动、参与者展机制可参考附录)。第一个拖放到流设计器中的组织元素为制单活动的参与者。在转移节)动才能结束。抢占:只要活动的参与者中任何一人完成后,该活动即结束。活动的一个属性。如果活动定义了可指派属性,则该活动的实际执行者人活动的一个属性。制单活动不可设置人;只可为参与者为『操作员』类型的活动设置多级人;人只可为『操作员。消息配置(Message活动的一个属性。可为每个活动配置额外的消息通知机制。即在满足触发条件。对于活动,发送条件可为“无条件“审核通过”和“审核不通过”三种(注:“paravo==当前单据的流参数参数VO可直接的变量列表支持Java语法。比如:当前单据VO当前步骤的批增删据类型(+业务类型就可为其新增一个流程。一个单据类型(+业务类型)下不能存在两个同制单人的流程。导入/导在流定义-浏览界面,选中某个流程,可导出为本地XPDL文本文件XPDL时,提示“导入的XPDL文件中含有对N?流程定义的选工作分配策务。参与者出差后,工作项将会分配到人。动态人设置。图26用户出差和动态人管标题定27流程结果与单据状对于流程来说,流程实例正常结束后,必然会有一个结果。而单据的状工作项的结即登录到NC系统的操作员对流程平台分配给他的工作项的处理意见。包括“批活动的结对于角色/岗位类的参与者执行的活动,如果是会签属性,则只有所有会签操作员 流程的结的结果。5种:表1单据状- 32105种状态相。比如UI模式化开发包中就定义了的单据状态。2832104567。如果流程实例正常运行完成,该单据的过程即完成流程结束后具有最终结果:通过或不通过,这也是单据的最终结果。。11提交278自由进行564完成3提交即通第一个人弃不通过,则给参与流程的所有人员发送“不通过”消息。反向流会重新产生工作项;若是其他人修单(更改了制单人),如果找到流定义,则新启实弃审 弃审会将单据置为自由态。修单后再提交,会新启实例,旧实例被删除。必须在单据流程对于系统中运行的流程实例,可它们现在所处的状态,并强制终止。同时还可查询到某单据的状态。当前操作员可查询的记录受查询权限(由[流用图28单据情况查图29流程图与情式直接对单据进行,以及其他的业务处理。流运转过程中会为流程中的不同用户产生工作项这些任务项可以通过方式发(可配置是否需要这样发送回复-pN或“N不同意,金额过大”的指令,NC系统会调用插件进行的处理。消息中展 消息栏30UITable展现。除了UITable内置的定位功能和双击表头排序功能,还3132按照模糊匹配33消息类公告消息——可由任何人看到的消息分为所有用户可见和用户可见两种。通知消息——不需要业务处理的普通消息流消息配置产生的消息以及业务代码产第三章开发规平台缓存数和 ache类的Javadoc文档前台缓存基本表bd_bdinfo的缓存,获取方法BasedocVOStringstrPk)//单据类型对照信息表pub_billtobillrefer的缓存,获取方法BilltobillreferVOStringcurrentBillType,//String 单据VO对照表pub_votable的缓存,获取方法Stringnc.ui.pf.pub.PfUID StringbillType)//PK单据类型表bd_billtype的缓存,获取方法BilltypeVOnc.ui.pf.pub.PfUID StringbillType)//PK币种信息表bd_currtype的缓存,获取方法CurrtypeVOStringstrPk)//缓存单据类型参照信息表pub_billtobillrefer的缓存,获取方法BilltobillreferVOString StringsourceBillType//单据VO对照表pub_votable的缓存,获取方法VotableVOStringpk_billType,//booleanisMain, StringitemCode) //废弃参数单据类型表bd_billtype的缓存,获取方法BilltypeVOStringdataSource//String 动作处业务

Object

判断是否进行动作前

非SAVE执行动

SAVE

retObj实现了则获取动作执行后的处理类,并执

上述过程的异常类型为且需要处理,则再次进行处retObj实现了则前台显图34非类动作处图35类动作处UI端调用-单据动作处理(非ObjectObjectnc.ui.pub.pf.PfUtilCcessAction(Containerparent,StringactionName,StringbillType,StringcurrentDate,AggregatedValueObjectvo,ObjectuserObj,StringstrBeforeUIClass,AggregatedValueObjectcheckVo)throwsSVE)执行动作处理-PfUtilBO.processAction(…)IPfRetException,则判断异常是否需要进行SAVE单据动作处理,但不启动ObjectObjectnc.ui.pub.pf.PfUtilCcessActionNoSendMessage(Containerparent,StringactionName,StringbillType,StringcurrentDate,AggregatedValueObjectvo,ObjectuserObj,StringstrBeforeUIClass,AggregatedValueObjectcheckVo)throwsIPfRetException,则判断异常是否需要进行SAVEEDIT单据动作处理ObjectObjectnc.ui.pub.pf.PfUtilCcessActionFlow(Containerparent,StringactionName,StringbillType,StringcurrentDate,AggregatedValueObjectvo,ObjectuserObj,String)throws如果单据动作以"APPROVE"开头,检查该单据是否处于流中并打开执行动作处理-PfUtilBO.processAction(…)IPfRetException,则判断异常是否需要进行APPROVE单据动作批处理(非Object[]Object[]nc.ui.pub.pf.PfUtilCcessBatch(Containerparent,StringactionName,StringbillType,StringcurrentDate,AggregatedValueObject[]voAry,Object[]userObjAry,String)throws执行动作处理-PfUtilBO.processBatch(…)IPfRetException,则判断是否需要进行业务SAVE单据动作批处理StringactionName,StringbillType,StringcurrentDate,AggregatedValueObject[]Object[]如果单据动作以"APPROVE"开头,检查第一张单据是否可被当前操作员并打执行批动作处理-PfUtilBO.processBatch(…)IPfRetException,则判断异常是否需要进行SAVEBS端调PfUtilBO5.0IPFBusiAction。开发人PfUtilBOIPFBusiAction组件后调用。ObjectObjectnc.bs.pub.pf.PfUtilBO.processAction(StringactionName,StringbillType,StringcurrentDate,PfUtilWorkFlowVOworkFlow,AggregatedValueObjectvo,ObjectuserObj)throwsSAVESAVEObject[]Object[]nc.bs.pub.pf.PfUtilBO.processBatch(StringactionName,StringbillType,StringcurrentDate,AggregatedValueObject[]vos,Object[]userObjAry,PfUtilWorkFlowVOworkflow)throwsVO数组,进行动作执行前的工作流处理(弃审或删除)以及动作约束进行动作执行后的工作流处理(依次启动流。SAVE返回BSPfUtilBO.processAction(…)PfUtilBO.processBatch(…)的返回值受动作返回值(参见3.2节)的影响。动作动作是单据动作的执行体。在流程配置中还可对某业务类型下的单据动作脚本进行再次定制(参见第二章2.2.4节。保存时会自动生成class文件。注意:如果NC中间件管理了多个帐套,则它们共享统一的动作执行编在里可以对从UI端传递过来的单据聚合VO进行业务处理,这其中就包含有对审批流的处理[单据动作执行]功能点为方便执行的编写,提供了单据类型的件导入到项目中进行开发。但如果直接对源文件进行修改,记得要修改相应的述的语法宏而直接使用Java标准语法来编写动作执行。动作类图&PFVO:nc.vo.pub.AggregatedValueObject,&PFUSEROBJ:Object"@;if(retObj!=null){}单据动作批处 if(retObj!=null){m_methodReturnHas.put("processBatch",retObj);}审批处Objectm_sysflowObj理//###返回值:流程仍处于 进行中时直接返回IWorkFlowRetif(m_sysflowObj!=null){returnm_sysflowObj;批Hashtablem_sysHasNoPassAndGonging审批Hashtablem_sysHasNoPassAndGonging=procFlowBacth(vo处理弃审处booleanisFinishToGoing理//###返回值 批弃审for(inti0igetVos().lengthi++ booleanisFinishToGoing= }返回一般用于的动作,且在流第一个元素SAVEEDIT的动作t 状态回写与查状态回4.6.1节。状态查API:intintnc.bs.pub.pf.PfUtilBO.queryWorkFlowStatus(StringbusiType,//PKStringbillType//String 送“EDIT码以两者结尾即可。送审后,流程平台会根据单据类型和制单人ID查找符合条件的流程定义并实例化然后启动它。如果找不到流程定义,则不启动流。送审分为两种情形,一种是前台送审,即业务UI新增单据后保存并提交;另一种是后台送审,即某张单据在推式生成另一张单据时。动作处ObjectObjectretObj=“SAVE”,“D1”,“2005-05-3012:23:44”,billVo,userObj,null,nullObjectretObj=userObj,null,nullObjectretObj=userObj,null,null ObjectObjectretObj=new“SAVE”,“D1”,“2005-05-3012:23:44”,null,billVo,userObj前台送审与送审的区别在于前台送审会先向服务器获取流程定义中第一个人的可比较常见VO数组中传递的就是一张单据。动作retObj=runClass("nc.bs.trade.business.HYPubBO","commitBill",送审的动作没有特殊的要求,可以在中进行单据VO的保存,也可以对单据VO进行更新。但如果单据UI的开发使用了UI工厂,为了单据数据的一致性,可在脚VO。retObj=runClass("nc.bs.trade.business.HYPubBO","commitBill",SuperVOSuperVOheadVO(SuperVObillVo.getParentVO()//SuperVOSuperDMOdmo=newSuperDMO();//tsVO注意:NC30要求送审的动作必须返回ArrayList或String类型的对象,在NC31中并没有这种限制了,但前提是单据聚合VO中包含有完整的单据号和单据ID信息。批量处ObjectObjectretObj=“SAVE”,“D1”,“2005-05-3012:23:44”,billVoAry,userObjAry,ObjectObjectretObj=new“SAVE”,“D1”,“2005-05-3012:23:44”,billVoAry,userObjAry,特殊应;对于保存/提交分离的应用,制单人保存后,由业务组控制非制单人可否提交单据流会根据单据VO中的制单人信息来获取流定义并启动流。;如果业务组没有控制单据进行中的不可编辑那么单据在过程中可被修改,然后再次提交,这时执行完动作后,单据完成后(即流程结束后再次修改该单据并提交,这时会重新启动一个流程,同时保留了原已结束流程所产生的工作项记录。工作项的结果与流程结果的异同,参见第二章3.3节。个尚未提交的单据进行,会提示“单据尚未提交,无法”的错误。工作项,并不属于真正意义上的流程,的是进行业务处理。。根据业务需求,还分为两种情形,一种是前台,即业务UI查询到单据后进行或者通过待办事务来;另一种是,会将单据直接通过只适。动作处前台调用示例ObjectObjectretObj=“APPROVE”,“D1”,“2005-05-3012:23:44”,billVo,userObj,ObjectObjectretObj=“APPROVE”+checkUserId,“D1”,“2005-05-3012:23:44”,billVo,ObjectObjectretObj=new“APPROVE”,“D1”,“2005-05-3012:23:44”,null,billVo,userObj”比较常见VO数组中传递的就是一张单据。动作两种:每个工作项的通过和整个流程的通过)后进行业务处理。单张单据动作示例ObjectObjectm_sysflowObj=/**流程仍处于 进行中时直接返回IWorkFlowRet*/if(m_sysflowObj!=null){returnm_sysflowObj;doBusi(getVo 如果单据UI的开发使用了UI工厂,为了单据数据的一致性,需要在中调用如下VO。SuperVOSuperVOheadVO(SuperVObillVo.getParentVO()//SuperVOSuperDMOdmo=newSuperDMO();//NC5.0BaseDAO?//tsVO批量处证当前操作员对这些单据都具有权限(即都轮到他。=ObjectObjectretObj=new“APPROVE”,“D1”,“2005-05-3012:23:44”,billVoAry,userObjAry, HashtableHashtablem_sysHasNoPassAndGonging=procFlowBacth(vo);for(inti=0;i<getVos().length;i++){Objectobj=m_sysHasNoPassAndGonging.get(String.valueOf(i));if(obj==null)doBusi(getVos()[i]) }BatchWorkflowRetbwr=newBatchWorkflowRet();returnnewObject[]{bwr};//动 返回返回值BatchWorkflowRet实现了接口 参见3.2节。特殊应对于无流程实例的,由于没有流程实例和工作项,直接将单据通过驳回是NC31流支持的两种流程反向流转模式之一,它不受流程定义的局限,直接弃弃审是流支持的两种流程反向流转模式之一是指当前人通过或不通过)完成之后,在下一个人尚未之前,可以主动弃审,让自己重新。当前操作员只有拥有该单据的弃审权限才可进行弃审,这由流平台控制。nc.vo.pub.pf.IPfBackCheck2的弃审模式。只有流程结束后,才可一弃到底,即不允许进行中的一弃到底。动作处ObjectObjectretObj=“UNAPPROVE”,“D1”,“2005-05-3012:23:44”,billVo,userObj,ObjectObjectretObj=“UNAPPROVE”,“D1”,“2005-05-3012:23:44”,billVo,userObj,ObjectObjectretObj=“UNAPPROVE”+unCheckUserId,“D1”,“2005-05-3012:23:44”,billVo,ObjectObjectretObj=new“UNAPPROVE”,“D1”,“2005-05-3012:23:44”,null,billVo,userObj比较常见VO数组中传递的就是一张单据。动作在弃审中可对单据VO进行更新操作也可在流程从完成态回到运行态时进行业务booleanbooleanisFinishToGoing= if(isFinishToGoing)doBusi(getVo//}; doBusi(getVo//如果单据UI的开发使用了UI工厂,为了单据数据的一致性,需要在中调用如下VO。SuperVOSuperVOheadVO(SuperVObillVo.getParentVO()//SuperVOSuperDMOdmo=newSuperDMO();//tsVO批量处forfor(inti=0;i<getVos().length;i++)booleanisFinishToGoing= ifdoBusi(getVo//}for(inti=0;i<for(inti=0;i<getVos().length;i++){setVo(getVos()[i]);//VOprocUnApproveFlow(paravo)//只是回写单据状态为自由态 doBusi(getVo//}删对于不走流的单据删除操作完全由业务组控制——既可以调用流程平台的动作处用删除动作处理,以便于删除流相关数据。目前支持的动作编码包括以“DELETE动作处动作据在进行中不可删除所以在删除动作中只需对单据数据库表进行删除处理,并批量处流相关接publicinterfaceICheckState booleancheckGoing(StringbillId,StringStringApproveDate,StringcheckNote)throws 不通过booleancheckNoPasspublicinterfaceICheckState booleancheckGoing(StringbillId,StringStringApproveDate,StringcheckNote)throws 不通过booleancheckNoPass(StringbillId,StringApproveId,StringApproveDate,StringcheckNote)throwsException; 通过booleancheckPass(StringbillId,StringStringApproveDate,StringcheckNote)throws}单据状态回写接口2,用于操作,由流检查类实现publicpublicinterfaceICheckState2 booleancheckGoing(StringtableName,StringpkFieldName,StringbillId,StringApproveId,StringApproveDate,StringcheckNote)throws 不通过booleancheckNoPass(StringtableName,StringpkFieldName,StringbillId,StringApproveId,StringApproveDate,StringcheckNote)throwsException; 通过booleancheckPass(StringtableName,StringpkFieldName,StringbillId,StringApproveId,StringApproveDate,StringcheckNote)throwsException;}单据状态回写接口3,用于操作,由流检查类实现publicpublicinterfaceICheckState3 booleancheckGoing(AggregatedValueObjectvo,StringApproveId,StringApproveDate,StringcheckNote)throwsException; 不通过booleancheckNoPass(AggregatedValueObjectvo,StringApproveId,StringApproveDate,StringcheckNote)throwsException; 通过booleancheckPass(AggregatedValueObjectvo,StringApproveId,StringApproveDate,StringcheckNote)throwsException;}publicinterfaceIBackCheckState/**弃审为单 进行中voidbackGoing(StringbillId,StringapproveId,StringapproveDate,StringbackNote)throwsException;voidbackNoState(StringbillId,StringapproveId,StringapproveDate,StringbackNote)throwsException;}publicinterfaceIBackCheckState/**弃审为单 进行中voidbackGoing(StringbillId,StringapproveId,StringapproveDate,StringbackNote)throwsException;voidbackNoState(StringbillId,StringapproveId,StringapproveDate,StringbackNote)throwsException;}单据状态回写接口5,用于弃审操作,由流检查类实现publicpublicinterfaceIBackCheckState2/**弃审为单 进行中voidbackGoing(StringtableName,String /**voidbackNoState(StringtableName,StringpkFieldName,billId,StringapproveId,StringapproveDate,StringbackNote)单据状态回写接口6,用于弃审操作,由流检查类实现publicpublicinterfaceIBackCheckState3/**弃审为单 voidbackGoing(AggregatedValueObjectvo,StringapproveId,StringapproveDate,StringbackNote)throwsException;voidbackNoState(AggregatedValueObjectvo,StringapproveId,StringapproveDate,StringbackNote)throwsException;}publicinterfaceIPfRetCheckInfovoidsetCheckNote(StringstrCheckNote);//回写批语voidsetCheckState(inticheckState);//回 }单据状态回写接口7,用于向单据VO中回写信息。被单据的publicinterfaceIPfRetCheckInfovoidsetCheckNote(StringstrCheckNote);//回写批语voidsetCheckState(inticheckState);//回 }单据状态回写接口8,用于向单据VO中回写信息。被单据的弃审动作调用,由单据聚合VO实现。如果需要向单据数据库表中回写这些信息,需要使用流检查类来nc.bs.pub.pf.IBackCheckState等接口。publicpublicinterfaceIPfRetBackCheckInfovoidsetCheckMan(Stringapproveid);//设置弃审后的前一 voidsetCheckNote(StringstrCheckNote);//voidsetCheckState(inticheckState);//设置弃审后的状态(进行中或自由态}publicinterfaceIGetBusiDataForFlow{UFDoublegetPfAssMoney();//返回辅币金额StringgetPfCurrency();//原币币种publicinterfaceIGetBusiDataForFlow{UFDoublegetPfAssMoney();//返回辅币金额StringgetPfCurrency();//原币币种UFDoublegetPfLocalMoney();//返回本币金额UFDoublegetPfMoney();//返回原币金额}弃审模式接publicinterfaceIPfBackCheck2publicinterfaceIPfBackCheck2}UI关联接每个单据类型都可与具体的功能节点关联起来,这在bd_billtype.nodecode和UI关联接口ILinkApprove和ILinkMaintain。publicpublicinterfacevoiddoApproveAction(ILinkApproveDataapprovedata);//初始化单据关联的功能节点UI}publicpublicinterfacetainAction(ILinkMaintainDatamaintaindata);//}publicpublicinterfaceIUINodecodeSearcherStringfindNodecode(ILinkQueryDatalqd)//}流用户管理中增加查询权限处理——如果勾选了查询权限,则能随意查看任何人的情况数据;如果未勾选,则只能查看自己提交和的单据。publicinterfaceISpecFlowQuery{int[]getAssMnyColAry();String[]getChinaName();int[]getChinaNameType();int[]getChinaNameWidth();intgetCurrencyCol();int[]publicinterfaceISpecFlowQuery{int[]getAssMnyColAry();String[]getChinaName();int[]getChinaNameType();int[]getChinaNameWidth();intgetCurrencyCol();int[]getLocalMnyColAry();int[]getMnyColAry();UIPanelgetSpecCondPanel(Stringpk_corp,Stringoperator);StringgetSqlStr();}参与者过滤接nc.bs.pub.pf.IPfpublicinterfaceFilterpublicArrayListfilterUsers(StringorgPK,StringArrayListalDistilledUserPKs,AggregatedValueObject}publicinterfaceFilterpublicArrayListfilterUsers(StringorgPK,StringArrayListalDistilledUserPKs,AggregatedValueObject}orgPKalDistilledUserPKsPKbillvo publicinterfaceFilter2publicpublicinterfaceFilter2publicHashSetfilterUsers(StringsrcBilltype,StringAggregatedValueObjectbillvo,RoleVO[]由批动作处理的动作返回。被BS动作处理类PfUtilBO用来控制是否继续进行动publicpublicinterfaceIWorkflowBatch/**返回未通过或进行中的单据索引号(0...N)*/HashtablegetNoPassAndGoing();/**获得用户对象*/ObjectgetUserObj();}动作驱在BS端动作处理的过程中,在执行完动作后,根据其返回值的不同可能会进行动结尾,还尝试启动流。比如动作驱动:30_APPROVE-执行完7D_PUSHSAVE之后,如果启动了流,仍然遍历被驱动的动作,但不会执行同单据类型的动作。也就是说,仍然会执行4F_SAVE和5G_NIKE动作,但不会执行动作返回值为IWorkFlowRet动作返回值为Object[],且Object[0]类型为IWorkflowBatch,并指明了不进行动作单据VO交业务单据VO之间存在着相互转换的需求,可台或进行。VO交换前后可执行单张单据VOAggregatedValueObjectnc.ui.pf.change.PfUtilUITools.runChangeData(StringsourceBillType,//PKString AggregatedValueObjectvo///**/**VOVO数组*/AggregatedValueObject[PfUtilUITools.runChangeDataAry(StringsourceBillType,//源单据类型PKStringdestBillType, AggregatedValueObject[vos)//VO单张单据VOAggregatedValueObjectnc.bs.pub.pf.PfUtilTools.runChangeData(StringsourceBillType,//PKString AggregatedValueObjectvo//AggregatedValueObject[nc.bs.pub.pf.PfUtilTools.runChangeDataAry(StringsourceBillType,//源单据类型PKString AggregatedValueObject[vos)//VO单据UI菜单填充与业务类voidvoidnc.ui.pub.pf.PfUtilClient.retBusinessBtn(ButtonObjectinoutBoBusiness,StringcorpId,StringbillType)tagPK参照制voidvoidnc.ui.pub.pf.PfUtilClient.retAddBtn(ButtonObjectboAdd,StringcorpId,StringbillType,ButtonObjecttagPK:PK,voidvoidnc.ui.pub.pf.PfUtilClient.childButtonClicked(ButtonObjectbo,StringpkCorp,StringFunNode,StringpkOperator,StringcurrentBillType,Containerparent,ObjectuserObj)1、查询来源单据;2、显示来源单据,并进行选择;3、获取选择的来源单据;4VO交换。publicvoidonButtonClicked(nc.ui.pub.ButtonObjectbo//UIif(bo.getParent()==m_boBusi) PfUtilClient.retAddBtn(m_boAdd"2011"30"bo);}elseif(bo.getParent()==m_boAdd){if(nc.ui.pub.pf.PfUtilClient.makeFlag){ getBillUI().setBillOperate(IBillOperate.OP_ADD)//新增}elseIfAggregatedValueObjectvo=//PfUtilClient.getRetVos();}}}需要在pub_billtobillrefer中的querytemplateId查询模版,同时用<>括起来如果一个单据参照另一单据生成单据时必须在平台的单据信息对照表中进行否对于自定义参照(需要继承自 RefGridTreeModelwhere子句。动作voidnc.ui.pub.pf.PfUtilClient.re voidnc.ui.pub.pf.PfUtilClient.re ButtonObjectboElse,StringbillType,StringactionStyle)业务流相关接动作处理前后UI接台通过PfUtilClient调用单据动作时会先进行事前的额外处理。执行完动nc.vo.pub.pf.IprocActionRetObject接口(参见?节2.1节,额外处理类必须实现下述接口。动作执行前的UI端处理该实现类通过方法传递或是在单据类型表bd_billtypedef3字段publicpublicinterfaceIUIBeforeProcAction//UIvoidrunBatchClass(Containerparent,StringStringactionName,AggregatedValueObject[]vos,Object[]voidrunClass(Containerparent,StringbillType,StringactionName,AggregatedValueObjectvo,Objectobj);}publicpublicinterfaceIUIAfterProcAction//UIvoidrunClass(Containerparent,Objectobj)throws}台通过PfUtilClient调用单据动作,动作执行完成后,如果返回值为nc.vo.pub.pf.PfUtilActionVOUI界面。并根据该返回值中的信息进publicpublicinterfaceIinitDatavoidinitData(String}publicpublicinterfaceIinitData2voidinitData(Object}UI该接口为实现自定义查询条件(DLG)的类必须实现该接口的类必须在单据参照表pub_billtobillrefer的字段queryTemplateId中,并且必publicpublicinterfaceIinitQueryDatavoidinitData(StringpkCorp,Stringoperator,StringStringbusinessType,StringcurrentBillType,StringsourceBilltype,ObjectuserObj)throwsException;}publicpublicinterfaceIinitQueryData2voidinitData(StringpkCorp,Stringoperator,StringStringbusinessType,StringcurrentBillType,StringsourceBilltype,StringnodeKey,ObjectuserObj)throwsException;}台通过PfUtilClient调用单据动作时,如果执行动作的返回值实现了该接publicpublicinterfaceIProcActionRetObject/**返回动作执行完的前台执行类,必须实现IUIAfterProcAction*/StringgetClassStr();Object }业务处理类。该类在单据类型表bd_billtype的def1字段。publicpublicinterfaceISaveAfterBusi/**调用影响产品业务类型处理的业务,VO*/voidaffectBusi(nc.vo.pub.pf.PfPOArriveVOvo);/**返回相关单据类型,格式如:"'30','20'*/StringgetRelaBillType();}VO查询接流程平台提供查询单据主表VOCircularlyAccessibleValueObject[CircularlyAccessibleValueObject[IPFConfig.queryHeadAllData(StringbillType, //PKStringbusinessType//StringwhereString)//CircularlyAccessibleValueObject[CircularlyAccessibleValueObject[IPFConfig.queryBodyAllData(StringbillType, //PKString StringbodyCondition)//DMO实现,且必须实现下面的两个接口。publicpublicinterfaceIQueryData/**根据主表的关键字段查询子表数据*/CircularlyAc

温馨提示

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

评论

0/150

提交评论