Arch4样本程序简易开发指南(8)

2019-01-18 21:58

definition=getDefinitionByName(definitionName); nextProcessInstance.getContextInstance().setTransientVariable(BpmContant.BPM_RULE_PRE_NODENAME, taskInstance.getContextInstance().getTransientVariable(BpmContant.BPM_RULE_PRE_NODENAME)); nextProcessInstance.getContextInstance().setVariable(\, usercode); nextProcessInstance.getContextInstance().setVariable(\, parentId); nextProcessInstance.getContextInstance().setVariable(BpmContant.BPM_RULE_PARENTTASK, taskInstance.getId()) nextProcessInstance.getRootToken().signal(); TaskInstance nextTaskInstance=getTaskInstanceByToken(nextProcessInstance.getTaskMgmtInstance(),nextProcessInstance.getRootToken()); if (flag){ nextTaskInstance.start(); } context.save(nextProcessInstance); return createWorkflowTask(taskInstance, } ProcessInstance nextProcessInstance=new ProcessInstance(definition); nextTaskInstance,null); }); } 此方法的最后也是同报案环节,记载必要的信息到中间表对象中,便于用户保存及提供给下一环节的使用。

5.2.2.3 查勘环节

查勘环节要做的主要任务是开启一个并行的任务分支:定损和立案。在JBPM中此处体现为一个fork节点,fork的转向不同于普通的task-node节点,fork节点的转向是2个(也可以是多个,视需求而定),当任务流转至此时,它会并行的发起两个任务,同时向下流转。在查勘环节的service中调用JBPMEngine的dealFork方法,此方法要求传入两个参数,当前节

点的任务号和进入fork节点的那个转向名称。样本程序中这个转向名称叫做“toFork”(可以在第二个模板的流程图中看到)。下面是该方法的方法体: @SuppressWarnings(\) public List dealFork(final String taskId,final String transition){ return (List)jbpmTemplate.execute(new JbpmCallback(){ public List doInJbpm(JbpmContext context) { List tasks=new ArrayList(); TaskInstance taskInstance=context.loadTaskInstance(new Long(taskId)); ProcessInstance processInstance = Token token = processInstance.getRootToken(); token.signal(); Iterator iterator = while(iterator.hasNext()){ Token childToken = (Token) childToken.signal(); ProcessInstance subprocess = tasks.add(createWorkflowTask(taskInstance, childToken.getProcessInstance(); getTaskInstanceByToken(subprocess.getTaskMgmtInstance(), childToken),transition)); } } } return tasks; }); taskInstance.getProcessInstance(); token.getChildren().keySet().iterator(); token.getChildren().get(iterator.next()); 此方法返回的是一个集合,集合里保存的是保存有fork分出去的所有子任务信息的的中间表对象,样本程序中当然就是保存定损和立案的环节的信息的中间表对象,这些信息可以被定损和立案环节的service使用到。需要说明的是,此处也可以根据实际需求,将fork节点的并行启动两个子任务改成根据需要开启一个任务。

5.2.2.4 定损环节

立案环节和定损环节类似,他们二者同是从查勘那个fork节点并行分出来的两个子任务,并且同是流向同一个join节点,在两个任务同是到达join节点后,流程继续向下进行,在样本程序中即是流向了结案节点。此处需要说明的是,在实际的开发过程中,可以视实际的需求将此处的join节点改变类型,可以实现异步流转,也就是说不必等待两个任务同时流转到join,先到的任务可以接着向下进行。

5.2.2.5 结案环节

结案环节是本流程的最后一个节点,它并没有什么需要特殊处理的地方,只需要开启流程进行正常的流程处理以返回中间表对象,然后结束全流程。在结案的service中调用了JBPMEngine的endProcess方法,该方法要求传入两个参数,模板名称和任务号。下面给出了该方法的具体实现:

public BpmTask endProcess(final String definitionName,final String taskId){ return (BpmTask)jbpmTemplate.execute(new JbpmCallback(){ public BpmTask doInJbpm(JbpmContext context) { TaskInstance taskInstance=context.loadTaskInstance(new ProcessInstance processInstance = Long(taskId)); taskInstance.getToken().getProcessInstance(); // create the start task if one exists Token token = processInstance.getRootToken(); token.end(); TaskInstance nexttaskInstance=getTaskInstanceByToken(processInstance.getTaskMgmtInstance(),token); context.save(processInstance); return createWorkflowTask(null, nexttaskInstance,null);

} });

} 5.2.3 相关的配置说明

5.5.3.1

模板发布的配置

工作流模板设计好后,在applicationContext-bpm文件中配置一下即可发布。如下代码

classpath:/process/Claimdefinition/processdefinition.xml classpath:/process/Checkdefinition/processdefinition.xml

在value项中输入模板文件的相对路径后,重启服务即可完成模板的发布,需要注意的是在模板发布成功后,要把相关的value项去掉,以免下次重启服务时又进行模板发布的操作,引起错误。

5.5.3.2 ActionHandler的配置

ActionHandler是JBPM中开放给开发人员的一个接口,我们可以在流程进行的过程中在必要的时候嵌入我们的业务操作。在样本程序中,模板设计时在流程进入节点时都会触发一个对应的ActionHandler,我们可以在里面根据需要编写自己的业务代码。在实际开发过程中可以根据需要自定义ActionHandler,它也是一个普通的java类,只需要实现ActionHandler接口并且重写execute方法,然后在该方法的内部编写业务逻辑。在Arch4框架中由于JBPM是基于spring的整合,所以所有的ActionHandler都被当做一个bean来配置,同样是在

applicationContext-bpm.xml文件中,配置一个bean,class属性中写该ActionHandler的包名+类名即可。如下面配置的调度的ActionHandler:

需要特殊说明的一点,bean的id是在工作流模板中节点的那个targetBean里配置的名称。如:模板中配置调度的ActionHandler:

jbpmConfiguration caseDispatchSubmitActionHanlder

5.2.4 相关辅助类的说明

5.5.4.1

ProcessName

保存有全部工作流模板名称的静态常量的类。

5.5.4.2 UtilService

该类提供了三个查找案件的方法,只是查询条件不同,分别是根据报案号、根据报案号和当前的节点名称和查找全部案件。代码如下:

findCase findCaseByRegistNo 查找全部案件 根据报案号查找案件 根据报案号和当前节点名茶查找案件 findCaseByRegistNoAndNodeName

5.5.4.3 BpmBusinessRelationService

一个接口,提供了一个保存中间表对象的方法,JbpmBusinessRelationServiceImpl是

它的一个实现类。可以通过这个类去调用它的saveRelation方法,保存中间表对象。 public void saveRelation(WbusinessCmain wbusinessCmain)

5.5.4.4 WbusinessCmain

最重要的一个中间表实体类,它对应prplbpmmain表。 属性名称 Id Processid Taskid mainNo curNodeName

对应字段 Id Processid Taskid mainNo curNodeName 含义 标识列 当前的流程id 当前的任务id 报案号 当前的节点名称


Arch4样本程序简易开发指南(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:CBN-F300齿轮泵容积效率实验台

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

马上注册会员

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