一、开发准备
Ecology系统说明
ecology8.0文件页面编码为UTF-8
ecology8.0 JDK版本 1.6
ecology8.0 应用服务器为Resin
Ecology安装目录说明
• ecology:OA主程序目录
• JDK:Java目录
• Resin:应用服务器的目录
ecology主要目录说明
ecology
classbean 存放编译后的CLASS文件
js 系统中使用的JAVASCRIPT和VBSCRIPT脚本
css 系统中JSP页面使用的样式
images
images_face
images_frame 系统中使用的图片的存放目录
log 系统中日志存放目录
sqlupgrade升级SQL脚本目录
.
.
workflow 各功能分文件夹存放每个功能的文件
WEB-INF
lib 系统依赖Jar文件目录
prop 系统配置文件存放
service 系统的接口配置文件的存放
securitylog 安全补丁日志
securityXML自定义安全补丁配置目录
二、开发环境搭建
步骤1:从服务器上拷贝WEAVER/ecology代码
从服务器拷贝ecology相关代码到本地,目录服务器上文件如下图,需拷贝ecology、Resin,如果本机已安装JDK则可以不需拷贝JDK
步骤2:把本地代码导入到myeclipse工程中
点击Finish , 之后项目会build project建立索引会有很长一段时间的等待。
步骤3:配置ecology项目环境
配置Resin 3.x
配置Ecology所需的JDK
点击Add JAR/ZIP 加入Resin->lib目录下所有的jar包
步骤4:修改ecology项目中数据库配置文件
请一定要记得修改数据库配置文件中的数据库配置
配置文件:D:/weaver/ecology/WEB-INF/prop/weaver.properties
SQLServer数据库:
步骤5:Resin配置文件
配置文件Resin/conf/resin.conf配置ecology8所在目录。root-directory为本地ecology8的路径。
修改默认Resin服务监听端口
步骤6:启动运行
点击应用服务Resin3–Star
Console控制台出现以下信息,则代表启动成功!
三、Ecology8系统里一个jsp页面通常需要包含什么内容
• 相关的操作的类、JSP标签、样式等
• 右键菜单
• 多语言标签
• 操作权限
相关的操作的类、jsp标签、样式等
<%@ page language="java" contentType="text/html; charset=UTF-8" %><!--指定页面编码-->
<%@ page import="weaver.general.Util,weaver.hrm.common.*,weaver.conn.*" %><!--引入相关的类-->
<%@ page import="weaver.file.*,net.sf.json.*,java.util.*,java.text.*,weaver.common.DataBook" %>
<%@ include file="/systeminfo/init_wev8.jsp" %><!--引入系统页面,用于判断是否登录,以及获取user对象-->
<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea"%><!--引入系统标签-->
<%@ taglib uri="/browserTag" prefix="brow"%><!--引入浏览按钮标签-->
<script language=javascript src="/js/ecology8/docs/docSearchInit_wev8.js"></script><!—高级搜索-->
1
2
3
4
5
6
7
右键菜单
<%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %>
<%
if(HrmUserVarify.checkUserRight("HrmCountriesAdd:Add", user)){ //判断是否有对应的权限,有则显示该菜单
RCMenu += "{"+SystemEnv.getHtmlLabelName(82,user.getLanguage())+",javascript:doAdd();,_self} " ;
/*标签显示菜单名,如 82 为新增*/
RCMenuHeight += RCMenuHeightStep;
}
%>
<%@ include file="/systeminfo/RightClickMenu_wev8.jsp" %>
1
2
3
4
5
6
7
8
9
多语言标签
<%=SystemEnv.getHtmlLabelName(21995,user.getLanguage())%>
这样的形式来表示,其中的数字21995,就是表示高级搜索 ,同时可以通过“select labelname from htmllabelinfo where indexid=21995 and languageid=7”来获取到“高级搜索”这个显示名称;
languageid=7表示中文显示名称,languageid=8表示英文显示名称,languageid=9表示繁体显示名称.
如何在数据中添加多语言版本的标签?
举个栗子:
添加的标签请使用负的ID,这样可以不与之前的标签产生冲突,方便后期维护升级,ID值通过sql获取
Select min(id)-1 from HtmlLabelIndex
delete from HtmlLabelIndex where id=-11705
GO
delete from HtmlLabelInfo where indexid=-11705
GO
INSERT INTO HtmlLabelIndex values(-11705,‘多语言标签’)
GO
INSERT INTO HtmlLabelInfo VALUES(-11705,‘多语言标签’,7)
GO
INSERT INTO HtmlLabelInfo VALUES(-11705,’ Multilingual label ',8)
GO
INSERT INTO HtmlLabelInfo VALUES(-11705,‘多語言標簽’,9)
GO
操作权限
通过sql先在数据库添加一个需要的权限
delete from SystemRightDetail where rightid =-1031
GO
delete from SystemRightsLanguage where id =-1031
GO
delete from SystemRights where id =-1031
GO
insert into SystemRights (id,rightdesc,righttype) values (-1031,‘合同管理’,‘7’)
GO
insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (-1031,9,‘合同管理’,‘合同管理’)
GO
insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (-1031,8,‘oaproject contractManage’,‘oaproject contractManage’)
GO
insert into SystemRightsLanguage (id,languageid,rightname,rightdesc) values (-1031,7,‘合同管理’,‘合同管理’)
GO
insert into SystemRightDetail (id,rightdetailname,rightdetail,rightid) values (-1031,‘合同管理’,‘oaproject_contractManage’,-1031)
GO
在要需要控制权限的jsp页面上加上以下的代码就可以
<%@ include file="/systeminfo/init.jsp" %>
<%
if(!HrmUserVarify.checkUserRight(“oaproject_contractManage “, user) ) {
response.sendRedirect(”/notice/noright.jsp”);
return;
}
%>
四、E8控件说明
Tab组件
效果图:
实现方式有以下两种:
Iframe形式引用:
$(function(){
$('.e8_box').Tabs({
getLine:1,// 是否需要下标指示器,默认为1
iframe:"tabcontentframe",//tab页要加载的内容iframe的ID
mouldID:"<%= MouldIDConst.getID("formmode")%>",//指定图标id
staticOnLoad:true,//是否使用静态onload事件,默认是false。即将onload事件写在iframe中,如:<iframe onload="update()"/>如果设置为true,那么iframe中一定要写onload="update()"
objName:"供货记录"//指定显示的名称
});
});
1
2
3
4
5
6
7
8
9
非Iframe形式引用:
<jsp:include page="/systeminfo/commonTabHead.jsp">
<jsp:param name="mouldID" value=" formmode " />//指定图标id
<jsp:param name="navName" value="供货记录" />//指定显示的名称
</jsp:include>
<jsp:include page="/systeminfo/commonTabFoot.jsp"></jsp:include>
1
2
3
4
5
所需引入js
浏览框组件-标签
效果图:
所需引入js:
<%@ taglib uri="/WEB-INF/tld/browser.tld" prefix=“brow”%>
常用属性说明:
<brow:browser //浏览按钮组件标签
name=“workflowid” //浏览框的id和name
viewType=“0” //字段类型(0:主表字段,1:明细表字段) 用于流程中,该属性非必要
hasBrowser=“true” //显示放大镜
hasAdd=“false” //显示添加按钮
browserUrl="/systeminfo/BrowserMain.jsp?url=/workflow/workflow/WorkflowBrowser_frm.jsp"
//浏览框打开的页面地址
isMustInput=“2” //是否必填 字段是否必填(默认是0) 2:必填
isSingle=“true” //是否单选
hasInput=“true” //是否显示输入框
completeUrl="/data.jsp?type=workflowBrowser&isTemplate=0" //自动联想的地址
width=“300px” //浏览框的宽度
browserValue="" //默认浏览框隐藏域的值
browserSpanValue=""//默认浏览框显示的值
onPropertyChange="" //浏览按钮对应的隐藏域的触发的onpropertychange事件调用的方法
_callback=""//执行完browserUrl事件后的回调方法,该方法默认传递四个参数(event,datas,name,_callbackParams)
_callbackParams=""//_callback所需要的参数
/>
单人员浏览框(最多只能选择一个人员)例:
<brow:browser viewType="0" id="pName" name="pName" browserValue=""
browserUrl="/systeminfo/BrowserMain.jsp?url=/hrm/resource/ResourceBrowser.jsp?selectedids=" hasInput="true" isSingle="true" hasBrowser="true" isMustInput='1' completeUrl="/data.jsp"
linkUrl="javascript:openhrm($id$)" width="165px" browserSpanValue="" />
1
2
3
多人员浏览框(可以选择多个人员)例:
<brow:browser name="userid" viewType="0" hasBrowser="true" hasAdd="false"
browserUrl='<%="/systeminfo/BrowserMain.jsp?url=/hrm/resource/MutiResourceBrowser.jsp" %>'
isMustInput="2" isSingle="false" hasInput="true" completeUrl="/data.jsp?type=1"
width="300px" browserValue='' browserSpanValue=''/>
1
2
3
4
5
表单布局组件
效果图:
点击查询条件2后面的箭头显示如下:
是否显示,控制不同的item和group显示或者隐藏
注意:
wea:layout,wea:group,wea:item都必须成对出现。
wea:layout: 表示一个完整的布局,页面上可以出现多个布局。
wea:group: 必须嵌套在wea:layout中使用,表示布局的一个组,类似于table
wea:item: 必须嵌套在wea:group中使用,表示布局中某个组里的一个单元格,类似td
所需标签:
<%@ taglib uri="/WEB-INF/weaver.tld" prefix="wea" %>
<%@ include file="/systeminfo/init_wev8.jsp" %>
<%@ taglib uri="/WEB-INF/tld/browser.tld" prefix="brow" %>
1
2
3
例子:
<wea:layout type="fourCol">
<wea:group context="常用条件" attributes="{'class':"e8_title e8_title_1",'samePair':'showgroup'}">
<wea:item>标题</wea:item>
<wea:item> <!-- 字段必填的标识,只控制后面感叹号的显示, -->
<wea:required id="aaspan" required="true">
<input type="text" name="aa" id="aa"/> </wea:required>
</wea:item>
<wea:item>编号</wea:item>
<wea:item>
<input type="text" name="bb" id="bb" value="b"/>
</wea:item>
<wea:item>创建日期</wea:item>
<wea:item attributes="{"colspan":"3"}"><!-- 合并单元格,合并后面3列 -->
<select class="inputStyle" name="ccc" id="ccc">
<option value="">全部</option>
<option value="1">今天</option>
<option value="2">本周</option>
<option value="3">本月</option>
</select>
</wea:item>
<wea:item>批准日期</wea:item>
<wea:item>
<select name="ccc" id="ccc">
<option value="">全部</option>
<option value="1">今天</option>
<option value="2">本周</option>
<option value="3">本月</option>
</select> </wea:item>
</wea:group> <!-- groupDisplay 隐藏标题,itemAreaDisplay 隐藏group里面的所有的单元格 -->
<wea:group context="查询条件2"
attributes="{'class':"e8_title e8_title_1",'groupDisplay':'','itemAreaDisplay':'none'}">
<wea:item>标题</wea:item>
<wea:item> <!-- 字段必填的标识,只控制后面感叹号的显示,表单提交时还需要字段值进行控制 -->
<wea:required id="aaspan" required="true">
<input type="text" name="aa" id="aa"/>
</wea:required>
</wea:item>
<wea:item>人员</wea:item>
<wea:item>
<brow:browser viewType="0" id="pName" name="pName" browserValue=""
browserUrl="/systeminfo/BrowserMain.jsp?url=/hrm/resource/ResourceBrowser.jsp?selectedids="
hasInput="true" isSingle="true" hasBrowser="true" isMustInput='1' completeUrl="/data.jsp"
linkUrl="javascript:openhrm($id$)" width="165px" browserSpanValue=""/>
</wea:item>
<wea:item>是否显示</wea:item>
<wea:item attributes="{"colspan":"3"}"><!-- 合并单元格,合并后面3列 -->
<select class="inputStyle" name="isshow" id="isshow" onchange="Onchange(this)">
<option value="0">显示</option>
<option value="1">不显示</option>
<option value="2">常用条件不显示</option>
</select> </wea:item>
<wea:item attributes="{'samePair':'showdiv'}">批准日期</wea:item>
<wea:item attributes="{'samePair':'showdiv'}">
<select name="ccc" id="ccc">
<option value="">全部</option>
<option value="1">今天</option>
<option value="2">本周</option>
<option value="3">本月</option>
</select>
</wea:item>
</wea:group>
</wea:layout>
<script type="text/javascript">
function Onchange(obj) {
if (obj.value == "0") {
showEle("showdiv", "true");//显示指定属性的单元格
showGroup("showgroup", "true");//显示指定属性的
group
} else if (obj.value == "1") {
hideEle("showdiv", "true");//隐藏指定属性的单元格
} else if (obj.value == "2") {
hideGroup("showgroup", "true");//隐藏指定属性的group
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
可编辑表格
效果图:
所需js:
示例:
<script type="text/javascript">
var groupAction = null;
jQuery(document).ready(function(){
var initjsondatas = [[{'name': 'id', 'value': '11','iseditable': 'true','type': 'checkbox'},
{'name': 'fieldid', 'value': '3', 'label': '程序媛', 'iseditable': 'true','type': 'browser'},
{'name': 'wb','value': '程序媛','iseditable': true, 'type': 'input' },
{'name': 'xlk','value': '1', 'iseditable': true, 'type': 'select'},
{'name': 'orderid','value': '1', 'iseditable': true, 'type': 'input'}
], [{'name': 'id', 'value': '12','iseditable': 'true','type': 'checkbox'},
{'name': 'fieldid', 'value': '14', 'label': 'cjr', 'iseditable': true, 'type': 'browser'},
{'name': 'wb','value': 'cjr','iseditable': true,'type': 'input'},
{'name': 'xlk','value': '2','iseditable': true, 'type': 'select'},
{'name': 'orderid','value': '2', 'iseditable': 'true', 'type': 'input'}]]
var item_browser = "<span class='browser' viewType='0' _callback='UserCallBack' _callbackParams='_#rowIndex#' hasInput='true' name='fieldid' getBrowserUrlFn='getBrowserUrlFn' isMustInput='1' isSingle='false' completeUrl='/data.jsp' ></span>" ;
var items=[
{"10%",colname:"浏览按钮<SPAN class=".e8tips" style="CURSOR: hand" id=remind_m title="<%=tiptitle %>"><IMG id=ext-gen124 align=absMiddle src="/images/remind_wev8.png"></SPAN>",itemhtml:item_browser},
{"20%",colname:"文本框",itemhtml:"<input name='wb' id='wb' type='text' value='默认值' />"},
{"20%",colname:"下拉框",itemhtml:"<select name='xlk' id='xlk' ><option value=''>全部</option><option value='1'>AA</option><option value='2'>BB</option></select>"},
{"20%",display:'none',colname:"排序",itemhtml:"<input name='orderid' id='orderid' type='text' />"}
];
var option = {
basictitle:"可编辑表格标题。。。",
optionHeadDisplay:"none",
colItems:items,
container:"#FieldList", //显示容器的id
configCheckBox:true,
usesimpledata:true, //true|fase 当值为true时,则该可编辑表格默认以初始化数据初始化,初始化的具体数据配置详见initdatas
initdatas:initjsondatas,
canDrag:true,
orderField:'orderid',
//addrowCallBack:marcallback,//添加行时,回调的方法
checkBoxItem:{"itemhtml":'<input name="id" class="groupselectbox" type="checkbox" value="-1">',"5%"}
};
groupAction=new WeaverEditTable(option);
jQuery("#FieldList").append(groupAction.getContainer());
});
function deleteAction(){
//top.Dialog.confirm("<%=SystemEnv.getHtmlLabelNames("15097",user.getLanguage())%>",function(){
groupAction.deleteRows();
//});
}
</script>
</wea:item>
</wea:group>
</wea:layout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
分页控件
效果图:
所需js:
<%@ taglib uri="/WEB-INF/weaver.tld" prefix=“wea”%>
方式1.查询数据表示例:
<form action="demo_edittableoperation.jsp" method="post" id="weaver" name="weaver"><wea:layout type="fourCol">
<wea:group context="数据列表">
<wea:item attributes="{'isTableList':'true','colspan':'full'}">
<% String orderby = " id "; //排序字段
String tableString = ""; //定义表格xml数据
String backfields = " * "; //查询的字段
String fromSql = " HrmResource ";//查询的表名或者视图名
String sqlWhere = " 1=1 "; //查询条件
tableString = " <table instanceid="db_list" tabletype="checkbox" pagesize="5" >" + //指定分页条数和初始化id以及是否有复选框
" <checkboxpopedom id="checkbox" popedompara="column:id" showmethod="weaver.oatest.DemoUtil.getCanCheck" />" +//用于控制checkbox 框是否可用
" <sql backfields="" + backfields + "" sqlform="" + fromSql + "" sqlwhere="" + Util.toHtmlForSplitPage(sqlWhere) + "" sqlorderby="" + orderby + "" sqlprimarykey="id" sqlsortway="asc" sqlisdistinct="false" />" + " " +
" <head>" +
" <col width="10%" text="数据ID" column="id" orderkey="id" />" +
" <col width="20%" text="数据名称" column="lastname" />" +
" <col width="20%" text="用户名称" column="loginid" />" +
" </head>" +
" <operates>" +//相关操作
" <popedom column="id" otherpara="column:userid" transmethod="weaver.oatest.DemoUtil.getCanOperation"></popedom> " +//用于控制操作菜单是否可用,返回的ArrayList的序列对应下面的index
" <operate href="javascript:onDel();" text="" + SystemEnv.getHtmlLabelName(91, user.getLanguage()) + "" otherpara="column:loginid" target="_self" index="0"/>" +
" <operate href="javascript:onshowlog();" text="" + SystemEnv.getHtmlLabelName(83, user.getLanguage()) + "" otherpara="column:loginid" target="_self" index="1"/>" + " " +
"</operates>" +
" </table>"; %>
<wea:SplitPageTag tableString='<%=tableString%>' mode="run"/> <!-- 显示分页数据 --> </wea:item>
</wea:group></wea:layout></form>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Java验证复选框代码:
/**
* 获取复选框能否被选中
* @param id
* @return
*/
public String getCanCheck(String id) {
if (Util.getIntValue(id) % 2 == 0) {
return "true";//返回true 标识复选框可选
} else {
return "false";//表示复选框不可选,进行隐藏复选框
}
}
1
2
3
4
5
6
7
8
9
10
11
12
/**
* 获取能不能进行操作,进行权限判断
* @param id
* @param userid
* @return
*/
public ArrayList getCanOperation(String id, String userid) {
ArrayList resultlist = new ArrayList();
resultlist.add("true"); //对应第一个操作显示
resultlist.add("true"); //对应第二个操作显示,false表示不显示
return resultlist;
}
1
2
3
4
5
6
7
8
9
10
11
12
方式2.查询外部数据示例:
<form action="demo_edittableoperation.jsp" method="post" id="weaver" name="weaver"><wea:layout type="fourCol">
<wea:group context="数据列表">
<wea:item attributes="{'isTableList':'true','colspan':'full'}">
<% String tableString = ""; //定义表格xml数据
// 指定分页条数和初始化id以及是否有复选框 以及数据来源 datasource表示数据来源 sourceparams表示传入参数参数格式为"name:value+name1:value1"多个参数用加号连接
tableString = " <table instanceid="ds_list" tabletype="checkbox" datasource="weaver.oatest.DemoUtil.getDemoData" sourceparams="loginid:" + user.getUID()
+ "+departmentid:" + user.getUserDepartment() + "" pagesize="5" >" + " <checkboxpopedom id="checkbox" popedompara="column:id" showmethod="weaver.oatest.DemoUtil.getCanCheck" />" +//用于控制checkbox 框是否可用
" <sql backfields="*" sqlform="tmptable" sqlwhere="" sqlorderby="" sqlprimarykey="id" sqlsortway="asc" sqlisdistinct="false" />" +
" <head>" + " <col width="10%" text="数据ID" column="id" orderkey="id" />" +
" <col width="20%" text="数据名称" column="lastname" />" +
" <col width="20%" text="用户名称" column="loginid" />" +
" </head>" +
" <operates>" +//相关操作
" <popedom column="id" otherpara="column:loginid" transmethod="weaver.oatest.DemoUtil.getCanOperation"></popedom> " +//用于控制操作菜单是否可用
" <operate href="javascript:onDel();" text="" + SystemEnv.getHtmlLabelName(91, user.getLanguage()) + "" otherpara="column:loginid" target="_self" index="0"/>" +
" <operate href="javascript:onshowlog();" text="" + SystemEnv.getHtmlLabelName(83, user.getLanguage()) + "" otherpara="column:loginid" target="_self" index="1"/>" +
" </operates>" +
" </table>";
%>
<wea:SplitPageTag tableString='<%=tableString%>' mode="run"/> <!-- 显示分页数据 --> </wea:item>
</wea:group></wea:layout></form>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Java封装数据如下:
/**
* 封装分页控件需要显示的数据
* @param user 当前操作人
* @param otherparams 传入参数
* @param request
* @param response
* @return
*/
public List<Map<String, String>> getDemoData(User user, Map<String, String> otherparams, HttpServletRequest request, HttpServletResponse response) {
List<Map<String, String>> data = new ArrayList<Map<String, String>>();
String loginid = otherparams.get("loginid");
RecordSet rs = new RecordSet();//模拟外部数据查询
rs.executeSql("select * from HrmResource");
while (rs.next()) {
Map<String, String> d = new HashMap<String, String>();
d.put("id", rs.getString("id"));
d.put("lastname", Util.null2String(rs.getString("lastname")));
d.put("loginid", Util.null2String(rs.getString("loginid")));
data.add(d);
}
rs.writeLog("getDemoData 传入参数::" + loginid);
return data;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
弹出框组件
效果图:
从父页面打开弹窗
引用:
<script language="javascript" src="/wui/theme/ecology8/jquery/js/zDialog_wev8.js"></script>
1
参考代码:
<script language="javascript" type="text/javascript">
//在其子页面中,调用此方法打开相应的界面
function openDialog(title, url) {
var dlg = new window.top.Dialog();//定义Dialog对象
dialog.currentWindow = window;
dlg.Model = true;
dlg.Width = 500;//定义长度
dlg.Height = 400;
dlg.URL = url;//需要打开弹出的页面
dlg.Title = title;//弹出框头标识
dlg.show();
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
在弹出框获取相关对象
//在被打开的页面中,使用如下语句获取父窗口对象:
parentWin = parent.getParentWindow(window);
//在被打开的页面中,使用如下语句获取Dialog对象:
dialog = parent.getDialog(window);
具体示例:
function openDialog() {
var dlg = new window.top.Dialog(); //定义Dialog对象
dlg.currentWindow = window;
dlg.Model = false;
dlg.Width = 1060; //定义长度
dlg.Height = 500;
dlg.URL = "/gsoa/oaproject/demo.jsp";
dlg.Title = "新建数据";
dlg.maxiumnable = true;
dlg.show();
window.dialog = dlg;
}
1
2
3
4
5
6
7
8
9
10
11
12
右键菜单
效果图:
示例:
<%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %>
<%
RCMenu += "{提交表单,javascript:doSubmit(),_self} ";
RCMenuHeight += RCMenuHeightStep;
RCMenu += "{返回,/main.jsp,_self} ";
RCMenuHeight += RCMenuHeightStep;
%>
<%@ include file="/systeminfo/RightClickMenu_wev8.jsp" %>
1
2
3
4
5
6
7
8
其中上下两行include 为固定格式
weaverTree树形组件
效果图:
所需引入js:
<link rel="stylesheet" href="/css/ecology8/request/leftNumMenu_wev8.css" type="text/css" />
<script type="text/javascript" src="/js/ecology8/request/leftNumMenu_wev8.js"></script>
<link rel="stylesheet" href="/wui/common/jquery/plugin/zTree/css/zTreeStyle/zTreeStyle_wev8.css" type="text/css">
<script type="text/javascript" src="/wui/common/jquery/plugin/zTree/js/jquery.ztree.core_wev8.js"></script>
<%@ include file="/systeminfo/leftMenuCommon.jsp" %>
1
2
3
4
5
必须包含头部声明
显示区域
<div class="zDialog_div_content">
<table cellspacing="0" cellpadding="0" class="flowsTable" style="100%;height:100%;" >
<tr>
<td class="leftTypeSearch">
<div>
<span class="leftType" onclick="reload()">菜单分类<span id="totalDoc"></span></span>
<span class="leftSearchSpan">
<input type="text" class="leftSearchInput" style="110px;"/>
</span>
</div>
</td>
<td rowspan="2"></td>
</tr>
<tr>
<td style="23%;" class="flowMenusTd">
<div class="flowMenuDiv" >
<div class="ulDiv">
<div id="deeptree" class="cxtree" CfgXMLSrc="/css/TreeConfig.xml" style="overflow:hidden;">
</div>
</div>
</td>
</tr>
</table>
</DIV>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
树形组件数据和脚本
<script type="text/javascript">
var demoLeftMenus=[
{
name:"一级菜单01",
//attr表示自定义属性,里面可以放跟业务相关的数据,例如在待办中可以放typeid表示流程类别的ID
attr:{
typeid:"01"
},
//submenus表示子菜单(子菜单可以嵌套,但是在本例中只写了两级菜单)
submenus:[
{
name:"二级类型0101",
//这里的workflowid和nodeids是根据流程路径的类型确定的
//你可以放其他的属性,比如说如果这个菜单用于文档,那么这个地方可以放文档目录的ID
attr:{
workflowid:"0101",
nodeids:"87654321"
},
//二级菜单的数字
numbers:{
//菜单标题后面显示的数字(可以有任意个,但是不要放太多,否则页面样式没法处理)
//下面四个属性分别代表流程中的四种状态;可以根据你的实际需求在这里放入任意属性
flowNew:"1",
flowResponse:"0",
flowOut:"0",
flowAll:"7"
}
}
],
//一级菜单的数字
numbers:{
flowNew:"1",
flowResponse:"0",
flowOut:"0",
flowAll:"7"
}
}
,
{
name:"一级菜单02",
attr:{
typeid:"02"
},
submenus:[
{
name:"二级菜单0201",
attr:{
workflowid:"0201",
nodeids:""
},
numbers:{
flowNew:"0",
flowResponse:"0",
flowOut:"0",
flowAll:"3"
}
},
{
name:"二级菜单0202",
attr:{
workflowid:"0202",
nodeids:""
},
numbers:{
flowNew:"0",
flowResponse:"0",
flowOut:"0",
flowAll:"2"
}
}
],
numbers:{
flowNew:"5",
flowResponse:"0",
flowOut:"0",
flowAll:"17"
}
}
];
$(".ulDiv").leftNumMenu(demoLeftMenus,{
numberTypes:{
//下面的四个属性需要跟你在数据中定义的属性名称相同,本例中为flowNew、flowResponse、flowOut、flowAll
flowNew:{
hoverColor:"#EDCEAF",//鼠标悬停时显示的方块的颜色
color:"#FFA302",//普通文字的颜色
title:"新的流程"//鼠标悬停时显示的方块的title
},
flowResponse:{hoverColor:"#C0D8B8",color:"#486C3E",title:"超时的流程"},
flowOut:{hoverColor:"#DAC0E3",color:"#C325FF",title:"有反馈的流程"},
flowAll:{hoverColor:"#A6A6A6",color:"black",title:"全部流程"}
},
//是否显示值为0的数字;不写的话默认为false
showZero:false,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//菜单的点击事件
//三个参数的含义:
//attr:就是你在菜单中定义的自定义属性,attr.xxx可以取到属性的值;例如attr.workflowid
//level:被点击的菜单的层级;注意是从1开始,不是从0开始的;
//numberType:如果你是在鼠标悬停的方块上点击的,那么这个numberType的值为方块的类型。比如说flowNew
clickFunction:function(attr,level,numberType){
var v = '';
if(level==1){
v = attr.typeid;
}else{
v = attr.workflowid;
}
parent.jQuery("#contentframe").attr("src","/gsoa/oaproject/weavertree/body.jsp?level="+level+"&value="+v);
}});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function reload(){
e8InitTreeSearch({ifrms:'',formID:'',conditions:''});
var optFrame=jQuery("#contentframe",parent.document);
var src="/gsoa/oaproject/weavertree/body.jsp?1=1";
optFrame.attr("src",src);
}
</script>
1
2
3
4
5
6
7
日期控件
效果图:
所需引入js:
在需要使用的地方,写以下代码:
注意其中class=" wuiDate" 这个是必须要写的
_ callback:指选中完后调用的回调函数
扩展日期控件
效果图:
所需引入js:
在需要使用的地方,写以下代码:
<input name="inputName" value="" class="wuiDateSel" _span="spanId" _button="buttonId" _callback="test">
<input name="inputName2" value="" class="wuiDateSel" _span="spanId" _button="buttonId" _callback="test">
1
2
注意其中class="wuiDateSpan"、class="wuiDateSel" 这个是必须要写的,且不能更改。
开关组件
效果图:
所需引入js:
<link href="/js/checkbox/jquery.tzCheckbox_wev8.css" type=text/css rel=STYLESHEET>
<script type="text/javascript" src="/js/ecology8/jNice/jNice/jquery.jNice_wev8.js"></script>
1
2
在需要使用的地方,写以下代码:
注意tzCheckbox="true"是固定的,不能随意改动!
五、OA流程自定义接口
在流程的节点前后、出口都可以定义这样的自定义接口操作
接口实现方式
实现weaver.interfaces.workflow.action.Action接口即可
具体示例如下:
package weaver.oatest;
import org.apache.log4j.Logger;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.*;
public class ImplementsActionDemo implements Action {
private static Logger log = Logger.getLogger(ImplementsActionDemo.class);
public String execute(RequestInfo request) {
//request就是当前流程的请求,通过这个获得请求ID,你可以获得当前流程表单里面所有字段的相关信息,
String requestId = request.getRequestid(); //获得请求id
String id = "";//声明想要的字段名
Property[] properties = request.getMainTableInfo().getProperty(); //获得主表字段信息
for(int i=0;i<properties.length;i++){
if(properties[i].getName().equalsIgnoreCase("id")){ //如果是自己想要的字段名,则取出该字段信息
id=properties[i].getValue();//获取字段的value值
break;
}
}
String detailName="";//声明需要获取的明细表列明
DetailTable[] dTables = request.getDetailTableInfo().getDetailTable();//获得所有明细表的数组;
for(int i=0;i<dTables.length;i++){
DetailTable dt = dTables[i];//循环获取多个明细表
Row[] rows = dt.getRow();//获得行,当前明细表的所有数据,按行存储
String detailId = ""; // 明细ID
for (int j = 0; j < rows.length; j++) {
Row row = rows[j];// 指定行
detailId = row.getId(); // 明细ID
Cell[] cells = row.getCell();//获得列
for (int k = 0; k < cells.length; k++) {
Cell cell = cells[k];// 指定列
String name = cell.getName();// 明细字段名称
String value = cell.getValue();// 明细字段的值
if ("detailName".equals(name)) { // 明细表列明
detailName = value;
}
}
try {
//执行操作
//操作失败
return Action.FAILURE_AND_CONTINUE;
}catch(Exception e){
e.printStackTrace();
log.error("操作异常:" + e.getMessage());
}
}
}
//操作成功
return Action.SUCCESS;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
配置流程自定义接口
【后端应用中心】【集成中心】【功能集成】【流程流转集成】,点击注册自定义接口
输入自定义接口基本信息
• 接口动作名称: 自定义
• 接口动作标识:不可重复
• 接口动作类文件 :接口动作的实现类位置
流程节点附加操作接口调用
【后端应用中心】【流程引擎】【路径管理】【路径设置】,在该菜单下选择一个具体的流程路径, 然后流转设置-节点信息下面的节点前附加操作、节点后附加操作和出口附加规则都可以引用自定义接口,当流程经过这些节点时,就会自动触发定义好的接口。
————————————————
版权声明:本文为CSDN博主「程序媛-如花」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chengxuyuanruhua/article/details/91955391