精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-26
关于 JOffice 的业务表单与流程的整合问题
目前JOffice中提供三种流程表单整合方式:
该表单能完成保存的操作,保存完成后,我们仅需要把其值实体的id 存至外围的流程中去即可。于是我们在以下的表单中,改造了类似的代码:
<%@page import="com.htsoft.oa.service.system.AppRoleService"%> <%@page import="com.htsoft.core.util.AppUtil"%> <%@page import="com.htsoft.oa.model.system.AppRole"%> <%@page import="org.apache.commons.lang.StringUtils"%> <%@page contentType="text/html; charset=UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/admin.css"/> <title>角色表单示例</title> <% AppRoleService appRoleService=(AppRoleService)AppUtil.getBean("appRoleService"); //用于提交时进行获取表单参数 AppRole appRole=new AppRole(); String roleId=request.getParameter("roleId"); //若原来已经存在,则加载 if(StringUtils.isNotEmpty(roleId)){ appRole=appRoleService.get(new Long(roleId)); } if("POST".equals(request.getMethod())){//保存提交值 String roleName=request.getParameter("roleName"); String roleDesc=request.getParameter("roleDesc"); String status=request.getParameter("status"); appRole.setRoleName(roleName); appRole.setRoleDesc(roleDesc); appRole.setStatus(new Short(status)); appRole.setIsDefaultIn((short)0); appRoleService.save(appRole); } request.setAttribute("appRole",appRole); String defId=request.getParameter("defId"); String taskId=request.getParameter("taskId"); %> <script type="text/javascript"> window.onload=function(){ //保存后,把业务实体的id保存至外窗口流程实例中 <% if("POST".equals(request.getMethod())){ if(defId!=null){ %> parent.document.getElementById('defParams<%=defId%>').value="roleId:<%=appRole.getRoleId()%>"; <% }else{ %> parent.document.getElementById('taskParams<%=taskId%>').value="roleId:<%=appRole.getRoleId()%>"; <% } } %> }; </script> </head> <body> <form action="roleForm.jsp" method="post"> <table class="table-info" cellpadding="0" cellspacing="1" width="98%"> <tr> <th align="center" colspan="2">角色详细信息</th> </tr> <tr> <th>角色名字</th> <td> <input type="hidden" name="defId" value="<%=defId%>"/> <input type="hidden" name="taskId" value="<%=taskId%>"/> <input type="hidden" name="roleId" value="${appRole.roleId}"/> <input name="roleName" type="text" width="400" value="${appRole.roleName}"/> </td> </tr> <tr> <th>角色状态</th> <td> <select name="status"> <option value="1" <c:if test="${appRole.status==1}">selected</c:if>>激活</option> <option value="0" <c:if test="${appRole.status==0}">selected</c:if>>禁用</option> </select> </td> </tr> <tr> <th> 描述 </th> <td> <textarea name="roleDesc" rows="5" cols="50">${appRole.roleDesc}</textarea> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="保 存 "/> </td> </tr> </table> </form> </body> </html>
以上代码部分只有一功能是跟外围流程有关的,则把业务参数传至流程实例中去。 <% if("POST".equals(request.getMethod())){ if(defId!=null){ %> parent.document.getElementById('defParams<%=defId%>').value="roleId:<%=appRole.getRoleId()%>"; <% }else{ %> parent.document.getElementById('taskParams<%=taskId%>').value="roleId:<%=appRole.getRoleId()%>"; <% } } %>
后台的流程设置我们则设计如下:
这样就可以实现整个流程与业务表单的整合,若业务表单有其他数据需要传至流程进行计算,则也是采用类似传参数方式则可。 在外围的流程加载URL表单中,其代码则如下所示: <%@page import="java.util.Iterator"%> <%@page import="java.util.Map"%> <%@page import="org.apache.commons.lang.StringUtils"%> <%@page import="com.htsoft.oa.model.flow.FormTemplate"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% Long taskId=(Long)request.getAttribute("taskId"); Long defId=(Long)request.getAttribute("defId"); FormTemplate formTemplate=(FormTemplate)request.getAttribute("formTemplate"); Map formVars=(Map)request.getAttribute("formVars"); String url=formTemplate.getFormUrl(); if(StringUtils.isNotEmpty(url)){ if(!url.startsWith("http")){//采用相对路径,则表示引用为本系统中的表单 url=request.getScheme() + "://" + request.getHeader("host") + request.getContextPath()+url; } } if(url.indexOf("?")==-1){ url+="?"; }else{ url+="&"; } if(defId!=null){ url+="defId="+defId; %> <input type="hidden" name="defParams" id="defParams<%=defId%>" /> <% }else{ url+="taskId="+taskId; %> <input type="hidden" name="taskParams" id="taskParams<%=taskId%>" /> <% } if(formVars!=null){ Iterator<String> it= formVars.keySet().iterator(); while(it.hasNext()){ String key=it.next(); Object value=(Object)formVars.get(key); System.out.println("key:" + key + " VALUE:"+ value); if(value!=null){ url=url.replace("${"+key+"}", value.toString()); } } } %> <iframe frameborder="0" width="100%" height="100%" src="<%=url%>" onload="this.height=this.contentWindow.document.body.scrollHeight"></iframe>
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-27
开源OA呀。好东东。SC了。嗯。
|
|
返回顶楼 | |
发表时间:2011-08-08
印章是金格的?
|
|
返回顶楼 | |
浏览 2622 次