jbpm4.3 关于fork和join的疑问

windywindy 2010-09-14
<?xml version="1.0" encoding="UTF-8"?>

<process name="process" xmlns="http://jbpm.org/4.3/jpdl">
	<swimlane assignee="#{发起人_actors}" name="行业组总监"/>
	<start g="61,57,48,48" name="开始">
		<transition g="-11,-19" name="开始" to="行业组总监"/>
	</start>
	<task form="/pages/flow.jsp" g="143,55,92,52" name="行业组总监" swimlane="行业组总监">
      <transition g="-17,-17" name="市场部经理" to="市场部经理"/>
	</task>
	<fork assignee="#{市场部经理_actors}" form="/pages/flow.jsp" g="364,60,92,52" name="市场部经理">
		<transition g="-38,9" name="市场策划组" to="市场策划组"/>
		<transition g="-43,-23" name="产品经理组" to="产品经理组"/>
	</fork>
	<task assignee="#{市场策划组_actors}" form="/pages/flow1.jsp" g="560,95,108,52" name="市场策划组">
		<transition g="-42,3" name="市场策划组提交" to="行业组总监审核"/>
	</task>
	<task assignee="#{产品经理组_actors}" form="/pages/flow2.jsp" g="562,31,104,52" name="产品经理组">
		<transition g="-38,-19" name="产品经理提交" to="行业组总监审核"/>
	</task>
	<join form="/pages/flow.jsp" g="769,79,113,52" name="行业组总监审核" swimlane="行业组总监">
     	 <transition g="-8,8" name="结束" to="结束"/>
	</join>
	<end g="862,78,48,48" name="结束"/>
</process>


行业组总监提交任务时: org.jbpm.api.JbpmException: script evaluation error: javax.el.PropertyNotFoundException: Cannot find property 市场策划组_actors
我想问一下行业总监提交任务到市场部经理就会直接到fork的吗?
fork又如何接受任务呢?
如果是这样市场策划组和产品经理组又如何确定人呢?
我不知道我画的流程图是否有错,但部署是没问题的!
请临远大哥指点一二,对fork,join的操作不是很明白!
xyz20003 2010-09-15
错误的意思是,找不到名为“市场策划组_actors ”的变量,个人感觉异常里的信息已经很明确了。能看到这么明确的错误信息,我感到很欣慰。
fork不支持assignee属性,所以不回去解析。所以fork无法接受任务,它只管分支。
fork根据后续transition的个数,自动创建分支。
task活动会根据assignee或candidate***的设置,确定分配人。和fork无关,和task在什么地方无关。
流程现在没问题。但是join上的form也是无效的。等哪天jbpm4打开xml校验,这些多余的属性都会报错。
windywindy 2010-09-15
<?xml version="1.0" encoding="UTF-8"?>

<process name="process" xmlns="http://jbpm.org/4.3/jpdl">
	<swimlane assignee="#{发起人_actors}" name="行业组总监"/>
	<start g="61,57,48,48" name="开始">
		<transition g="-11,-19" name="开始" to="行业组总监"/>
	</start>
	<task form="/pages/flow.jsp" g="143,55,92,52" name="行业组总监" swimlane="行业组总监">
      <transition g="-17,-17" name="市场部经理" to="市场部经理"/>
	</task>
	<task assignee="#{市场部经理_actors}" form="/pages/flow.jsp" g="305,62,92,52" name="市场部经理">
		<transition g="-18,4" name="分配任务" to="分配任务"/>
	</task>
	<fork g="443,63,92,52" name="分配任务">
		<transition g="-38,9" name="市场策划组" to="市场策划组"/>
		<transition g="-43,-23" name="产品经理组" to="产品经理组"/>
	</fork>
	<task assignee="#{市场策划组_actors}" form="/pages/flow1.jsp" g="560,95,108,52" name="市场策划组">
		<transition g="-28,4" name="市场策划组提交" to="任务结束"/>
	</task>
	<task assignee="#{产品经理组_actors}" form="/pages/flow2.jsp" g="562,31,104,52" name="产品经理组">
		<transition g="-19,-32" name="产品经理提交" to="任务结束"/>
	</task>
	<join g="769,79,113,52" name="任务结束">
     	 <transition g="-29,-26" name="行业组总监审核" to="行业组总监审核"/>
	</join>
	<task form="/pages/flow.jsp" g="882,77,113,52" name="行业组总监审核" swimlane="行业组总监">
     	 <transition g="-8,8" name="结束" to="结束"/>
	</task>
	<end g="912,248,48,48" name="结束"/>
</process>


我修改了一下流程图,有一点不明白的地方是市场部经理提交,fork会自动创建分支,在市场经理部处如何知道fork的transition呢?又如何为任务分配人呢?
是通过这个查询吗?但我的结果jobs.size=0的,List<Job> jobs = managementService.createJobQuery().processInstanceId(processInstanceId).list();
xyz20003 2010-09-15
设置变量就可以了。

Job在jbpm4中是异步操作。
人工任务是task。
windywindy 2010-09-15
xyz20003 写道
设置变量就可以了。

Job在jbpm4中是异步操作。
人工任务是task。

还是不知道如何处理fork下面的任务
我的代码是这样的
public void submit(String taskId, String outCome, String users, HttpServletRequest request) throws Exception {// 提交任务
		Map<String, Object> var = new HashMap<String, Object>();
		/* 压入来自于页面表单的数据 */
		Map<String, Object> vars = VarUtil.getVarMap(request);
		var.putAll(vars);
		taskService.addTaskComment(taskId, var.get("assessment") + "");
		TaskImpl task = (TaskImpl) taskService.getTask(taskId);

		ProcessInstance pi = executionService.findProcessInstanceById(task.getExecutionId());
		ProcessDefinitionImpl pd = (ProcessDefinitionImpl) repositoryService.createProcessDefinitionQuery()
				.processDefinitionId(pi.getProcessDefinitionId())
				.uniqueResult();
		
		if(outCome.equals("分配任务")){
			taskService.completeTask(task.getId(), var);
			//处理fork下面的任务,并为其分配候选人
		}else{
			var.put(outCome + "_actors", users.replaceAll(",", ""));
			taskService.completeTask(task.getId(), outCome, var);
		}
		submitUpdate(pd, getHistoryProcessInstance(pi.getId()), task, request, vars);
	}

到市场部经理提交任务时,如果我选了A为市场策划组的候选人,B为产品经理组的候选人,这怎样处理啊?
xyz20003 2010-09-15
呵呵,建议你先搞明白fork的用法。
windywindy 2010-09-15
<?xml version="1.0" encoding="UTF-8"?>

<process name="AsyncFork" xmlns="http://jbpm.org/4.3/jpdl">

	<start g="22,69,80,40">
		<transition to="fork"/>
	</start>

	<fork g="99,68,80,40" name="fork">
	  <on event="end" continue="exclusive" />
    <transition g="122,41:" to="ship goods"/>
    <transition g="123,142:" to="send bill"/>
	</fork>

	<java class="com.family168.Application" g="159,17,98,50" method="shipGoods" name="ship goods">
		<transition g="297,42:" to="join"/>
	</java>

  <java class="com.family168.Application" g="159,117,98,50" method="sendBill" name="send bill">
    <transition g="297,141:" to="join"/>
  </java>

  <join g="274,66,80,40" name="join">
    <transition to="end"/>
  </join>
   
  <end g="353,67,48,48" name="end"/>

</process>

这是jbpm4.3里面的例子,我不会是要定义二个方法吧?实在不明白,请临远大哥指点一二
xyz20003 2010-09-15
先说说你要实现什么业务,然后再来看是否需要fork来实现。
windywindy 2010-09-15
谢谢临远大哥,要开展行业活动,要行业组总监发起流程,递交到市场部经理,市场部经理再将任务分别递交给市场策划组和产品经理组,市场策划组要给出活动方案,产品经理组要给出课题,市场部经理提交任务是已经确定了市场策划组和产品经理组的候选人,两者完成之后再由行业组总监审核。我这里用到了泳道,因为行业组总监都是同一个人。
这个业务用fork,join应该可以实现吧!谢过了~
xyz20003 2010-09-15
并发流程,是应该用fork
Global site tag (gtag.js) - Google Analytics