|
发表于 2013-9-5 15:42:19
|
显示全部楼层
本帖最后由 liangyongfei 于 2013-9-6 09:28 编辑
我做了一个例子供您参考:如有不懂之处,请回帖告之
首先添加执行规则,在执行者表达式里边调用一个自定义fn的方法,
自定义方法的制作请参考快速开发手册。
在java的方法中写如下代码
- //返回值必须是 List<OrgUnit>对象
- public static List<OrgUnit> getMyNextPersion() {
- //根据环节标识得当前环节的创建者
- List<OrgUnit> nowPertion = null;
- //判断是否第一次执行这个环节,如果还没执行过,则找到前一个环节的执行者
- if(ProcessUtils.findActivityCreator("businessActivity2").size()<1){
- nowPertion = ProcessUtils.findActivityExecutor("businessActivity1");
- }
- else{
- nowPertion = ProcessUtils.findActivityExecutor("businessActivity2");
- }
- String[] str = nowPertion.get(0).getFName().split("/");
- //的到执行者的名字
- String nowName = str[str.length-1];
-
- //审批类型
- String splx = "";
- //处理人级别
- int clrjb = -1;
- //下一个执行者的名称
- String nextName = null;
- //下一个执行者的ID
- String id = null;
- //要返回的组织单元
- List<OrgUnit> orgUnit = null;
- try {
- //根据当前环节执行者找到当前执行者的业务类型和处理级别
- String KsqlGW = "select MY_RYB.fSPLX as splx,MY_RYB.fCLRJB as clrjb FROM MY_RYB MY_RYB where MY_RYB.fRYMC='" +nowName+ "'";
- Table table1 = KSQL.select(KsqlGW, null, "/myDemo/liucheng/data", null);
- Iterator<Row> rows = table1.iterator();
- Row row;
- while(rows.hasNext()){
- row = rows.next();
- splx = row.getValue("splx").toString();
- clrjb = Integer.parseInt(row.getValue("clrjb").toString());
- }
-
- //根据业务类型和处理级别得到下一个执行者名称和人员的ID,我自己建的表里存了人的id,如果没有ID,需要自己查得。
- String Ksql = "select MY_RYB.fRYMC as name,MY_RYB.fRYID as id FROM MY_RYB MY_RYB where MY_RYB.fSPLX='" + splx + "' and MY_RYB.fCLRJB>'"
- + clrjb + "' order by MY_RYB.fCLRJB asc LIMIT 0, 1";
- Table table2 = KSQL.select(Ksql, null, "/myDemo/liucheng/data", null);
- Iterator<Row> rows2 = table2.iterator();
- Row row2;
- while(rows2.hasNext()){
- row2 = rows2.next();
- nextName = row2.getValue("name").toString();
- id = row2.getValue("id").toString();
- }
-
- //根据ID得到下一个执行者返回值OrgUnit列表对象
- if(id != null){
- orgUnit = OrgUtils.findOrgUnitsByID(id);
-
- }
-
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage());
- }
- return orgUnit;
- }
复制代码 我做的这个案例只是做了第一个审批环节,当流转到下一个审批环节时,您可以从数据库中拿出处理级别最低的那个人作为当前环节的执行者
您可以为这个java方法添加三个参数,前一个执行环节的ID,当前环节的ID,审批类型,
执行第一个审批环节时,只传:前一个执行环节的ID,当前环节的ID。判断,如果前一个执行者有值,并且本环节没有执行过,则通过得到前一个执行者,来查得当前的执行者。
执行后边的审批环节时,只传:当前环节的ID,审批类型。判断,如果前一个执行环节ID没传值,为null,并且本环节没有执行过,根据 ‘审批类型’找到处理级别最低的人当做这个审批环节的第一个执行者
如果本环节已经执行过了,则根据本环节的上一次执行者得到当前的执行者 |
|