该问题我百度、谷歌找遍了,没找到好的解决办法。请各位看代码
我底层发送流程的代码如下
- Java code
public ProcessInstance approvalProcess(final long id, final Map attrs) throws Exception { return (ProcessInstance) jbpmTemplate.execute(new JbpmCallback() { public Object doInJbpm(JbpmContext context) throws JbpmException { ProcessInstance pi = context.getGraphSession() .loadProcessInstance(id);//得到流程实例 String nodeName = ""; String trans = ""; try { Node node = pi.getRootToken().getNode(); nodeName = node.getName(); //得到当前节点名称 Transition transition = (Transition) node .getLeavingTransitions().get(0); trans = transition.getName();//得到当前节点对应的发送描述 } catch (Exception e) { } //判断流程实例是否结束 if (!pi.hasEnded()) { //得到当前实例所有任务 Iterator<TaskInstance> it = pi.getTaskMgmtInstance() .getTaskInstances().iterator(); for (; it.hasNext();) { TaskInstance ti = it.next(); //遍历所有任务,如果有和当前节点名称相同的任务 if (nodeName.equals(ti.getName())) { //设置任务完成时间 ti.setEnd(new Date()); //设置任务完成意见 ti.addComment(attrs.get("comment").toString()); //将发送描述放到description备用 ti.setDescription(trans); //得到任务处理人集合 Set se = ti.getPooledActors(); Iterator iterator = se.iterator(); while(iterator.hasNext()){ PooledActor pl = (PooledActor)iterator.next(); //attrs.get("author")是当前用户, //如果匹配到任务处理人集合里有当前人,则把任务完成者设为当前用户 if(pl.getActorId().equals(attrs.get("author"))){ ti.setActorId(pl.getActorId()); break; } } break; } } //发送流程实例 pi.signal(); //保存流程实例 context.save(pi); } else { throw new JbpmException("ProcessInstance " + id + " is end"); } return pi; } }); }
流程步骤是
开始--》拟稿--》审批---》结束
问题如下:
从拟稿发到审批时,通过上面方法,就可以设置拟稿的完成时间以及完成者
当从审批发到结束时,通过上面方法也能设置审批的完成时间和完成者
此时流程走到了结束,再调用上面方法时pi.hasEnded()为true,
所以结束的完成时间就没有。
并且在JBPM_TASKINSTANCE表里面没有结束节点的数据
我该如何设置结束节点的完成时间呢?
如果能附带些你们做的例子那就更好了。
------解决方案--------------------------------------------------------
这不是来人了吗
------解决方案--------------------------------------------------------
楼主用的是jbpm4吗? 跟我最近研究学习的jbpm4.4不一样,没有人做过当然是没有人回答你的问题了。
------解决方案--------------------------------------------------------
既然解决了。就把解决的办法发出来呗。然后结贴。