准备步骤:
- 数据源管理
2. 子系统新建
3. 新建程序项目:项目英文名称和项目路径都是缩写
4. 新增代码项:注意所属地区的值是2,注意申请状态的代码项
5. 模块新建:XXX项目-yy管理-zz管理- 配置模块地址为各自的list 新建后配置框架权限
6. 模块授权:后台管理-统一界面-模块管理-模块授权
7. 用户新建:应用集成-用户管理
8. 在子系统下新建数据表:注意很多字符串类型和必填/显示。注意status字段以及是int类型,第二张表和第一张表的连接字段。然后生成代码。
第一张表:
展示(list):
- 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)
- 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隐藏域和树的代码
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
方法在右边三个点里面搜索