日期:2014-05-17  浏览次数:20683 次

关于JBPM流程结束的问题,麻烦有相关经验的朋友进来帮帮忙,谢谢!
该问题我百度、谷歌找遍了,没找到好的解决办法。请各位看代码


我底层发送流程的代码如下
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不一样,没有人做过当然是没有人回答你的问题了。
------解决方案--------------------
既然解决了。就把解决的办法发出来呗。然后结贴。