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

您所在的位置:网站首页 泛微oa系统二次开发用什么语言 泛微Ecology8.0二次开发指导手册

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

2023-07-16 20:46| 来源: 网络整理| 查看: 265

一、开发准备 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标签、样式等 右键菜单 多语言标签 这样的形式来表示,其中的数字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页面上加上以下的代码就可以 编号 创建日期 全部 今天 本周 本月 批准日期 全部 今天 本周 本月 标题 人员 是否显示 显示 不显示 常用条件不显示 批准日期 全部 今天 本周 本月 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 } }

可编辑表格 效果图: 在这里插入图片描述 所需js:

示例:

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 = "" ; var items=[ {width:"10%",colname:"浏览按钮",itemhtml:item_browser}, {width:"20%",colname:"文本框",itemhtml:""}, {width:"20%",colname:"下拉框",itemhtml:"全部AABB"}, {width:"20%",display:'none',colname:"排序",itemhtml:""} ]; 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":'',width:"5%"} }; groupAction=new WeaverEditTable(option); jQuery("#FieldList").append(groupAction.getContainer()); }); function deleteAction(){ //top.Dialog.confirm("",function(){ groupAction.deleteRows(); //}); }

分页控件 效果图:

在这里插入图片描述

所需js:

方式1.查询数据表示例:

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.查询外部数据示例:

Java封装数据如下:

/** * 封装分页控件需要显示的数据 * @param user 当前操作人 * @param otherparams 传入参数 * @param request * @param response * @return */ public List getDemoData(User user, Map otherparams, HttpServletRequest request, HttpServletResponse response) { List data = new ArrayList(); String loginid = otherparams.get("loginid"); RecordSet rs = new RecordSet();//模拟外部数据查询 rs.executeSql("select * from HrmResource"); while (rs.next()) { Map d = new HashMap(); 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; }

弹出框组件 效果图: 从父页面打开弹窗 在这里插入图片描述

引用:

参考代码:

//在其子页面中,调用此方法打开相应的界面  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(); }

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

weaverTree树形组件 效果图: 在这里插入图片描述 所需引入js:

必须包含头部声明

在这里插入图片描述

显示区域

菜单分类 ;

树形组件数据和脚本

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

日期控件 效果图: 在这里插入图片描述

所需引入js:

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

注意其中class=" wuiDate" 这个是必须要写的

_ callback:指选中完后调用的回调函数

扩展日期控件 效果图: 在这里插入图片描述

所需引入js:

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

注意其中class="wuiDateSpan"、class="wuiDateSel" 这个是必须要写的,且不能更改。

开关组件 效果图: 在这里插入图片描述

所需引入js:

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

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3