准备步骤:

  1. 数据源管理
    2. 子系统新建
    3. 新建程序项目:项目英文名称和项目路径都是缩写
    4. 新增代码项:注意所属地区的值是2,注意申请状态的代码项
    5. 模块新建:XXX项目-yy管理-zz管理- 配置模块地址为各自的list 新建后配置框架权限
    6. 模块授权:后台管理-统一界面-模块管理-模块授权
    7. 用户新建:应用集成-用户管理
    8. 在子系统下新建数据表:注意很多字符串类型和必填/显示。注意status字段以及是int类型,第二张表和第一张表的连接字段。然后生成代码。

    第一张表:

    展示(list):

  2. action里面导入iuserservice和iproinfoservice,注意判断弹出页面里项目成员是否包含自己。

    新增(add)

    1.所在地区action=”belongzonemodel” onbeforenodeselect=”onBeforeNodeSelect” 县级市验证-js验证。
    2.有下拉列表的要onButtonClick=”onManager” allowInput=”false”
    3.项目经理和成员:class=”mini-buttonedit” onButtonClick=”onManager” 然后在script里面写方法,多选页面要加{param:{userGuid:guid}} 经理和成员的回调要设置mini.get.setValue/text
    4.重名验证和日期验证:新增操作的回调里面添加
    if(data.same){
    epoint.alert(data.msg);
    }else if(data.date){
    epoint.alert(data.msg);
    }
    然后action里面加service方法checName.

    修改(edit)

  3. Js里面设置经理/成员和所属地区值
    if(data.promanager){
    mini.get(“promanager”).setText(data.promanager);
    }
    if(data.prouser){
    mini.get(“prouser”).setText(data.prouser);
    }
    if(data.belongzoom){
    mini.get(“belongzoom”).setText(data.belongzoom);
    }

    2. 项目经理和成员以及他们的回调和add里面一样

    第二张表:

    配置工作流:后台管理-工作流

    1.新建过程类别
    2.新增过程
    3.配置流程材料:mis表-全部只读
    4.配置流程方法:
    都在第二张表的service
    findManager-项目经理审核(通过方法)-service里面写方法
    Overday lowerday (判断条件)
    UpdateCount(次数+1)设置在倒数第二步时,表示处理完这步+1
    UpdateStatus(更新状态)一共有4-5个方法,要设置类全路径为service,设置两个参数-rowguid和status
    5.配置申请人-来源方式为表单字段-操作者名字
    6.修改:待办事宜标题为类似:[#=申请人#]的出差申请
    7.配置工作流程:
    新建人工活动和变迁,所有的流程处理页面都是workflow的前台页面
    申请-项目经理审核的变迁里设置通过方法获取findmanager。提交的事件为更新状态为未审核,保存为草稿。
    项目经理审核,即分流点设置处理人为变迁定义的处理人,变迁定义的处理人设置所在部门为流程发起人所在部门,选择范围为经理。退回的事件为更新状态为退回。
    部门经理(超过5)到通知申请人(小于5)的变迁设置处理人为变迁定义的处理人,预设为流程发起人。最后的变迁使用目标活动的处理人。

    展示(list):

    1. 显示树节点

    主要在action里面,注意nodeInfo的getter setter方法,在list页面里要设置nodeInfo隐藏域和树的代码
      style=”width: 100%; height: 100%“ autoLoad=“false”
      action=“getTreeModel” showTreeIcon=“true” textField=“text”
      idField=“id” parentField=“pid” onNodeClick=“onTreeNodeClick”
      resultAsTree=“false”>
      在js里面写
      function onTreeNodeClick(e){
      var nodeId=e.node.id;
      var nodeType=e.node.nodeType;
      var nodeInfo=nodeId+”;”+nodeType;
      mini.get(“nodeInfo”).setValue(nodeInfo);
      epoint.refresh([‘datagrid’,’nodeInfo’]);
      }
      和第一张表的联动项的标题有超链接,注意js里面有代码。

      2. 树表联动

      主要在action里面,节点名称要因地制宜。

      3. 显示项目名称的超链接,链接到该项目的工作流

      先设置title,放置一个renderer
      //预算信息页的渲染
      function rendererTitle(e){
      var row=e.row;
      var str=”“+row.title+”“;
      return str;
      }


      function onTitleClick(text,url,rowguid){
      if(url){
      epoint.openDialog(text,url,searchData);
      }else{
      epoint.openDialog(text,”frame/pages/ccgl/binuessinfo/binuessinfodetail?guid=”+rowguid);
      }
      }
      这里url表示如果能找到的就显示列表,如果不能找到就是详情。
      这里要新建select页面,复制list页面,修改js为
      //列表渲染
      function onBinuessSelect(e){
      var proGuid=e.row.rowguid;
      var proName=e.row.proname;
      var proInfo=proGuid+”;”+proName;
      var str=” “+proName+”“;
      return str;
      }

      function onProjectBudget(budgetInfo){
      epoint.closeDialog(budgetInfo);
      }


      XX申请(workflow):
      1.设计申请人字段,applyguid为hidden,applyname为outputtext
      2.设计proguid-与第一张表关联的字段,以及他为button-edit,onButtonClick=”onProClick”
      function onProClick(){
      epoint.openDialog(“预算列表”,
      “frame/pages/ccgl/proinfo/proinfolistselect?id=1”, onProClickBack);
      }

      function onProClickBack(proInfo){
      if (proInfo && proInfo != “close”) {
      var val = proInfo.split(“;”);
      mini.get(“proguid”).setValue(val[0]);
      mini.get(“proguid”).setText(val[1]);
      }
      }
      其中id=1表示新建的select文档id为1,在projectlistaction里面有private String id;pageload里面写id = getRequestParameter(“id”);然后在fetchdata里面判断是不是弹出页面,如果是弹出页面就判断用户是否包含当前用户。

      以及Js里面写
      if(data.applyname){
      mini.get(“appayname”).setValue(data.applyname);
      }
      if(data.proname){
      mini.get(“proguid”).setText(data.proname);
      }
      显示中文。

      注:workflowaction设置默认值
      if(item.getActivityName().equals(“申请”)) {
      if (EpointDateUtil.compareDateOnDay(dataBean.getEndtime(), dataBean.getStarttime()) <= 0) {
      addCallbackParam(“msg”, “结束时间不能早于当前时间”);
      return false;
      }
      int money=Integer.parseInt(dataBean.getBudgetmoney());
      if (money<0 || money>2000) {
      addCallbackParam(“msg”, “预算金额应该在0~2000之间”);
      return false;
      }
      }

      try {
      if (StringUtil.isBlank(rowguid)) {
      rowguid = UUID.randomUUID().toString();
      dataBean.setRowguid(rowguid);
      dataBean.setOperatedate(new Date());
      dataBean.setOperateusername(userSession.getDisplayName());
      Proinfo proinfo = iProinfoService.find(dataBean.getProguid());
      dataBean.setBinuessname(proinfo.getProname());
      dataBean.setDays(EpointDateUtil.getIntervalDays(dataBean.getStarttime(), dataBean.getEndtime()));
      dataBean.setPviguid(item.getProcessVersionInstanceGuid());
      dataBean.setStatus(10);
      service.insert(dataBean);
      }
      else {
      rowguid = dataBean.getRowguid();
      dataBean.setOperatedate(new Date());
      service.update(dataBean);
      }
      }

      注意:
      负责人的js里面是setText
      最后更新状态要切换用户同意之后才会显示
      Service里面void不要return
      方法在右边三个点里面搜索