泛微Ecology8.0二次开发指导手册

泛微E8 专栏收录该内容
6 篇文章 4 订阅

一、开发准备
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><!—高级搜索-->
  1. 右键菜单
<%@ 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. 多语言标签
    <%=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

  1. 操作权限

通过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:"供货记录"//指定显示的名称
    });
}); 

非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所需要的参数
/>

单人员浏览框(最多只能选择一个人员)例:

<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="" />

多人员浏览框(可以选择多个人员)例:

<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", //显示容器的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">',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>
      <td style="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表示流程类别的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,
//菜单的点击事件
//三个参数的含义:
//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);
}});
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(); //获得请求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. 流程节点附加操作接口调用
    【后端应用中心】【流程引擎】【路径管理】【路径设置】,在该菜单下选择一个具体的流程路径, 然后流转设置-节点信息下面的节点前附加操作、节点后附加操作和出口附加规则都可以引用自定义接口,当流程经过这些节点时,就会自动触发定义好的接口。

在这里插入图片描述

  • 6
    点赞
  • 7
    评论
  • 59
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

程序媛-如花

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值