• E9开发


    一、开发准备
    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">
    &nbsp;<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

  • 相关阅读:
    ASP.NET跨页面传值技巧总结
    C#向Sql Server中插入记录时单引号的处理 使用存储过程 .NET教程,C#语言
    在.net平台上如何创建和使用web 服务(C#)
    使用母版页时内容页如何使用css和javascript
    HTML ID和Name属性的区别
    c++/c#中的转义符
    SendMessage 启动屏幕保护程序_2
    sendmessage WM_PAINT带背景的窗体
    UPPERERR.txt
    With do 简化代码语句
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/14548508.html
Copyright © 2020-2023  润新知