• 工作流框架注意事项


    1、在action中要新增lgpDispatchFlowService, lgpDispatchFlow, flowId三个关于流程的变量

    2、在prepare函数中要初始化lgpDispatchFlow对象

      if (!isNullOrEmptyString(flowId))
        {
           this.lgpDispatchFlow = (LgpDispatchFlow)this.lgpDispatchFlowService.getById(flowId);
        }在菜单中一般是不会配置流程flowId的,所以flowId为null

    菜单中生成的url是这样的'contract/LgpContract_ngList.action?                 type=contract&operating=ng&parentModuleId=2c9082cb41fd9bbf0141fda3a5e40001&moduleId=2c9082cb41fd9bbf0141fda751580002'

    3在nglist.action中必须在request中设置如下属性;

       this.getRequest().setAttribute("ss_moduleId", this.getRequest().getParameter("parentModuleId"));
         this.getRequest().setAttribute("cur_moduleId", this.getRequest().getParameter("moduleId"));
         this.getRequest().setAttribute("s_type", this.getRequest().getParameter("type"));
         this.getRequest().setAttribute("s_operating", this.getRequest().getParameter("operating"));

      必须在map中放置如下的fliter否则查询出的数据不是对应于本模块的记录:

        LgmUser user = (LgmUser)this.getSession().getAttribute("loginUser");
        Limit limit=RequestUtils.getLimit(getRequest(),"LgpDispatchFlow");
        HashMap<String,String> map = new HashMap<String,String>();
        map.put("moduleId", ss_moduleId);
        map.put("orgId", user.getOrgId());

       PageInfo pageInfo = newPageInfo(limit,"LgpDispatchFlow",RequestUtils.getCurrentRowsDisplayed(getRequest(),"LgpDispatchFlow"));
           pageInfo.getFilters().putAll(map);

      Page page = lgpDispatchFlowService.findWorkFlowByPageInfo(pageInfo);//查找对应模块对应部门下的工作流记录

          对应的sql为

            

                  String sql = "from LgpWorkFlow as a where a.isActive = '0' ";

                    sql += "/~ and a.orgId = '[orgId]' ~/";
                    sql += "/~ and a.moduleId = '[moduleId]' ~/";
      
                    sql += " order by a.orderNum";

    进入nglist.jsp页面利用ec展示所有的工作流记录 。

    4、进入创建工作流页面 通过产生的workFlowString产生对应的ui界面

    this.getRequest().setAttribute("workFlowString",
         workFlowString.substring(1, workFlowString.length() - 1));
      this.getRequest().setAttribute("workFlowPermission", this.getRequest().getParameter("workFlowPermission"));
      this.getRequest().setAttribute("curFlowItem", this.getRequest().getParameter("curFlowItem"));
      
      this.getRequest().setAttribute("workFlowId", this.getRequest().getParameter("workFlowId"));
      this.getRequest().setAttribute("cur_moduleId", this.getRequest().getParameter("cur_moduleId"));
      this.getRequest().setAttribute("s_type", this.getRequest().getParameter("s_type"));
      this.getRequest().setAttribute("s_operating", this.getRequest().getParameter("s_operating"));
      this.getRequest().setAttribute("ss_moduleId", this.getRequest().getParameter("ss_moduleId"));
      
      this.getRequest().setAttribute("cellFilePath", lgpDispatchFlowService.getWorkFlowId(this.getRequest().getParameter("workFlowId")));//关联表单

    同时要关联对应的表单 进入ui拟稿界面。

    点击拟稿进入saveWorkFlowNg函数,在该函数中设置一个在重要属性:openType

    if(getRequest().getParameter("s_type").equals("receive")){
       
       this.getRequest().setAttribute("openType", "3");
      }
      else{
       
       this.getRequest().setAttribute("openType", "2");
      }

    同时设置关联的表单文件路径:this.getRequest().setAttribute("cellFilePath", lgpDispatchFlowService.getWorkFlowId(this.getRequest().getParameter("workFlowId")));

    产生用户可见的可编辑函数:LinkedHashMap<String,OaFunctionModel> functionMap = lgpDispatchFlowService.prepareEdit(user, lgpDispatchFlow, this.getRequest().getParameter("cur_moduleId"), this.getRequest().getParameter("s_type"), this.getRequest().getParameter("s_operating"));

    设置并行流程项:

    String curWorkFlowItemId = lgpDispatchFlow.getCurWorkFlowItemId();
      
      String parallelDealUser = lgpDispatchFlow.getParallelUserIds();
      String curLogonUser = "," + user.getUserId() + "^";
      if(null != parallelDealUser && parallelDealUser.indexOf(curLogonUser) > -1){
       
       curWorkFlowItemId = lgpDispatchFlow.getParallelWorkFlowItemId();
       
      }

    然后根据type类型跳转到相应的页面中

    if(this.getRequest().getParameter("s_type").equals("contract")){
       return "!/contract/LgpContract_create.action?flowId="+this.lgpDispatchFlow.getId()+"&cur_moduleId="+this.getRequest().getParameter("cur_moduleId")
          +"&s_type="+this.getRequest().getParameter("s_type")+"&s_operating="+this.getRequest().getParameter("s_operating")+"&parentModuleId="+this.getRequest().getParameter("ss_moduleId");

    在每一个action的方法中都要设置

    this.getRequest().setAttribute("workFlowId", this.getRequest().getParameter("workFlowId"));
      this.getRequest().setAttribute("cur_moduleId", this.getRequest().getParameter("cur_moduleId"));
      this.getRequest().setAttribute("s_type", this.getRequest().getParameter("s_type"));
      this.getRequest().setAttribute("s_operating", this.getRequest().getParameter("s_operating"));
      this.getRequest().setAttribute("parentModuleId", this.getRequest().getParameter("parentModuleId"));

     this.getRequest().setAttribute("flowId", this.getRequest().getParameter("flowId"));

    在对应的jsp页面上需要添加隐藏域保留工作流中的必需属性。

    <s:hidden id="s_type" name="s_type" value="%{#request.s_type}" ></s:hidden>
     <s:hidden id="s_operating" name="s_operating" value="%{#request.s_operating}" ></s:hidden>
     <s:hidden id="flowId" name="flowId" value="%{#request.flowId}"></s:hidden>

    保存对象时一定要先保存流程对象

    if(isNullOrEmptyString(flowId)){
       lgpDispatchFlowService.saveDispatch(lgpDispatchFlow,this.getRequest().getParameter("workFlowId"),user);
      }else if(isNullOrEmptyString(lgpDispatchFlow.getModuleId())){
       
       lgpDispatchFlowService.saveDistributeDispatch(lgpDispatchFlow,this.getRequest().getParameter("workFlowId"),user,org);
      }

    然后设置对象和流程的关联

    lgpContract.setDispatchflowId(this.lgpDispatchFlow.getId());

    最后执行对象的保存操作并在请求中添加对应的工作流必需属性

    在创建完对象后在重定向到edit.action中这样对象就关联到了工作流上,后续的所有操作都是在基于工作流基础上的对象的操作

  • 相关阅读:
    codevs2894、2837、1669、2503、3231
    poj2528
    HDU 1542 Atlantis(矩形面积并)
    Light OJ 1080
    陶哲轩实分析 2.2节 习题试解
    Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题
    css3模糊图片
    高速掌握Lua 5.3 —— I/O库 (1)
    覆盖率測试工具gcov的前端工具_LCOV_简单介绍
    MySQL显示状态信息
  • 原文地址:https://www.cnblogs.com/moonfans/p/3397176.html
Copyright © 2020-2023  润新知