文章目录

  • 一、开发准备
  • 二、开发环境搭建
    • 步骤1:从服务器上拷贝WEAVER/ecology代码
    • 步骤2:把本地代码导入到myeclipse工程中
    • 步骤3:配置ecology项目环境
    • 步骤4:修改ecology项目中数据库配置文件
    • 步骤5:Resin配置文件
    • 步骤6:启动运行
  • 三、Ecology8系统里一个jsp页面通常需要包含什么内容
    • 1、相关的操作的类、jsp标签、样式等
    • 2、右键菜单
    • 3、多语言标签
    • 4、操作权限
  • 四、E8控件说明
    • Tab组件
    • 浏览框组件-标签
    • 表单布局组件
    • 可编辑表格
    • 分页控件
    • Java验证复选框代码:
    • 弹出框组件
    • 右键菜单
    • weaverTree树形组件
    • 日期控件
    • 扩展日期控件
    • 开关组件
  • 五、OA流程自定义接口

一、开发准备

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标签、样式等
• 右键菜单
• 多语言标签
• 操作权限

1、相关的操作的类、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><!—高级搜索-->

2、右键菜单

<%@ 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_w3ev8.jsp" %>

3、多语言标签

<%=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 HtmlLabelIndexdelete 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

4、操作权限

通过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组件

效果图:

实现方式有以下两种:

  1. Iframe形式引用:
$(function(){$('.e8_box').Tabs({getLine:1,// 是否需要下标指示器,默认为1iframe:"tabcontentframe",//tab页要加载的内容iframe的IDmouldID:"<%= MouldIDConst.getID("formmode")%>",//指定图标idstaticOnLoad:true,//是否使用静态onload事件,默认是false。即将onload事件写在iframe中,如:<iframe οnlοad="update()"/>如果设置为true,那么iframe中一定要写οnlοad="update()"objName:"供货记录"//指定显示的名称});
});
  1. 非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>

所需引入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所需要的参数
  • />
  1. 单人员浏览框(最多只能选择一个人员)例:
<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. 多人员浏览框(可以选择多个人员)例:
<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=''/>

表单布局组件

效果图:

点击查询条件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" %>

例子:

<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>

可编辑表格

效果图:

所需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=[{width:"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},{width:"20%",colname:"文本框",itemhtml:"<input name='wb' id='wb' type='text' value='默认值' />"},{width:"20%",colname:"下拉框",itemhtml:"<select name='xlk' id='xlk' ><option value=''>全部</option><option value='1'>AA</option><option value='2'>BB</option></select>"},{width:"20%",display:'none',colname:"排序",itemhtml:"<input name='orderid' id='orderid' type='text' />"}];var option = {basictitle:"可编辑表格标题。。。",optionHeadDisplay:"none",colItems:items,container:"#FieldList", //显示容器的idconfigCheckBox:true,usesimpledata:true, //true|fase 当值为true时,则该可编辑表格默认以初始化数据初始化,初始化的具体数据配置详见initdatasinitdatas:initjsondatas,canDrag:true,orderField:'orderid',//addrowCallBack:marcallback,//添加行时,回调的方法checkBoxItem:{"itemhtml":'<input name="id" class="groupselectbox" type="checkbox" value="-1">',width:"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>

分页控件

效果图:

所需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>

Java验证复选框代码:

/*** 获取复选框能否被选中* @param id* @return*/
public String getCanCheck(String id) {if (Util.getIntValue(id) % 2 == 0) {return "true";//返回true 标识复选框可选} else {return "false";//表示复选框不可选,进行隐藏复选框}
}
/*** 获取能不能进行操作,进行权限判断* @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;
}

方式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>

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;
}

弹出框组件

效果图:
从父页面打开弹窗

引用:

<script language="javascript" src="/wui/theme/ecology8/jquery/js/zDialog_wev8.js"></script>

参考代码:

<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>

在弹出框获取相关对象
//在被打开的页面中,使用如下语句获取父窗口对象:
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;
}

右键菜单

效果图:

示例:

<%@ include file="/systeminfo/RightClickMenuConent_wev8.jsp" %>
<%RCMenu += "{提交表单,javascript:doSubmit(),_self} ";RCMenuHeight += RCMenuHeightStep;RCMenu += "{返回,/main.jsp,_self} ";RCMenuHeight += RCMenuHeightStep;
%>
<%@ include file="/systeminfo/RightClickMenu_wev8.jsp" %>

其中上下两行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" %>

必须包含头部声明

显示区域

<div class="zDialog_div_content">
<table cellspacing="0" cellpadding="0" class="flowsTable"style="width:100%;height:100%;"  ><tr><td class="leftTypeSearch"><div><span class="leftType" onclick="reload()">菜单分类<span id="totalDoc"></span></span><span class="leftSearchSpan">&nbsp;<input type="text" class="leftSearchInput"style="width:110px;"/></span></div></td><td rowspan="2"></td></tr><tr><tdstyle="width: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>

树形组件数据和脚本

<script type="text/javascript">
var demoLeftMenus=[{ name:"一级菜单01",//attr表示自定义属性,里面可以放跟业务相关的数据,例如在待办中可以放typeid表示流程类别的IDattr:{typeid:"01"},//submenus表示子菜单(子菜单可以嵌套,但是在本例中只写了两级菜单)submenus:[{ name:"二级类型0101",//这里的workflowid和nodeids是根据流程路径的类型确定的//你可以放其他的属性,比如说如果这个菜单用于文档,那么这个地方可以放文档目录的IDattr:{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、flowAllflowNew:{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的数字;不写的话默认为falseshowZero:false,//菜单的点击事件//三个参数的含义://attr:就是你在菜单中定义的自定义属性,attr.xxx可以取到属性的值;例如attr.workflowid//level:被点击的菜单的层级;注意是从1开始,不是从0开始的;//numberType:如果你是在鼠标悬停的方块上点击的,那么这个numberType的值为方块的类型。比如说flowNewclickFunction: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);}});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>

日期控件

效果图:

所需引入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">

注意其中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>

在需要使用的地方,写以下代码:

注意:tzCheckbox="true"是固定的,不能随意改动!

五、OA流程自定义接口

在流程的节点前后、出口都可以定义这样的自定义接口操作

1、接口实现方式

实现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(); //获得请求idString 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 = ""; // 明细IDfor (int j = 0; j < rows.length; j++) {Row row = rows[j];// 指定行detailId = row.getId(); // 明细IDCell[] 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;}
}

2、配置流程自定义接口
【后端应用中心】【集成中心】【功能集成】【流程流转集成】,点击注册自定义接口

输入自定义接口基本信息
• 接口动作名称: 自定义
• 接口动作标识:不可重复
• 接口动作类文件 :接口动作的实现类位置

3、 流程节点附加操作接口调用
【后端应用中心】【流程引擎】【路径管理】【路径设置】,在该菜单下选择一个具体的流程路径, 然后流转设置-节点信息下面的节点前附加操作、节点后附加操作和出口附加规则都可以引用自定义接口,当流程经过这些节点时,就会自动触发定义好的接口。

转载声明:
作者:CSDN博主「程序媛-如花」
原文链接:https://blog.csdn.net/chengxuyuanruhua/article/details/91955391

泛微Ecology8.0二次开发指导手册相关推荐

  1. oa java 二次开发_泛微OA ecology 二次开发实例 开发完整.doc

    泛微OA ecology 二次开发实例 开发完整 二次开发培训文档 ECOLOGY系统框架结构 主要的程序结构 Ecology Classbean 存放编译后的CLASS文件 js 系统中使用的JAV ...

  2. 边缘计算网关linux开发,边缘计算网关(BMG800系列)二次开发指导手册

    边缘计算网关二次开发指导手册 库函数接口介绍 (适用于:BMG800系列) 目录 1. 获取温湿度(硬件设备为sht10) 2. 获取大气压(硬件设备为bmp180) 3. 读取ADC值(硬件设备为m ...

  3. 泛微E9 OA 二次开发创建流程

    泛微E9OA二次开发通过Java代码发起流程,可以通过以下方式进行实现. public String createWorkFlow(String userId) {/****************流 ...

  4. openGauss开源数据库二次开发指导手册(上)

    简介 openGauss是开源关系型数据库,采用客户端/服务器,单进程多线程架构,支持单机和一主多备部署方式,备机可读,支持双机高可用和读扩展. 本实验主要描述如何对openGauss开源数据库进行二 ...

  5. 涂鸦智能CBU二次开发指导手册入门版——智能灯

    涂鸦智能灯例程是一个非常好的源码,其中包括了GPIO操作完成的引脚控制,模拟IIC,输出PWM,tuyaOS日志控制模块等,所以如果可以拿下智能灯例程,那么关于模块IIC通讯,电机控制等方面的设计要求 ...

  6. 泛微Ecology8.0浏览框详解

    浏览框标签定义 人员 <brow:browser viewType="0" id="pName" name="pName" brows ...

  7. 涂鸦智能CBU二次开发指导手册入门版——智能插座

    基础版介绍了手机端-云端-终端的配置方法.相互关系.以及控 制原理,对涂鸦智能硬件设备有了初步的了解. 本书为涂鸦 SDK 开发入门指导,通过修改 demo 代码实现使用手 机端控制终端 LED 的功 ...

  8. 泛微 e-cology 9.0 二次开发

    泛微 e-cology 9.0 二次开发 1.前端开发环境搭建(ecode代码编辑器) 请访问地址:链接 2.后端开发环境搭建 请访问地址:链接 3.E9流程表单前端接口API 请访问地址:链接

  9. JEECG企业微云快速二次开发平台-新版本首页展示

    JEECG企业微云快速二次开发平台-新版本首页展示 [首页升级包下载:http://t.cn/8F48L4k]

最新文章

  1. 如何确定python对应电脑版本_查看Anaconda版本、Anaconda和python版本对应关系和快速下载...
  2. android IntentService生命周期问题
  3. Eclipse 常用最新插件.标记
  4. Java中接口、抽象类与内部类学习
  5. 疲劳驾驶样本集_欧洲要求,2022年开始新车必须配备DMS(防疲劳预警)系统
  6. I00022 孙子定理
  7. java 异常java.lang.UnsupportedOperationException
  8. 哈佛商学院教授对毕业生讲
  9. ArcGIS 10.7安装包及手把手安装教程
  10. 前端js实现文字自动转拼音方法
  11. SpringBoot与SpringCloud的版本对应详细版
  12. 三维重建技术(2)各种方法简介
  13. IntelliJ idea——》JSON字符串,自动转义双引号
  14. 关于oracle账户被锁定的解决办法
  15. python入门指南by许半仙百度云-Python入门指南 作者:许半仙(4)
  16. 解决IAR软件生成的HEX文件用记事本打开出现乱码
  17. Windows 更新安装更新时,可能会收到“更新失败。安装一些更新时出现问题,且错误为:0x80073701,0x800f0988解决方案
  18. JS学习笔记——基础第二弹
  19. 支付宝企业向个人付款实现
  20. 改善反激电源交叉调整率

热门文章

  1. 避免我们的邮件服务器发出的邮件被当成垃圾邮件
  2. 使用正则表达式提取文件中满足条件的内容
  3. 1166: 6102玛雅历法
  4. 计算机统考多媒体技术操作题,2020年9月网络教育统考《计算机应用基础》多媒体技术模拟题试卷操作题...
  5. 七、Selenium模拟浏览器
  6. 如何单步调试存储过程
  7. 云计算 第七章 云安全(3)概述 云计算面临的安全问题 云安全问题的深层原因 云安全关键技术 云计算信息安全的国内外标准化
  8. 电脑qq怎么设置远程桌面连接到服务器,QQ远程协助在哪个位置 qq远程协助如何使用...
  9. 解决python安装依赖包出现 Microsoft Visual C++ 14.0 or greater is required问题
  10. Gateway—网关服务