天翎MyApps技术社区 - 低代码平台 | 流程管理系统 | BPM软件

 找回密码
 注册成为天翎用户
楼主: jariy

关于流程回撤~~~~2个问题

[复制链接]
shary 发表于 2011-9-27 11:42:57 | 显示全部楼层
利用我上面给你的代码我不知道你的问题在哪。按照那个脚本可以实现根据你的业务隐藏回撤操作。
 楼主| jariy 发表于 2011-9-27 12:09:13 | 显示全部楼层
关于第2个问题我想应该有2种情况吧:背景当节点A已经发送给节点B的时候
1.节点B未处理:节点A的处理人进入表单可以查看到当前流程的处理节点在B,节点B未处理,节点A的处理人进入到此表单 并且能看到那个回收按钮;
2.节点B已处理:节点A的处理人进入表单可以查看到当前流程的处理节点在B,节点B已处理,节点A的处理人进入到此表单,这里可以做到隐藏回收按钮

那么其实2种情况都是要对回收按钮进行处理,不管其看不看得到,我觉得只要在回收按钮的执行前脚本判断一下然后给出提示就行,问题是,我不知道怎么去判断当前流程的流程节点是否已处理?这个麻烦给点代码让我参考参考。

我上面写的东西不知道你有没有看,或者说明白了我的意思没?
对于你所说的隐藏脚本的意思我明白?可是对于我所说的2点来讲,隐藏不隐藏这个回收按钮不是重点,取例来说,如果对于一个未处理的流程,
1,节点A和节点B的处理人同时进入这个流程,然后2者看到的当前处理人是节点B,然后节点B的处理人先处理了这个流程,此时,照你上面说的隐藏的问题,这时,节点A是能看到回收按钮的,但是问题来了,节点B的处理人已经处理过这个流程了,按照我要的效果,当前流程在节点A这里不允许回撤的,但是如果说能看到回收按钮就能回撤的话与我要的效果不符的。
2.节点A未进入此表单,节点B先进入此表单,然后节点B处理了当前表单后节点A才进入当前表单,这个是能满足你上面所说的隐藏的功能的。


这个重点其实还是在回收按钮的判断上。
 楼主| jariy 发表于 2011-9-27 12:33:39 | 显示全部楼层
我说的1其实就是并发的问题 汗
shary 发表于 2011-9-27 13:01:21 | 显示全部楼层
请参考下面的代码:
var doc =getCurrentDocument();
FlowStateRT flowState = doc.getState();//获得流程实例
Collection<NodeRT> noderts = flowState.getNoderts();
for (Iterator<NodeRT> iterator = noderts.iterator(); iterator.hasNext();) {
   NodeRT nodeRT = iterator.next();//获得单个流程节点对象

    Collection<ActorRT> actors =  nodeRT.getActorrts();获得节点的所有处理人信息
//然后迭代 处理人
ActorRT.getIsprocessed()==true  //返回结果为true 说明这个处理人已经处理过

}
 楼主| jariy 发表于 2011-9-27 14:45:03 | 显示全部楼层
[code]
var str="aa";
var doc =getCurrentDocument();
var flowState = doc.getState();//获得流程实例
var noderts = flowState.getNoderts();
for (var iterator = noderts.iterator(); iterator.hasNext();) {
        //获得单个流程节点对象
        var nodeRT = iterator.next();
        //获得节点的所有处理人信息(这里获取到的是当前待处理的处理人信息,如果本来待处理人有3个人的话,有1个人已经处理了的话,这里只会拿到剩下2个处理人的信息,那么问题就来了,我不知道总共的处理人有多少,又怎么知道该流程是否已处理过呢?)
        var actors =  nodeRT.getActorrts();       
        //然后迭代 处理人
        //返回结果为true 说明这个处理人已经处理过
        for(var i=0;i<actors.size();i++){
                var _tmp_actor=actors.get(i);
                //假设本来有3个处理人,如果1个人已经发送过(也就是已处理),那么这里只会打印2条语句,这个打印的值都是false,我不知道这里什么时候能打印出true的值,因为如果你已经处理过将不会再出现在这个for循环里.
                $PRINTER.println("====================getIsprocessed:"+_tmp_actor.getIsprocessed());
               
        }
        //ActorRT.getIsprocessed()==true  

}
str;code]

上面的代码是我放入回撤按钮的执行前脚本里的脚本,麻烦告诉我怎么取得所有节点的处理人,这个当前未处理的处理人上面可以拿到.
shary 发表于 2011-9-27 15:24:50 | 显示全部楼层
您好,您可以去源码里找这个类。对应再找到相关的属性就可以了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为天翎用户

x
 楼主| jariy 发表于 2011-9-27 16:57:39 | 显示全部楼层
图1 :我这里的源码环境找不到你的那个方法:

图2 :我看了一下只有用这个findFlowStateRTByDocidAndFlowid(docid,flowid),但是告诉我怎么在这里怎么拿这个flowid,而且这个方法能查到当前流程的所有处理人(包括已处理和未处理)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为天翎用户

x
 楼主| jariy 发表于 2011-9-27 17:08:10 | 显示全部楼层


报错
  1. var str="aa";
  2. var doc =getCurrentDocument();
  3. var flowState;
  4. var flowStateProcess = createProcess("cn.myapps.core.workflow.storage.runtime.ejb.FlowStateRTProcessBean");
  5. flowState=flowStateProcess.findFlowStateRTByDocidAndFlowid(doc.getId(),doc.getFlowid());//这里要2个参数docid和flowid,这里怎么拿flowid
  6. // flowState= doc.getState();//获得流程实例
  7. var noderts = flowState.getNoderts();
  8. var  _index=1;
  9. for (var iterator = noderts.iterator(); iterator.hasNext();) {
  10.         //获得单个流程节点对象
  11.         var nodeRT = iterator.next();
  12.         //获得节点的所有处理人信息(这里获取到的是当前待处理的处理人信息,如果本来待处理人有3个人的话,有1个人已经处理了的话,这里只会拿到剩下2个处理人的信息,那么问题就来了,我不知道总共的处理人有多少,又怎么知道该流程是否已处理过呢?)
  13.         var actors =  nodeRT.getActorrts();       
  14.         //然后迭代 处理人
  15.         //返回结果为true 说明这个处理人已经处理过
  16.         for(var i=0;i<actors.size();i++){
  17.                 var _tmp_actor=actors.get(i);
  18.                 //假设本来有3个处理人,如果1个人已经发送过(也就是已处理),那么这里只会打印2条语句,这个打印的值都是false,我不知道这里什么时候能打印出true的值,因为如果你已经处理过将不会再出现在这个for循环里.
  19.                 $PRINTER.println("==("+_index+")=getIsprocessed:"+_tmp_actor.getIsprocessed()+" pending:"+_tmp_actor.isPending());
  20.                
  21.         }
  22.         _index++;
  23.         //ActorRT.getIsprocessed()==true  

  24. }
  25. $PRINTER.println("====_index:"+_index);
  26. str;
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为天翎用户

x
shary 发表于 2011-9-27 17:09:16 | 显示全部楼层
我在最新的源码里找的。可能结构跟你的源码变了吧。
var doc =getCurrentDoucmnt();
var flowid=doc.getFlowid();//流程ID。在Document.java类里有对应的属性
shary 发表于 2011-9-27 17:14:01 | 显示全部楼层
你直接用这么new的方式试一下吧。不用createProcess()的方式
var formProcess = new Packages.cn.myapps.core.dynaform.form.ejb.FormProcessBean();类似这样的

本版积分规则

QQ|手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-12 16:03

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表