首页 > 其他 > 详细

maximo 工作流实现代码

时间:2014-04-24 16:53:06      阅读:833      评论:0      收藏:0      [点我收藏+]

要实现效果:已发出的工作流,谁都不可以修改流程里的单子(可以查看,不可以保存),除了特殊权限的人(maxadmin),或状态为审核不通过(即,返回给申请人);已发出且未结束的工作流,审批人(节点接收人)必须添加自己的审批意见。

////////AppBean类

public int SAVE() throws MXException, RemoteException {  

  MboRemote mr = getMbo();// 获取主表对象  

  MboSetRemote msr = mr.getMboSet("zzid");// 通过关联关系获取子表对象,zi表  

  MboSetRemote msrsp = mr.getMboSet("zhushenpi");// 通过关联关系获取子表对象,zhushenpi主子表的关联关系名

    String loginPerson = getMbo().getUserInfo().getPersonId();// 得到当前登录人的名字  

  String zhuStatus = mr.getString("status"); // 得到主表里的审批状态,status为主表里存储状态的字段

    //hasAuth()方法判断是够有权限修改保存单子  

  if (!hasAuth()) { // 当hasAuth()返回为false时,没有权限修改单子   

    throw new MXApplicationException("您没有权限修改此计划单子", "");  

  }

  //判断是否要添加审批意见

  else if (!(zhuStatus.equals("新建") || zhuStatus.equals("审批不通过"))) {//单子在审批人这里时,不需要有审批意见 

    //此时需要有审批意见,如果JZSHENPI表为空,说明没有审批意见,则提示  

    if (!msrsp.isEmpty()) { 

       for (int i = 0; i < msrsp.count(); i++) {     

          // 当前登录人在审批表里有没有记录,当前审批表里的状态和主表里的状态是不是一致的     

          if (!(loginPerson.equalsIgnoreCase(msrsp.getMbo(i) .getString("SHENPIREN")) &&

                    zhuStatus.equalsIgnoreCase(msrsp.getMbo(i).getString( "SHENPISTATUS")))) {      

            msrsp.setValue("HASLD", false, 11L);

              throw new MXApplicationException("还没有填写你的审批意见", "");     

          }    

        }   

       } else {    

         throw new MXApplicationException("还没有填写你的审批意见", "");   

       }  

     }

    if (!msr.isEmpty()) {   

     mr.setValue("allout", msr.sum("outmoney"));   

     mr.setValue("allin", msr.sum("inmoney"));    mr.setValue("yue", msr.sum("gerenyue"));  

  }  

    return super.SAVE();

  }

  // 这个方法判断当前登录人的权限

   public boolean hasAuth() throws MXException, RemoteException {  

    MboRemote thisMbo = getMbo(); // 得到主表对象  

    String tableId = thisMbo.getName() + "id"; // 得到主表的id字段名  

    long codeid = thisMbo.getLong(tableId);// 通过字段名得到这个字段的值,这字段是long类型  

    String status = thisMbo.getString("status");// 通过字段名去得到该字段的值  

    String personid = thisMbo.getUserInfo().getPersonId();// 得到当前登录人的名字  

     if (personid.equalsIgnoreCase("maxadmin")) { // 如果登陆人是maxadmin(或者其他有权限的人),返回true,可以修改单子   

        return true;  

     }  

  // 如果这个app名是prplan并且登录人是jianglei,返回true,可以修改单子(prplan这个应用程序也绑定了这个类,jainglei是特殊权限的)  

/* * if ((this.app.getApp().toString().equalsIgnoreCase("PRPLAN")) && (personid.equalsIgnoreCase("jianglei"))) {

      return true;

    }    */

  // 如果这个单子的状态是“新建”或者“wappr(表示初始状态)”,返回requestedby字段值和登陆人的比较结果,如果相同,可以修改单子//如果有其他可以修改单子的状态可以再加上

  if ((status.equals("新建")) || (status.equals("WAPPR"))) {   

    return thisMbo.getString("createby").equalsIgnoreCase(personid);  

  }  

   if(status.equals("取消操作")){    //如果是创建人取消了操作(结束流程),那么就谁都不可以进行任何操作   

    return false;  

  }  

// 根据后面的条件从wfinstance表里得到对应的MboSet,==》查有没有符合下列条件的流程   //wfinstance表是保留流程实例信息的

  MboSetRemote woinstance = thisMbo.getMboSet("instance", "WFINSTANCE",     "ownertable=‘" + thisMbo.getName() + "‘ and ownerid=‘" + codeid                          + "‘ and active = 1"); // active = 1表示这个流程是活动的(在流程中,已经开始还没有结束)  

// 如果这个MboSet为空,直接跳过if,如果不为空,则执行if里面的代码  

  if (!woinstance.isEmpty()) {   

     String sql = "ownerid=‘" + codeid + "‘ and ownertable=‘"  + thisMbo.getName() + "‘ and assignstatus=‘ACTIVE‘ and assigncode=‘" + personid      + "‘";// assigncode=‘" + personid + "‘"   

    // 根据sql条件从wfassignment表里得到一个MboSet,==》查找这个流程里有没有这个人

    MboSetRemote mbosetremote = thisMbo.getMboSet("assigncode",  "WFASSIGNMENT", sql);   

        return !mbosetremote.isEmpty();  

}  

  // 返回requestedby字段值和登陆人的比较结果,如果相同,可以修改单子  

  return thisMbo.getString("createby").equalsIgnoreCase(personid);

  }

 

 

 

////如果有判断不严谨的地方,请大家留言提出,谢谢!

maximo 工作流实现代码,布布扣,bubuko.com

maximo 工作流实现代码

原文:http://www.cnblogs.com/hanyuqin/p/3683077.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!