OpenJWeb3.1中的简易审批流设置介绍



OpenJWeb简易审批流设置

 

 

    本文介绍在OpenJWeb平台中如何进行简易审批流的配置。用户可自定义流程状态位、审批流设置,在列表页中生成审批按钮,并执行审批操作。

一、 前提条件

        用户已经在openjweb平台中生成了数据库表、增删改查页面,见下图:

 

此功能对应的数据库表yk_user,对应的子系统yktxcms,列表页和编辑页分别对应:

D:\project\openjweb\webapps\WEB-INF\jsp\yktxcms\listYkUser.jspeditYkUser.jsp

 

二、 增加流程状态位定义

 

        流程状态包括初始(00)、审批通过(01)、审批拒绝(02)、冻结3(03)

        找到下面的功能菜单:

        

       说明:00状态系统已默认生成。可录入其他状态位,见下图:

 

注意类属性名使用系统默认的flowStatus,其他未填写的字段可忽略。

填写完成以后,演客空间有以下状态字段:

 

下面定义审批流,打开左侧菜单的业务流程设置:

 

需要定义以下几种审批流:

00-01 审批通过  前置状态:初始,后置状态:审批通过

00-02 审批拒绝  前置状态:初始,后置状态:审批拒绝

01-03 冻结3天  前置状态:审批通过,后置状态:冻结3

03-01 取消冻结  前置状态:冻结3天,后置状态:审批通过

点业务流程设置界面的“增加”按钮,见下图:

 

 

 

字段说明:

状态位字段名:统一为flowStatus

前置状态:审批操作前的flowStatus状态位的值

结果状态:审批操作后的flowStatus状态位的值

动作码:主要用于列表页JS中传递动作参数。

动作名称及页面按钮文字中文:按钮显示的名称。

按钮顺序:在列表页中的按钮顺序。

权限码:设置权限码。如果设置了权限码,只有把此权限码授权给指定的人或角色才能显示相应的审批按钮。

下面是设置好了流程状态的审批流列表:

 

三、 代码修改

 

3.1 修改jsp文件

 

目前简易审批流暂时没有自动生成代码,可参考以下过程修改。

打开D:\project\openjweb\webapps\WEB-INF\jsp\yktxcms\listYkUser.jsp,找到

${listButtonExpr} ,在这段字段串上一行插入${chkHtmlStr}

注意最好是用editplus打开文件,openjweb中生成的jsp文件绝大部分都是utf-8字符集。

 

3.2 修改action文件

打开D:\project\openjweb\src\java\com\yktx\action\YkUserAction.java

找到protected void initAction() 方法,在此方法末尾

this.setPageLoader(loader);

下面增加一行:

this.createSimpleFlowButton();//生成简易审批流按钮

然后将下面两个方法的代码加到YkUserAction.java代码最后的}的上面:

 

private void createSimpleFlowButton()

{

logger.info("开始调用createSimpleFlowButton.............");

IDBSupportService service = (IDBSupportService)ServiceLocator.getBean(this.getDbService());

try

{

List flowList = service.findByHqlQuery("from org.openjweb.core.entity.WfStatusFlow where entityName='com.yktx.entity.YkUser' order by sortNo");

this.chkHtmlStr="";

if(flowList!=null&&flowList.size()>0)

{

CommUser tmpUser = null;

 

try

{

tmpUser = (CommUser) (SecurityContextHolder.getContext()

.getAuthentication().getPrincipal());//用于数据权限

}

catch(Exception ex)

{

//用户超时

logger.info("用户超时,无法获得列表权限!");

}

for(int i=0;i<flowList.size();i++)

{

WfStatusFlow flowEnt = (WfStatusFlow)flowList.get(i);

String sTmp =  "";

String sAuthCode = flowEnt.getAuthCode();

//如果没设置按钮权限,则允许显示按钮

if(sAuthCode==null||sAuthCode.trim().length()==0||(sAuthCode!=null&&sAuthCode.trim().length()>0&&tmpUser!=null&&tmpUser.hasAuth(sAuthCode)))

{

//logger.info("sAuthCode:");

//logger.info(sAuthCode);

//sTmp = " <input  style=\" color:#000000; font-size:12px; width:61px; height:20px; padding:3px; border:0px;background-image:url("+request.getContextPath()+"/images/bt.gif)\"  name=\"\" type=\"button\" value=\""+flowEnt.getBtnTextCn()

//+"\" οnclick=\"doBatchWorkFlow('"+flowEnt.getActionCode()+"','"+flowEnt.getResultStatus()+"','"+flowEnt.getActionName()+"')\"/>\r\n";

sTmp = " <input  class=\"button\"  name=\"\" type=\"button\" value=\""+flowEnt.getBtnTextCn()

+"\" οnclick=\"doBatchWorkFlow('"+flowEnt.getActionCode()+"','"+flowEnt.getResultStatus()+"','"+flowEnt.getActionName()+"')\"/>\r\n";

}

else

{

//logger.info("other...........");

}

this.chkHtmlStr+=sTmp;

}

}

}

catch(Exception ex)

{

logger.error(ex.toString());

this.addActionError(ex.toString());

 

}

}

 

 

 

public String doBatchWorkFlow() throws DataAccessException, Exception  

{

this.initAction();

IDBSupportService service = (IDBSupportService)ServiceLocator.getBean(this.getDbService());

map = DropdownListBoxUtil.getListMaps(this.getDbService(),this.getEntityClassName(), request);

try

{

if(this.getSelectedIds()!=null&&this.getSelectedIds().length>0)//如果有被选择记录

{

//根据不同的流程状态进行不同的处理,目前只测试发布生成静态页面

//如果批量审批不需要工作流,可直接使用IDBSupportService

IYkUserService flowService = (IYkUserService)ServiceLocator.getBean("IYkUserService");

String sMess = "";

try

{

sMess = flowService.doBatchWorkFlow(this.getActCode(),this.entityClassName, this.getSelectedIds(), this.getDestFlowStatus(),request,this.getNameSpaceActionName());

if(sMess!=null&&sMess.trim().length()>0&&!sMess.equals("操作成功!"))

{

this.addActionError("操作失败!");  //在页面显示错误信息!!----增加时间2010-08-12

return "error";

}

 

}

catch(Exception ex)

{

//this.addActionError(ex.toString());

this.addActionError("操作失败!");

logger.error("审批流执行异常:"+ex.toString());

return "error";

}

}

else

{

logger.info("没有被选择的记录!");

}

 

return this.gotoPage();//不跳到首页,而是跳到当前页

//return this.firstPage();

}

catch(Exception ex)

{

this.addActionError(ex.toString());

return "error";

}

}

 

注意上面代码中的红色字体:

com.yktx.entity.YkUser 是带类完整路径的类名。

IYkUserService  是yk_user表对应的接口,格式是I开头,类名在中间,Service结尾。

如果是其他实体则按命名规则做相应的代码修改。

 

保存后,编译代码(运行D:\project\build\01build-core.bat)。重启tomcat后,再打开演客空间列表页,见下图,增加了流程审批按钮:

 

上图中增加了4个审批按钮,对应4个审批流。可勾选多行记录批量审批。

 

四 结语

 

(1) 以后会把简易审批流的代码加到代码生成器中,开发人员不需要再手工复制修改流程相关的代码。

(2) 通过openjweb平台的简易流程设置,开发人员不需要花大量精力来编写简易审批流程序代码。

(3) Openjweb简易审批流可通过权限码授权的方式进行审批流权限控制。

 

 

OpenJWeb基础平台全部开源,购买一次性商用授权及法培训服务请联系

QQ29803446 手机18600510596 王先生

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值