要实现效果:已发出的工作流,谁都不可以修改流程里的单子(可以查看,不可以保存),除了特殊权限的人(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);

  }

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

转载于:https://www.cnblogs.com/hanyuqin/p/3683077.html

maximo 工作流实现代码相关推荐

  1. maximo工作流画布加载失败问题

    maximo工作流画布加载不成功且出现如下提示:WorkFlow Canvas failed to load! -- Please check browser security settings an ...

  2. 光流法测试代码_高效的企业测试-工作流和代码质量(4/6)

    光流法测试代码 本文的这一部分将讨论在开发过程中拥有有效工作流程的影响,以及适当的测试代码质量如何使我们能够创建可维护的测试,尤其是对于复杂项目. 开发工作流程和管道 编程是一项流程活动,我们开发人员 ...

  3. 高效的企业测试-工作流和代码质量(4/6)

    本文的这一部分将讨论在开发过程中拥有有效工作流程的影响,以及适当的测试代码质量如何使我们能够创建可维护的测试,尤其是对于复杂项目. 开发工作流程和管道 编程是一项流程活动,我们开发人员应该对保持工作流 ...

  4. 关于MAXIMO数据限制代码的理解

    MAXIMO配置数据限制,以及如何在代码中体现的理解 首先配置相关的数据限制条件 这个就是针对于对象和应用程序的数据过滤条件,只有满足该条件才会被查询显示出来 在MBOSET中代码的体现,如下: 反编 ...

  5. maximo工作流底色更改

    类:psdi.workflow.diagram.DiagramWorkflowNode 设置颜色的方法: protected void draw(Graphics g)//draw 方法 { if(t ...

  6. maximo 入门知识

    1.MAXIMO使用技术介绍 RMI Maximo基于J2EE架构,其中的业务对象都采用RMI的机制实现,这种机制给分布计算的系统设计.编程都带来了极大的方便. Ajax Maximo中的逻辑表现和用 ...

  7. VS2010中获取并调用CRM2011中的工作流

    接触过CRM2011的同学们肯定考虑过这样的一个问题,就是我们CRM系统中的那些实体能否通过外部开发工具,比如VS2010来获取呢?更深一步的说,我们能否获取Workflow实体的所有数据,然后在VS ...

  8. SharePoint 2010 工作流解决方案:将 SharePoint Designer 可重用工作流导入 Visual Studio...

    在 SharePoint Designer 中创建的工作流(即,声明性工作流)由 XML 语句组成,而非由代码组成. SharePoint Designer 2010 引入了可重用工作流,它们是可由 ...

  9. .NET Core微服务 权限系统+工作流(二)工作流系统

    一.前言 接上一篇 .NET Core微服务 权限系统+工作流(一)权限系统 ,再来一发 工作流,我在接触这块开发的时候一直好奇它的实现方式,翻看各种工作流引擎代码,探究其实现方式,个人总结出来一个核 ...

最新文章

  1. 在客户端调用MOSS的搜索服务,实现更加灵活的搜索控制
  2. 微软 CTO 韦青:对微软这样已经走过44年的公司,现在也只是个小小小的开始!!!
  3. java使用不存在的字符串_jpa – java.lang.IllegalArgumentException:您试图使用查询字符串中不存在的字符串名称设置参数值...
  4. 用官方的SSD1306.py 驱动 OLED
  5. 简介明了——map+multimap头文件函数详解
  6. Python 代码注释
  7. 【C语言笔记初级篇】第七章:结构体相关
  8. mybatis分页应用
  9. php从入门到精通分享,PHP从入门到精通学习路线图分享
  10. Docker下载Nginx镜像并运行Nginx容器
  11. ios蓝牙开发错误总结
  12. 智能优化算法——差分进化算法(Python实现)
  13. 自考计算机00051笔记,自考00051 管理系统中计算机应用自考资料笔记自考小抄.doc...
  14. QTcpSocket
  15. 使用CentOS7搭建Nat64服务器实现IPv6网段访问IPv4地址
  16. 手把手教你爬取任意日期全部股票分时数据~
  17. 利用计算机技术全面规划供应,‍ ‍ 利用计算机及网络技术,全面规划供应链中的商流、物流、信息流、资金流等,并进行计划、组织、协调与控制。 ‍ ‍...
  18. Shiro 框架详解
  19. Code Wars游戏说明
  20. 计算机毕业设计:基于微信小程序的校园求职系统

热门文章

  1. Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——4-5
  2. Quora Andy Barton
  3. php 字符串去html,PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
  4. VC采集网页所有表单域
  5. 1.9 函数-C++编程模块
  6. ApplicationContext||ApplicationContext与BeanFactory的区别||SpringContextUtil类的作用
  7. 使用 spring 的 IOC 解决程序耦合——获取spring的Ioc核心容器,并根据id获取对象、核心容器的两个接口(ApplicationContext、BeanFactory)引发出的问题
  8. Docker 容器启动失败日志分析方法,启动sonic容器实例simple时未报错运行一会又停止的问题排查实例演示
  9. Spring Boot与消息
  10. 调试笔记--keil 断点调试小技巧