当前位置: 代码迷 >> Java Web开发 >> 关于JBPM流程结束的有关问题,麻烦有相关经验的朋友进来帮帮忙,多谢
  详细解决方案

关于JBPM流程结束的有关问题,麻烦有相关经验的朋友进来帮帮忙,多谢

热度:5577   发布时间:2013-02-25 21:09:32
关于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不一样,没有人做过当然是没有人回答你的问题了。
------解决方案--------------------------------------------------------
既然解决了。就把解决的办法发出来呗。然后结贴。
  相关解决方案