泛微OA ecology 二次开发实例 开发完整说明
- 格式:doc
- 大小:4.80 MB
- 文档页数:7
泛微e9 二次开发简书泛微e9是一款可定制和灵活配置的企业级管理软件平台,因其功能强大且易于使用,深受广大企业用户的欢迎。
很多企业都选择使用泛微e9来支持其日常运营,因为它能够简化企业流程、提高生产力并最终改善企业管理。
在这里,我们将介绍泛微e9二次开发的一些基本内容以及在简书上找到更多有关泛微e9二次开发的资料。
什么是泛微e9二次开发?泛微e9的二次开发是指在泛微e9的平台上进行软件开发,以满足企业特定需求的过程。
通过二次开发,企业可以轻松地将泛微e9软件定制到其特定业务流程和工作流程,并提高企业的生产力和效率。
二次开发可以帮助企业更好地满足其业务需求,并提供更好的用户体验。
虽然泛微e9本身已经具有强大的功能,但很多企业在其业务方面有个性化的需求,这种个性化需求可以通过泛微e9的二次开发来实现。
泛微e9二次开发的好处泛微e9二次开发为企业提供了以下好处:1. 定制化 - Enterprise需要根据其特定的业务流程和工作流程来进行定制泛微e9。
二次开发帮助企业满足其个性化的业务需求,并提高用户体验。
2. 增强功能 - 通过二次开发,企业能够添加新功能或改进泛微e9现有功能。
这有助于企业提高其生产力和效率。
3. 提高效率 - 二次开发可简化和自动化企业的流程,并减少手动操作和重复性工作。
4. 提高生产力 - 通过减少业务流程中的瓶颈,企业可以提高生产力和速度,以更快地满足客户需求。
简书上找到关于泛微e9二次开发的资料简书是一个知识共享社区,在这里可以发现关于泛微e9二次开发的有趣话题和资料。
有很多知名的泛微e9开发者都在简书上分享他们的经验和工作成果。
有时候,泛微e9开发者可能会遇到一些问题或困难,这时候,可以在简书上寻求帮助并获得宝贵的建议和经验。
以下是在简书上找到的一些优秀的泛微e9二次开发资源:1.泛微官方技术论坛 - 官方的泛微技术论坛是泛微e9二次开发的主要社区。
这里有大量的开发者在分享它们的开发经验和工作成果。
1.根据建模数据定时创建流程每个月初触发客户回访记录流程package weaver.formmode.apps;import java.util.ArrayList;import java.util.List;import weaver.conn.RecordSet;import weaver.file.Prop;import weaver.general.BaseBean;import weaver.general.Util;import weaver.hrm.resource.ResourceComInfo;import weaver.interfaces.schedule.BaseCronJob;import weaver.soa.workflow.request.MainTableInfo;import weaver.soa.workflow.request.Property;import weaver.soa.workflow.request.RequestInfo;import weaver.soa.workflow.request.RequestService;import com.weaver.formmodel.util.DateHelper;/*** 每个月初定时创建客户回访信息* @author mc*/public class CreateWorkflowJob extends BaseCronJob {private BaseBean beseBean = new BaseBean();public void execute() {//chuaString workflowid = Prop.getPropValue("kh", "workflowid");// 流程创建人String createor = Prop.getPropValue("kh", "createid");RecordSet rs = new RecordSet();rs.executeQuery("select * from uf_khinfo ");while(rs.next()){String gsmc = Util.null2String(rs.getString("gsmc"));String khmc = Util.null2String(rs.getString("khmc"));String khjl = Util.null2String(rs.getString("khjl"));ResourceComInfo rci = null;try {rci = new ResourceComInfo();} catch (Exception e1) {e1.printStackTrace();}String khmcName = rci.getLastname(khmc);String topTitle = gsmc+"-"+khmcName+"("+ DateHelper.getCurrentMonth() +")"; // 创建流程RequestService requestService = new RequestService();RequestInfo requestInfo = new RequestInfo();requestInfo.setWorkflowid(workflowid);//流程类型idrequestInfo.setCreatorid(createor);//创建人requestInfo.setDescription(topTitle);//设置流程标题requestInfo.setRequestlevel("0");//0 正常,1重要,2紧急requestInfo.setIsNextFlow("1");//流转到下一节点0:不自动流程其它:自动流程MainTableInfo mainTableInfo = new MainTableInfo();List<Property> fields = new ArrayList<Property>();Property field = null;/*** 主表* 格式:* {* rwmc: '任务名称-001',* rwfzr: '杨文元',* ksrq: '2019-08-08',* }*/field = new Property();field.setName("khjl");field.setValue(khjl);fields.add(field);field = new Property();field.setName("khmc");field.setValue(gsmc);fields.add(field);field = new Property();field.setName("khjl");field.setValue(khjl);fields.add(field);field = new Property();field.setName("fzr");field.setValue(khmc);fields.add(field);Property[] fieldarray = (Property[]) fields.toArray(new Property[fields.size()]); mainTableInfo.setProperty(fieldarray);requestInfo.setMainTableInfo(mainTableInfo);int newrequestid = 0;try {newrequestid = Util.getIntValue(requestService.createRequest(requestInfo));} catch (Exception e) {e.printStackTrace();}beseBean.writeLog("创建成功的流程requestid:"+newrequestid);}}}配置文件2.建模中代码创建附件/*** 从网络上抓取文件存入系统中* @param modeid* @param userid* @param fileurl* @param filename* @return*/public int buildFile(int modeid,int userid,String fileurl,String filename) {RecordSet rs = new RecordSet();OutputStream os = null;ZipOutputStream filezipOut = null;InputStream source = null;int retDocid = 0;boolean needzip = false;try {SystemComInfo syscominfo = new SystemComInfo();String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem());if( (syscominfo.getNeedzip()).equals("1") ) needzip = true ;FileManage.createDir(createdir) ;DefaultFileRenamePolicy defpolicy = new DefaultFileRenamePolicy() ;String refilename = weaver.general.Util.getRandom();String filepath = createdir+refilename;if(needzip) filepath+=".zip";java.io.File outfile = new java.io.File(filepath);outfile = defpolicy.rename(outfile);String iszip = "1" ;if(needzip){filezipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(outfile)));filezipOut.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法filezipOut.putNextEntry(new ZipEntry(refilename)) ;//正文只能是WORD文档os = filezipOut ;}else{os = new BufferedOutputStream(new FileOutputStream(outfile)) ;iszip = "0";}//通过HTTP方式获取文件URL url = new URL(fileurl);HttpURLConnection conn = (HttpURLConnection) url.openConnection();BufferedInputStream input = new BufferedInputStream(conn.getInputStream());long filesize = 0;byte[] buffer = new byte[1024];int count = 0;while ((count = input.read(buffer)) > 0) {os.write(buffer, 0, count);filesize++;}os.flush();if(os!=null) os.close();if(filezipOut!=null) filezipOut.close();if(input!=null) input.close();//以下将文件放至IMAGEFILE表中int imageid = 0;String imagefileused = "1"String isencrypt = "1" ;String originalfilename = filename;//原始文件名String contenttype = "HTTP";char separator = Util.getSeparator() ;imageid=imageFileIdUpdate.getImageFileNewId();String para = ""+imageid + separator + originalfilename + separator+ contenttype + separator + imagefileused + separator + filepath + separator+ iszip + separator + isencrypt + separator + filesize ;rs.executeProc("ImageFile_Insert",para);//文件FILEID处理DocManagerNoRequest docManagerNoRequest = new DocManagerNoRequest();int maincategory = Util.getIntValue((String)staticobj.getObject("DocChangeSetting.maincategory"), 0);int subcategory = Util.getIntValue((String)staticobj.getObject("DocChangeSetting.subcategory"), 0);int seccategory = Util.getIntValue((String)staticobj.getObject("DocChangeSetting.seccategory"), 0);if(modeid > 0){rs.executeSql("select * from modeinfo where id="+modeid);if(rs.next()){maincategory = Util.getIntValue(rs.getString("maincategory"),0);subcategory = Util.getIntValue(rs.getString("subcategory"),0);seccategory = Util.getIntValue(rs.getString("seccategory"),0);}}//填补文档信息String extname = "";//扩展名String imageFileName = Util.null2String(filename);int tempPos = stIndexOf(".");if (tempPos != -1) {extname = imageFileName.substring(tempPos + 1);}Map dataMap=new HashMap();String docsubject="";if(tempPos==-1) docsubject = originalfilename;else docsubject = originalfilename.substring(0, tempPos);dataMap.put("docsubject",docsubject);dataMap.put("doccreaterid",""+userid);dataMap.put("docCreaterType","1");dataMap.put("maincategory",""+maincategory);dataMap.put("subcategory",""+subcategory);dataMap.put("seccategory",""+seccategory);dataMap.put("fileids",""+imageid);docManagerNoRequest.UploadDocNoRequest(dataMap);retDocid = docManagerNoRequest.getId();//文档IDrs.executeSql("update docdetail setownerid="+userid+",doccreatedate='"+getCurrentDate()+"',doccreatetime='"+getCurrentTime()+"' where id="+retDocid);rs.executeSql("update docdetail set docPublishType='2' where id ="+retDocid);//处理文档共享rs.executeSql("INSERT INTOShareinnerdoc(sourceid,type,content,seclevel,sharelevel,srcfrom,opuser,sharesource)values('"+docManagerNoRequest.getId()+"','1','"+userid+"','10','3','80','"+userid+"','0')");}catch(Exception e) {writeLog(e);} finally {try {if (os != null) os.close();if(filezipOut!=null) filezipOut.close();}catch(Exception e) {writeLog(e);}return retDocid;}}3.甘特图插件<%@page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@include file="./init_wev8.jsp"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>甘特图</title><link rel="stylesheet"type="text/css"href="./core/jquery-ui.css"/><link rel="stylesheet"type="text/css"href="./reset.css"/><link rel="stylesheet"type="text/css"href="./core/jquery-gantt.css"/><script language="javascript"src="/js/datetime_wev8.js"></script><script language="javascript"src="/js/JSDateTime/WdatePicker_wev8.js"></script><script language="javascript"src="/js/ecology8/selectbox/js/jquery.selectbox-0.2_wev8.js"></script> <style type="text/css">body {font-family: tahoma, verdana, helvetica;font-size: 0.8em;padding: 10px;width: 90%;height: 95%;}</style></head><body><div style="padding-bottom:5px;width:400px;">开始日期:<input name="start"id="start"value=""type="hidden"class="wuiDate"_callback="calldate"/> 结束日期:<input name="end"id="end"value=""type="hidden"class="wuiDate" _callback="calldate"/> <input type="button"class="middle e8_btn_top_first"onclick="query()"value="查询"/> </div><div id="ganttChart"></div><br/><br/><div id="eventMessage"></div><script type="text/javascript"src="./core/jquery-1.4.2.js"></script><script type="text/javascript"src="./core/date.js"></script><script type="text/javascript"src="./core/jquery-ui.js"></script><script type="text/javascript"src="./core/jquery-gantt.js"charset="utf-8"></script><script type="text/javascript"src="./data.js"></script><script type="text/javascript">$(function () {//发送ajax 请求数据$.ajax({url:"/formmode/apps/gantt/data.jsp",data:{action:"init"},dataType:"json",success:function(result){for(var i=0;i<result.length ;i++){// 将日期格式转换为毫秒的形式:如“yyyy-MM-dd --> 1221456783545var s = result[i].series[1].start.split("-");var s1 = result[i].series[1].end.split("-")var start = new Date(s[0],s[1]-1,s[2]);var end = new Date(s1[0],s1[1]-1,s1[2]);result[i].series[1].start = start;result[i].series[1].end = end;}//console.log(result[0].series[1].start.getDate());if(result.length>0){init(result);}}})});function init(ganttData){$("#ganttChart").ganttView({data: ganttData,slideWidth: $(document).width()-400,//右边面板大小behavior: {draggable:false,//禁止拖动// 点击进度条触发事件onClick: function (data) {var msg = "You clicked on an event: { start: " +data.start.toString("M/d/yyyy") + ", end: " + data.end.toString("M/d/yyyy") + " }";$("#eventMessage").text(msg);window.open("/formmode/view/AddFormMode.jsp?modeId=11&formId=-30&type=0&billid="+data.i d);},onResize: function (data) {var msg = "You resized an event: { start: " +data.start.toString("M/d/yyyy") + ", end: " + data.end.toString("M/d/yyyy") + " }";$("#eventMessage").text(msg);},onDrag: function (data) {var msg = "You dragged an event: { start: " +data.start.toString("M/d/yyyy") + ", end: " + data.end.toString("M/d/yyyy") + " }";$("#eventMessage").text(msg);}}});}function query(){//获取到开始日期和结束日期var start = jQuery("#start").val();var end = jQuery("#end").val();if(start=='' && end=='') return;$.ajax({url:"/formmode/apps/gantt/data.jsp",data:{action:"query",start:start,end:end},dataType:"json",success:function(result){jQuery("#ganttChart").empty();for(var i=0;i<result.length ;i++){var s = result[i].series[1].start.split("-");var s1 = result[i].series[1].end.split("-")var start = new Date(s[0],s[1]-1,s[2]);var end = new Date(s1[0],s1[1]-1,s1[2]);result[i].series[1].start = start;result[i].series[1].end = end;}if(result.length>0){init(result);}}})}function calldate(){ }function stringToDate(dateStr,separator){if(!separator){separator="-";}var dateArr = dateStr.split(separator);var year = parseInt(dateArr[0]);var month;//处理月份为04这样的情况if(dateArr[1].indexOf("0") == 0){month = parseInt(dateArr[1].substring(1));}else{month = parseInt(dateArr[1]);}var day = parseInt(dateArr[2]);var date = new Date(year,month -1,day);return date;}</script></body></html>4.组织架构图插件<html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>组织结构图</title><link rel="stylesheet"href="css/bootstrap.min.css"/><link rel="stylesheet"href="css/jquery.jOrgChart.css"/><link rel="stylesheet"href="css/custom.css"/><link href="css/prettify.css"type="text/css"rel="stylesheet"/><script type="text/javascript"src="prettify.js"></script><script type="text/javascript"src="/formmode/apps/orgchart/css/jquery.min.js"></script> <script type="text/javascript"src="/formmode/apps/orgchart/css/jquery-ui.min.js"></script> <script src="jquery.jOrgChart.js"></script><style>a {text-decoration: none;color: #fff;font-size: 12px;}a:hover {color: red;text-decoration: none;}.jOrgChart.node {width: 120px;height: 50px;line-height: 50px;border-radius: 4px;margin: 0 8px;cursor: pointer;}</style></head><body onload="prettyPrint();"><div id='jOrgChart'style="width: 1900px;height:1000px;overflow-x: auto;margin:0 auto"></div> <script type='text/javascript'>$(function(){//数据返回$.ajax({url: "./data.jsp",//url: "test.json",type: 'GET',dataType: 'JSON',data: {action: 'org_select'},success: function(result){var showlist = $("<ul id='org' style='display:none'></ul>");showall(result.data, showlist);$("#jOrgChart").append(showlist);$("#org").jOrgChart( {chartElement : '#jOrgChart',//指定在某个dom生成jorgchartdragAndDrop : false //设置是否可拖动});}});});function showall(menu_list, parent) {$.each(menu_list, function(index, val) {if(val.childrens.length > 0){var li = $("<li></li>");li.append("<a href='javascript:void(0)'onclick=getOrgId("+val.id+");>"++"</a>").append("<ul></ul>").appendTo(parent);//递归显示showall(val.childrens, $(li).children().eq(1));}else{$("<li></li>").append("<a href='javascript:void(0)'onclick=getOrgId("+val.id+");>"++"</a>").appendTo(parent);}});}</script></body></html>。
二、系俛樞需秸枸1、殳要的程為穡构EcologyClassbean爲敎偏律后的CLASS支件js系娩屮使用的JAVASCRIPT孔VBSCRIPT脚冷Css系俛屮JSP演血使用的祥式ImagesImages_faceImages_frame系俛屮使用的囹片的矗敘目录CrmWorkflow 钱功饨今夂件矣為敎毎个功饨的夂伴WEB-INFProp系俛甬乙置夂伴爲敘Service系疣的接口甬乙置夂伴的爲敘三、锐明一个JSP茨面,一个JAVA程潯的痕冷组啟,矗何闿篌JSP页S)1、一个jsp演i?通纟需要包會什么內客2、血何閲篌一个JSPlii;由于ECOLOGY系铳丈持多语音,因此在JSP賓曲止一巖耒出观屮夂,全部使用标鉴的形式来显亦屮夂:比血:在IE上显斥“就名”那么虚JSPIi扮屮将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguagc())%>这祥的形式来素亦,其屮的毅常413 就是素示就名,同时可“I通过"select labelname from htmllabelinfowhere indexid=413 and languageid=7 ”耒获瑕到"壮名"这个显亦名稀,其屮languageid=7素示彳夂显亦名烈,languageid=8乗亦英夂显斥名秫.delete from HtmlLabellndex where id=81249 deletefrom HtmlLabellnfo where indexid=81249 INSERTINTO HtmlLabellndex values© 1249,‘這荐范(8 ')INSERT INTO HtmlLabellnfo VALUES(81249;迄挥范国\7)INSERT INTO HtmlLabellnfoVALUES(81249;Range of choice*,8) INSERT INTO HtmlLabellnfo VALUES(81249;選擇範圍;9)3、JAVA «4的痕冷组啟A ECOLOGY屮卄农JAVA 程為建衩继承weaver.general.BaseBean, A BaseBean 屮空宴农除了鬲个方法:傅日志夂伴,获取紀置夂件屮的彖毅值。
泛微二次开发所需要的知识
泛微二次开发是指在泛微OA系统中进行二次开发,以满足个性化的业务需求和提升工作效率。
在进行泛微二次开发之前,需要掌握以下知识:
步骤一:了解泛微OA系统
作为一个泛微二次开发者,首先需要了解泛微OA系统的概念、功能以及基本架构。
只有深入了解泛微OA系统才能对二次开发对接点有更清晰的认识,从而更好地完成二次开发任务。
步骤二:掌握JAVA编程
泛微OA系统的二次开发使用的是JAVA编程语言,所以二次开发者需要掌握JAVA编程。
特别是在泛微OA系统中,JAVA编程的应用非常广泛,包含了工作流引擎、表单控件、数据集成等方面。
只有掌握了JAVA编程知识,才能更好地进行泛微OA系统的二次开发。
步骤三:熟悉Web开发
泛微OA系统作为一款B/S架构的软件,二次开发涉及到了Web 开发知识,包括HTML、CSS、JavaScript等方面。
因此,二次开发者需要熟悉Web开发知识,才能更好地进行泛微OA系统的二次开发。
步骤四:掌握数据库知识
泛微OA系统中的业务数据存储在数据库中,因此,二次开发者需要具备数据库相关的知识,包括SQL语句、数据表设计等。
只有掌握了数据库知识,才能更好地实现系统的数据存储和管理。
步骤五:了解相关API
泛微OA系统提供了丰富的API,包含了表单API、流程API、组织人员API等方面。
二次开发者需要了解相关API,从而能够更快地实现对系统的定制化开发,满足不同用户的需求。
总之,泛微二次开发要求开发者具备一定的技术功底和相关知识背景。
需要花费时间进行学习和探索,才能在泛微OA系统中运用这些知识,做出更加优秀的产品。
二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JAVASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录CrmWorkflow 该功能分文件夹存放每个功能的文件WEB-INFProp 系统配置文件存放Service 系统的接口配置文件的存放二、说明一个JSP页面,一个JAVA程序的基本组成,如何阅读JSP页面1、一个jsp页面通常需要包含什么内容2、如何阅读一个JSP页面由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文:比如:在IE上显示“姓名”那么在JSP页面中将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“select labelname fromhtmllabelinfo where indexid=413 and languageid=7”来获取到“姓名”这个显示名称,其中languageid=7表示中文显示名称,languageid=8表示英文显示名称.delete from HtmlLabelIndex where id=81249delete from HtmlLabelInfo where indexid=81249INSERT INTO HtmlLabelIndex values(81249,'选择范围')INSERT INTO HtmlLabelInfo VALUES(81249,'选择范围',7)INSERT INTO HtmlLabelInfo VALUES(81249,'Range of choice',8)INSERT INTO HtmlLabelInfo VALUES(81249,'選擇範圍',9)3、JAVA程序的基本组成在ECOLOGY中开发JAVA程序建议继承weaver.general. BaseBean,在BaseBean中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
1.根据建模数据定时创建流程每个月初触发客户回访记录流程package weaver.formmode.apps;import java.util.ArrayList;import java.util.List;import weaver.conn.RecordSet;import weaver.file.Prop;import weaver.general.BaseBean;import weaver.general.Util;import weaver.hrm.resource.ResourceComInfo;import weaver.interfaces.schedule.BaseCronJob;import weaver.soa.workflow.request.MainTableInfo;import weaver.soa.workflow.request.Property;import weaver.soa.workflow.request.RequestInfo;import weaver.soa.workflow.request.RequestService;import com.weaver.formmodel.util.DateHelper;/*** 每个月初定时创建客户回访信息* @author mc*/public class CreateWorkflowJob extends BaseCronJob {private BaseBean beseBean = new BaseBean();public void execute() {//chuaString workflowid = Prop.getPropValue("kh", "workflowid");// 流程创建人String createor = Prop.getPropValue("kh", "createid");RecordSet rs = new RecordSet();rs.executeQuery("select * from uf_khinfo ");while(rs.next()){String gsmc = Util.null2String(rs.getString("gsmc"));String khmc = Util.null2String(rs.getString("khmc"));String khjl = Util.null2String(rs.getString("khjl"));ResourceComInfo rci = null;try {rci = new ResourceComInfo();} catch (Exception e1) {e1.printStackTrace();}String khmcName = rci.getLastname(khmc);String topTitle = gsmc+"-"+khmcName+"("+ DateHelper.getCurrentMonth() +")"; // 创建流程RequestService requestService = new RequestService();RequestInfo requestInfo = new RequestInfo();requestInfo.setWorkflowid(workflowid);//流程类型idrequestInfo.setCreatorid(createor);//创建人requestInfo.setDescription(topTitle);//设置流程标题requestInfo.setRequestlevel("0");//0 正常,1重要,2紧急requestInfo.setIsNextFlow("1");//流转到下一节点0:不自动流程其它:自动流程MainTableInfo mainTableInfo = new MainTableInfo();List<Property> fields = new ArrayList<Property>();Property field = null;/*** 主表* 格式:* {* rwmc: '任务名称-001',* rwfzr: '杨文元',* ksrq: '2019-08-08',* }*/field = new Property();field.setName("khjl");field.setValue(khjl);fields.add(field);field = new Property();field.setName("khmc");field.setValue(gsmc);fields.add(field);field = new Property();field.setName("khjl");field.setValue(khjl);fields.add(field);field = new Property();field.setName("fzr");field.setValue(khmc);fields.add(field);Property[] fieldarray = (Property[]) fields.toArray(new Property[fields.size()]); mainTableInfo.setProperty(fieldarray);requestInfo.setMainTableInfo(mainTableInfo);int newrequestid = 0;try {newrequestid = Util.getIntValue(requestService.createRequest(requestInfo));} catch (Exception e) {e.printStackTrace();}beseBean.writeLog("创建成功的流程requestid:"+newrequestid);}}}配置文件2.建模中代码创建附件/*** 从网络上抓取文件存入系统中* @param modeid* @param userid* @param fileurl* @param filename* @return*/public int buildFile(int modeid,int userid,String fileurl,String filename) {RecordSet rs = new RecordSet();OutputStream os = null;ZipOutputStream filezipOut = null;InputStream source = null;int retDocid = 0;boolean needzip = false;try {SystemComInfo syscominfo = new SystemComInfo();String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem());if( (syscominfo.getNeedzip()).equals("1") ) needzip = true ;FileManage.createDir(createdir) ;DefaultFileRenamePolicy defpolicy = new DefaultFileRenamePolicy() ;String refilename = weaver.general.Util.getRandom();String filepath = createdir+refilename;if(needzip) filepath+=".zip";java.io.File outfile = new java.io.File(filepath);outfile = defpolicy.rename(outfile);String iszip = "1" ;if(needzip){filezipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(outfile)));filezipOut.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法filezipOut.putNextEntry(new ZipEntry(refilename)) ;//正文只能是WORD文档os = filezipOut ;}else{os = new BufferedOutputStream(new FileOutputStream(outfile)) ;iszip = "0";}//通过HTTP方式获取文件URL url = new URL(fileurl);HttpURLConnection conn = (HttpURLConnection) url.openConnection();BufferedInputStream input = new BufferedInputStream(conn.getInputStream());long filesize = 0;byte[] buffer = new byte[1024];int count = 0;while ((count = input.read(buffer)) > 0) {os.write(buffer, 0, count);filesize++;}os.flush();if(os!=null) os.close();if(filezipOut!=null) filezipOut.close();if(input!=null) input.close();//以下将文件放至IMAGEFILE表中int imageid = 0;String imagefileused = "1"String isencrypt = "1" ;String originalfilename = filename;//原始文件名String contenttype = "HTTP";char separator = Util.getSeparator() ;imageid=imageFileIdUpdate.getImageFileNewId();String para = ""+imageid + separator + originalfilename + separator+ contenttype + separator + imagefileused + separator + filepath + separator+ iszip + separator + isencrypt + separator + filesize ;rs.executeProc("ImageFile_Insert",para);//文件FILEID处理DocManagerNoRequest docManagerNoRequest = new DocManagerNoRequest();int maincategory = Util.getIntValue((String)staticobj.getObject("DocChangeSetting.maincategory"), 0);int subcategory = Util.getIntValue((String)staticobj.getObject("DocChangeSetting.subcategory"), 0);int seccategory = Util.getIntValue((String)staticobj.getObject("DocChangeSetting.seccategory"), 0);if(modeid > 0){rs.executeSql("select * from modeinfo where id="+modeid);if(rs.next()){maincategory = Util.getIntValue(rs.getString("maincategory"),0);subcategory = Util.getIntValue(rs.getString("subcategory"),0);seccategory = Util.getIntValue(rs.getString("seccategory"),0);}}//填补文档信息String extname = "";//扩展名String imageFileName = Util.null2String(filename);int tempPos = stIndexOf(".");if (tempPos != -1) {extname = imageFileName.substring(tempPos + 1);}Map dataMap=new HashMap();String docsubject="";if(tempPos==-1) docsubject = originalfilename;else docsubject = originalfilename.substring(0, tempPos);dataMap.put("docsubject",docsubject);dataMap.put("doccreaterid",""+userid);dataMap.put("docCreaterType","1");dataMap.put("maincategory",""+maincategory);dataMap.put("subcategory",""+subcategory);dataMap.put("seccategory",""+seccategory);dataMap.put("fileids",""+imageid);docManagerNoRequest.UploadDocNoRequest(dataMap);retDocid = docManagerNoRequest.getId();//文档IDrs.executeSql("update docdetail setownerid="+userid+",doccreatedate='"+getCurrentDate()+"',doccreatetime='"+getCurrentTime()+"' where id="+retDocid);rs.executeSql("update docdetail set docPublishType='2' where id ="+retDocid);//处理文档共享rs.executeSql("INSERT INTOShareinnerdoc(sourceid,type,content,seclevel,sharelevel,srcfrom,opuser,sharesource)values('"+docManagerNoRequest.getId()+"','1','"+userid+"','10','3','80','"+userid+"','0')");}catch(Exception e) {writeLog(e);} finally {try {if (os != null) os.close();if(filezipOut!=null) filezipOut.close();}catch(Exception e) {writeLog(e);}return retDocid;}}3.甘特图插件<%@page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@include file="./init_wev8.jsp"%><!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>甘特图</title><link rel="stylesheet"type="text/css"href="./core/jquery-ui.css"/><link rel="stylesheet"type="text/css"href="./reset.css"/><link rel="stylesheet"type="text/css"href="./core/jquery-gantt.css"/><script language="javascript"src="/js/datetime_wev8.js"></script><script language="javascript"src="/js/JSDateTime/WdatePicker_wev8.js"></script><script language="javascript"src="/js/ecology8/selectbox/js/jquery.selectbox-0.2_wev8.js"></script> <style type="text/css">body {font-family: tahoma, verdana, helvetica;font-size: 0.8em;padding: 10px;width: 90%;height: 95%;}</style></head><body><div style="padding-bottom:5px;width:400px;">开始日期:<input name="start"id="start"value=""type="hidden"class="wuiDate"_callback="calldate"/> 结束日期:<input name="end"id="end"value=""type="hidden"class="wuiDate" _callback="calldate"/> <input type="button"class="middle e8_btn_top_first"onclick="query()"value="查询"/> </div><div id="ganttChart"></div><br/><br/><div id="eventMessage"></div><script type="text/javascript"src="./core/jquery-1.4.2.js"></script><script type="text/javascript"src="./core/date.js"></script><script type="text/javascript"src="./core/jquery-ui.js"></script><script type="text/javascript"src="./core/jquery-gantt.js"charset="utf-8"></script><script type="text/javascript"src="./data.js"></script><script type="text/javascript">$(function () {//发送ajax 请求数据$.ajax({url:"/formmode/apps/gantt/data.jsp",data:{action:"init"},dataType:"json",success:function(result){for(var i=0;i<result.length ;i++){// 将日期格式转换为毫秒的形式:如“yyyy-MM-dd --> 1221456783545var s = result[i].series[1].start.split("-");var s1 = result[i].series[1].end.split("-")var start = new Date(s[0],s[1]-1,s[2]);var end = new Date(s1[0],s1[1]-1,s1[2]);result[i].series[1].start = start;result[i].series[1].end = end;}//console.log(result[0].series[1].start.getDate());if(result.length>0){init(result);}}})});function init(ganttData){$("#ganttChart").ganttView({data: ganttData,slideWidth: $(document).width()-400,//右边面板大小behavior: {draggable:false,//禁止拖动// 点击进度条触发事件onClick: function (data) {var msg = "You clicked on an event: { start: " +data.start.toString("M/d/yyyy") + ", end: " + data.end.toString("M/d/yyyy") + " }";$("#eventMessage").text(msg);window.open("/formmode/view/AddFormMode.jsp?modeId=11&formId=-30&type=0&billid="+data.i d);},onResize: function (data) {var msg = "You resized an event: { start: " +data.start.toString("M/d/yyyy") + ", end: " + data.end.toString("M/d/yyyy") + " }";$("#eventMessage").text(msg);},onDrag: function (data) {var msg = "You dragged an event: { start: " +data.start.toString("M/d/yyyy") + ", end: " + data.end.toString("M/d/yyyy") + " }";$("#eventMessage").text(msg);}}});}function query(){//获取到开始日期和结束日期var start = jQuery("#start").val();var end = jQuery("#end").val();if(start=='' && end=='') return;$.ajax({url:"/formmode/apps/gantt/data.jsp",data:{action:"query",start:start,end:end},dataType:"json",success:function(result){jQuery("#ganttChart").empty();for(var i=0;i<result.length ;i++){var s = result[i].series[1].start.split("-");var s1 = result[i].series[1].end.split("-")var start = new Date(s[0],s[1]-1,s[2]);var end = new Date(s1[0],s1[1]-1,s1[2]);result[i].series[1].start = start;result[i].series[1].end = end;}if(result.length>0){init(result);}}})}function calldate(){ }function stringToDate(dateStr,separator){if(!separator){separator="-";}var dateArr = dateStr.split(separator);var year = parseInt(dateArr[0]);var month;//处理月份为04这样的情况if(dateArr[1].indexOf("0") == 0){month = parseInt(dateArr[1].substring(1));}else{month = parseInt(dateArr[1]);}var day = parseInt(dateArr[2]);var date = new Date(year,month -1,day);return date;}</script></body></html>4.组织架构图插件<html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>组织结构图</title><link rel="stylesheet"href="css/bootstrap.min.css"/><link rel="stylesheet"href="css/jquery.jOrgChart.css"/><link rel="stylesheet"href="css/custom.css"/><link href="css/prettify.css"type="text/css"rel="stylesheet"/><script type="text/javascript"src="prettify.js"></script><script type="text/javascript"src="/formmode/apps/orgchart/css/jquery.min.js"></script> <script type="text/javascript"src="/formmode/apps/orgchart/css/jquery-ui.min.js"></script> <script src="jquery.jOrgChart.js"></script><style>a {text-decoration: none;color: #fff;font-size: 12px;}a:hover {color: red;text-decoration: none;}.jOrgChart.node {width: 120px;height: 50px;line-height: 50px;border-radius: 4px;margin: 0 8px;cursor: pointer;}</style></head><body onload="prettyPrint();"><div id='jOrgChart'style="width: 1900px;height:1000px;overflow-x: auto;margin:0 auto"></div> <script type='text/javascript'>$(function(){//数据返回$.ajax({url: "./data.jsp",//url: "test.json",type: 'GET',dataType: 'JSON',data: {action: 'org_select'},success: function(result){var showlist = $("<ul id='org' style='display:none'></ul>");showall(result.data, showlist);$("#jOrgChart").append(showlist);$("#org").jOrgChart( {chartElement : '#jOrgChart',//指定在某个dom生成jorgchartdragAndDrop : false //设置是否可拖动});}});});function showall(menu_list, parent) {$.each(menu_list, function(index, val) {if(val.childrens.length > 0){var li = $("<li></li>");li.append("<a href='javascript:void(0)'onclick=getOrgId("+val.id+");>"++"</a>").append("<ul></ul>").appendTo(parent);//递归显示showall(val.childrens, $(li).children().eq(1));}else{$("<li></li>").append("<a href='javascript:void(0)'onclick=getOrgId("+val.id+");>"++"</a>").appendTo(parent);}});}</script></body></html>。
二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JA V ASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录CrmWorkflow 该功能分文件夹存放每个功能的文件WEB-INFProp 系统配置文件存放Service 系统的接口配置文件的存放二、说明一个JSP页面,一个JA V A程序的基本组成,如何阅读JSP页面1、一个jsp页面通常需要包含什么内容2、如何阅读一个JSP页面由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文:比如:在IE上显示“姓名”那么在JSP页面中将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“select labelname from htmllabelinfo where indexid=413 and languageid=7”来获取到“姓名”这个显示名称,其中languageid=7表示中文显示名称,languageid=8表示英文显示名称.delete from HtmlLabelIndex where id=81249delete from HtmlLabelInfo where indexid=81249INSERT INTO HtmlLabelIndex values(81249,'选择范围')INSERT INTO HtmlLabelInfo VALUES(81249,'选择范围',7)INSERT INTO HtmlLabelInfo VALUES(81249,'Range of choice',8)INSERT INTO HtmlLabelInfo VALUES(81249,'選擇範圍',9)3、JA V A程序的基本组成在ECOLOGY中开发JA V A程序建议继承weaver.general. BaseBean,在BaseBean 中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
Ecology系统程序员开发指南文件修改控制目录1. 引言 (4)1.1 概述 (4)1.2 定义 (4)1.3 参考资料 (4)2. 开发规范 (5)3. 底层包应用及范例 (7)3.1 最基本的继承类 (7)3.2 怎样记录日志 (8)3.3 怎样获取属性文件的值 (11)3.4 怎样获取系统的运行目录 (13)3.5 怎样访问和运行数据库脚本 (14)3.6 如何上传一个文件 (18)3.7 如何访问已经上传的文件 (22)3.8 如何使用缓存提高系统效率 (23)3.9 其它底层类基本方法 (32)1. 引言1.1 概述本需求文档为泛微协同商务系统(Ecology)程序员开发指导文档,讲述了开发的规范,底层工具包的应用,常用功能的开发。
通过本文档,开发人员应掌握1.2 定义1.3 参考资料书籍资料2. 开发规范程序文件头部加上文件描述,包括标题,描述,公司,作者,版本,创建日期,修改记录,如下:/*** Title: 数据库链接池集合* Description: 所有的数据库链接池的集合,用链接池名称区别每一个* 链接池* Company: 泛微软件* @author : 杨国生* @version 1.0* create date : 2001-10-23* modify log:* 2002-09-13 杨国生增加链接池Encode参数***/各个明显部分间加空行,各方法间加空行,方法前面加方法的注释,遵从JavaDoc规范,与所释方法间不加空行。
注释用中文给出:/*** 从指定名称的链接池中获得一个可用连接.若没有可用连接,且已有连接* 数小于最大连接数限制, 则创建并返回新连接.否则, 在指定的时间内等* 待其它线程释放连接.如指定的时间内没有链接返回,则返回空。
** @param name 连接池名字* @param time 以毫秒计的等待时间* @return WeaverConnection 可用连接或null*/public WeaverConnection getConnection(String name, int time) { DBConnectionPool pool = (DBConnectionPool) pools.get( name ) ;if (pool == null) pool = createPools( name ) ;if (pool != null) {clients ++ ;return pool.getConnection( time ) ;}return null;}大括号{ 不换行,} 需要换行。
二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JAVASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录CrmWorkflow 该功能分文件夹存放每个功能的文件WEB-INFProp 系统配置文件存放Service 系统的接口配置文件的存放二、说明一个JSP页面,一个JAVA程序的基本组成,如何阅读JSP页面1、一个jsp页面通常需要包含什么内容2、如何阅读一个JSP页面由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文:比如:在IE上显示“姓名”那么在JSP页面中将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“select labelname fromhtmllabelinfo where indexid=413 and languageid=7”来获取到“姓名”这个显示名称,其中languageid=7表示中文显示名称,languageid=8表示英文显示名称.delete from HtmlLabelIndex where id=81249delete from HtmlLabelInfo where indexid=81249INSERT INTO HtmlLabelIndex values(81249,'选择范围')INSERT INTO HtmlLabelInfo VALUES(81249,'选择范围',7)INSERT INTO HtmlLabelInfo VALUES(81249,'Range of choice',8)INSERT INTO HtmlLabelInfo VALUES(81249,'選擇範圍',9)3、JAVA程序的基本组成在ECOLOGY中开发JAVA程序建议继承weaver.general. BaseBean,在BaseBean中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
Ecol ogy二次开发树形图开发简介以上是Ecology产品中最典型的框架图之一,其中框架的左侧为一个树形导航栏,框架的右边为内容区。
以上框架一共由4个JSP组成,下面的表格分别对这四个JSP做了简要说明。
开发示例下图是个这个开发示例的效果图,下面的开发示例代码都是为了个效果而准备的!注:开发示例做完后,请访问“”页面。
注:在Ecology服务器端的文件夹中,添加了一个treeframe-cst的文件夹,以下所提到的jsp都是存在此文件夹中。
<%@ page language="java" contentType="text/html; charset=GBK" %><%@ page import="" %><%@ include file="/systeminfo/" %><HTML><HEAD><LINK href="/css/" type=text/css rel=STYLESHEET></HEAD><body><TABLE class=viewform width=100% id=oTable1 height=100%><COLGROUP><COL width="50%"><COL width=5><COL width="50%"><TBODY><tr><td height=100% id=oTd1 name=oTd1 width=30%><IFRAME name=leftframe id=leftframe src=" " width="100%" height="100%" frameborder=no scrolling=no>浏览器不支持嵌入式框架,或被配置为不显示嵌入式框架。
泛微协同商务系统(Ecology) 底层包开发指南目录1.引言 (3)1.1概述 (3)1.2定义................................................................................ 错误!未定义书签。
2.底层包应用及范例 (3)2.1最基本的继承类 (3)2.2怎样记录日志 (3)2.3怎样获取属性文件的值 (6)2.4怎样获取系统的运行目录 (7)2.5怎样访问和运行数据库脚本 (8)2.6如何上传一个文件 (11)2.7如何访问已经上传的文件 (15)2.8如何使用缓存提高系统效率 (15)2.9其它底层类基本方法 (26)1. 引言1.1 概述本文档为泛微协同商务系统(Ecology)程序员开发指导文档,讲述了开发底层工具包的应用,常用功能的开发。
2. 底层包应用及范例本章对ecology系统的底层工具包进行讲解,开发人员可以从这里学到怎样利用底层的工具包进行开发2.1 最基本的继承类系统中每一个java bean 都需要继承weaver.general.BaseBean 类。
这个类实现了记录日志和获取属性文件值的方法。
继承这两个类的其它类可直接应用这些方法来记录日志,获取属性文件某一个属性的值。
方法的实现见后面的例子。
继承的例子如下:java bean 的继承public class ResourceComInfo extends BaseBean {public void doSomething() { //某一个方法方法的处理………writeLog(s) ;// 写日志}}2.2 怎样记录日志继承了weaver.general.BaseBean ,可以直接使用writeLog方法记录日志信息。
注意这里是使用,而不是调用,因为这个方法是这两个被继承类中的方法。
注意writeLog 方法的使用:/*** 将某个对象写入Log文件* @param obj 被写入的对象*/public void writeLog(Object obj)我们看到,可以被记入日志的是任意一个java对象。
泛微ecology开发实例
泛微ecology的开发实例能够帮助你更好地了解泛微ecology的功能和使用方法。
下面是一个简单的开发实例:
系统框架结构:
- ecology Classbean:存放编译后的CLASS文件。
- js:系统中使用的JAVASCRIPT和VBSCRIPT脚本。
- css:系统中JSP页面使用的样式。
- images:系统中使用的图片的存放目录。
- crm Workflow:该功能分文件夹存放每个功能的文件。
- WEB-INF Prop:系统配置文件存放。
通过上述开发实例,你可以了解到泛微ecology的基本程序结构和文件目录。
在实际的开发过程中,你可以根据具体的需求和情况,对泛微ecology进行进一步的开发和扩展。
如果你需要了解更多关于泛微ecology开发的信息,可以继续向我提问。
E-COLOGY 7.1 中,如何把二次开发的功能加入到系统权限中,并实现通过系统权限来控制先给大家看看我实现后的图示(有图有真像嘛)。
我自己开发了一个与U8集成查询物料的功能,然后我把这个功能加入到系统的权限列表里了,如下图1在没有给任何用户授权时,是不允许访问的。
图2是该功能授权界面,图3是用户访问时界面:现在,我把这个权限授给角色---信息中心主任,他就可以查看了。
图4为授权后的界面,图5为其访问时的界面。
好了,言归正传,现在讲讲如何实现吧。
泛微OA(e-cology)系统功能主要由下面几张表控制:1、系统权限表:SystemRights ,该表主要记录权名称和类别,各字段表示如下id: 权限IDrightdesc: 权限名称righttype: 权限分类(如资料类,系统类等)detachable: 暂不清楚2、系统权限明细表:SystemRightDetail ,该表主要记录各种权限的详细信息,如名称,控制代码等,各字段表示如下id: 主键性字段,无意义rightdetailname: 权限名称rightdetail: 权限控制代码(在网页中即通过识别此段代码来控制权限有无)rightid: 权限ID,与系统权限表中的ID一致3、系统权限组表:SystemRightGroups,该表主要记录各权分的分组情况4、系统权限语言表:SystemRightsLanguage ,该表记录的内容主要为显示语方,各字段表示如下id: 权限IDlanguageid: 语言标识码(7为中文简体,8为英文,9为中文繁体)rightname: 权限名称rightdesc: 权限显示名称一、要实现把二次开发的功能通过系统权限的方式来控制,首先即要在系统权限表(SystemRights)和系统权限明细表(SystemRightDetail)里把相关权限添加进去,本像中二次开发的功能页面-“U8物料查询”(这个页我命名为:ItemBrowserIframe2.jsp),则分别在两个表里插入如下信息在SystemRights 里:insert SystemRights(id,rightdesc,righttype,detachable)values('1600','U8物料查看权限','7','') /* 注:1600为自定义ID,7表示系统类权限在SystemRightDetail 里:insert SystemRightDetail(id,rightdetailname,rightdetail,rightid)values('42800','U8物料查看权限','ItemBrowserIframe2:View','1600') /* 注:这里的ID42800是在原表ID的最大值上加1后插入的,‘ItemBrowserIframe2:View’这段为权限控制代码,1600为权限ID,要与系统权限表里的ID保值一致。
实用标准文案精彩文档二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JAVASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录CrmWorkflow 该功能分文件夹存放每个功能的文件WEB-INFProp 系统配置文件存放Service 系统的接口配置文件的存放二、说明一个JSP页面,一个JAVA程序的基本组成,如何阅读JSP页面1、一个jsp页面通常需要包含什么内容2、如何阅读一个JSP页面由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文:比如:在IE上显示“姓名”那么在JSP页面中将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“select labelname fromhtmllabelinfo where indexid=413 and languageid=7”来获取到“姓名”这个显示名称,其中languageid=7表示中文显示名称,languageid=8表示英文显示名称.delete from HtmlLabelIndex where id=81249delete from HtmlLabelInfo where indexid=81249INSERT INTO HtmlLabelIndex values(81249,'选择范围')INSERT INTO HtmlLabelInfo VALUES(81249,'选择范围',7)INSERT INTO HtmlLabelInfo VALUES(81249,'Range of choice',8)INSERT INTO HtmlLabelInfo VALUES(81249,'選擇範圍',9)3、JAVA程序的基本组成在ECOLOGY中开发JAVA程序建议继承weaver.general. BaseBean,在BaseBean中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
泛微O A e c o l o g y二次开发实例开发完整说明二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JAVASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录CrmWorkflow 该功能分文件夹存放每个功能的文件WEB-INFProp 系统配置文件存放Service 系统的接口配置文件的存放二、说明一个JSP页面,一个JAVA程序的基本组成,如何阅读JSP页面1、一个jsp页面通常需要包含什么内容2、如何阅读一个JSP页面由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文:比如:在IE上显示“姓名”那么在JSP页面中将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“selectlabelname from htmllabelinfo where indexid=413 and languageid=7”来获取到“姓名”这个显示名称,其中languageid=7表示中文显示名称,languageid=8表示英文显示名称.delete from HtmlLabelIndex where id=81249delete from HtmlLabelInfo where indexid=81249INSERT INTO HtmlLabelIndex values(81249,'选择范围')INSERT INTO HtmlLabelInfo VALUES(81249,'选择范围',7)INSERT INTO HtmlLabelInfo VALUES(81249,'Range of choice',8)INSERT INTO HtmlLabelInfo VALUES(81249,'選擇範圍',9)3、JAVA程序的基本组成在ECOLOGY中开发JAVA程序建议继承weaver.general. BaseBean,在BaseBean中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
仅限阅读请勿传播当您阅读本方案时,即表示您同意不传播泛微协同办公平台E-cology8.0版本前端使用手册(3)--流程WeaverSoftware中国上海耀华支路泛微软件大厦邮政编码:200122传真:版权说明本手册以及相关的计算机软件程序仅用于为泛微协同管理平台最终用户提供信息,上海泛微网络科技股份有限公司有权。
本手册是上海泛微网络科技股份有限公司的专有信息,并受中华人民共和国版权法和国际公约的保护。
未得到上海泛微网络科技股份有限公司明确的书面许可,不得为任何目的、以任何形式或手段辅助或传播本手册的任何部分内容。
本手册内容若有变动,恕不另行通知。
本手册中例子中所引用的公司、人名和数据若非特殊说明,均属虚构。
本手册以及本手册所提及的任何产品的使用均受适应的最终用户许可协议限制。
本手册由上海泛微网络科技股份有限公司制作。
本手册中提及的所有商标、商标名称、服务标志及徽标均归其各自公司所有。
目录一、关于本手册...........................................二、手册结构.............................................三、针对用户.............................................四、更多资源.............................................第1章流程模块前端说明.....................................一、概述.................................................二、说明.................................................第2章待办事宜.............................................一、概述.................................................二、功能说明.............................................三、菜单操作.............................................四、签字意见框...........................................五、流程操作说明.........................................六、签字意见查看.........................................七、转发操作............................................. 第3章新建流程.............................................一、概述.................................................二、功能说明.............................................三、流程处理.............................................四、新建自由流程.........................................3.4.1、概述....................................................3.4.2、添加节点................................................ 第4章已办事宜.............................................一、概述.................................................二、功能说明.............................................三、操作选项说明......................................... 第5章流程督办.............................................一、概述.................................................二、功能说明............................................. 第6章我的请求.............................................一、概述.................................................二、功能说明.............................................三、操作选项说明......................................... 第7章自定义查询...........................................一、概述.................................................二、自定义查询...........................................第8章流程代理.............................................一、概述.................................................二、功能说明.............................................三、新建代理.............................................第9章查询流程.............................................一、概述.................................................二、功能说明.............................................第10章流程监控.............................................一、概述.................................................二、功能说明.............................................三、监控操作说明:.......................................第11章流程存为文档.........................................一、概述.................................................二、功能说明.............................................三、流程存为文档.........................................前言一、关于本手册本手册是泛微协同管理平台E-cology8.0基础版本的系统维护手册,主要为了指导用户管理员使用本产品而编写。
泛微协同商务系统(Ecology) 底层包开发指南目录1.引言 (3)1.1概述 (3)1.2定义................................................................................ 错误!未定义书签。
2.底层包应用及范例 (3)2.1最基本的继承类 (3)2.2怎样记录日志 (3)2.3怎样获取属性文件的值 (6)2.4怎样获取系统的运行目录 (7)2.5怎样访问和运行数据库脚本 (8)2.6如何上传一个文件 (11)2.7如何访问已经上传的文件 (15)2.8如何使用缓存提高系统效率 (15)2.9其它底层类基本方法 (26)1. 引言1.1 概述本文档为泛微协同商务系统(Ecology)程序员开发指导文档,讲述了开发底层工具包的应用,常用功能的开发。
2. 底层包应用及范例本章对ecology系统的底层工具包进行讲解,开发人员可以从这里学到怎样利用底层的工具包进行开发2.1 最基本的继承类系统中每一个java bean 都需要继承weaver.general.BaseBean 类。
这个类实现了记录日志和获取属性文件值的方法。
继承这两个类的其它类可直接应用这些方法来记录日志,获取属性文件某一个属性的值。
方法的实现见后面的例子。
继承的例子如下:java bean 的继承public class ResourceComInfo extends BaseBean {public void doSomething() { //某一个方法方法的处理………writeLog(s) ;// 写日志}}2.2 怎样记录日志继承了weaver.general.BaseBean ,可以直接使用writeLog方法记录日志信息。
注意这里是使用,而不是调用,因为这个方法是这两个被继承类中的方法。
注意writeLog 方法的使用:/*** 将某个对象写入Log文件* @param obj 被写入的对象*/public void writeLog(Object obj)我们看到,可以被记入日志的是任意一个java对象。
二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JA V ASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录CrmWorkflow 该功能分文件夹存放每个功能的文件WEB-INFProp 系统配置文件存放Service 系统的接口配置文件的存放二、说明一个JSP页面,一个JA V A程序的基本组成,如何阅读JSP页面1、一个jsp页面通常需要包含什么内容2、如何阅读一个JSP页面由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文:比如:在IE上显示“姓名”那么在JSP页面中将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“select labelname from htmllabelinfo where indexid=413 and languageid=7”来获取到“姓名”这个显示名称,其中languageid=7表示中文显示名称,languageid=8表示英文显示名称.delete from HtmlLabelIndex where id=81249delete from HtmlLabelInfo where indexid=81249INSERT INTO HtmlLabelIndex values(81249,'选择范围')INSERT INTO HtmlLabelInfo VALUES(81249,'选择范围',7)INSERT INTO HtmlLabelInfo VALUES(81249,'Range of choice',8)INSERT INTO HtmlLabelInfo VALUES(81249,'選擇範圍',9)3、JA V A程序的基本组成在ECOLOGY中开发JA V A程序建议继承weaver.general. BaseBean,在BaseBean 中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
public String getPropValue(String fname , String key)public void writeLog(Object obj)三、页面权限控制的说明,怎样在页面中引用权限,怎么样新增一个权限,如何在新开发的模块上引入权限控制在这一部分将描述:新增的页面如何保持和ECOLOGY的风格保持一致;新增的页面上引用ECOLOGY中的权限;新增的页面上引用新的ECOLOGY中还没有的权限;1、可以根据<泛微协同商务系统(Ecology)_JSP式样编写指南>保证新开发的页面在风格上和原有系统保持一致泛微协同商务系统(Ecology)_JSP式样编写2、引用系统中的权限首先从系统的权限设置中找到需要引用的权限名称,如下如找到“地址类型维护”这个权限,其ID为41,然后通过“select rightdetailfrom systemrightdetail where rightid=41”得到其rightdetail=“AddAddressType:Add”,那么在JSP页面中通过如下语句,就可以使得只有的“地址类型维护”这个权限用的用户可以查看该页面<% if(!HrmUserVarify.checkUserRight("AddAddressType:Add ", user) ) {response.sendRedirect("/notice/noright.jsp");return;}%>3、新增新的权限控制新功能的查看新增功能模块添加权限控制.doc四、系统的人员组织结构的介绍1、主要数据结构HrmResource(人员基本信息表).doc HrmSubCompany(分部信息表).docHrmDepartment(部门信息表).doc2、如何从缓存中获取人员信息(对三个缓存的简单介绍)五、对流程,文档数据的存放说明(主数据,明细数据,一般信息等在数据库中如何存放,主要为了考虑报表的问题)1、文档的主要数据结构文档信息的主要存储表DOCDETAIL:文档信息存储表,主要存放文档的基本信息DOCDETAILCONTENT: 文档内容存放表(如果是ORACLE数据库,如果文档的类型是HTML文档,那么文档内容存放在该表中,SQLSERVER数据库不用该表)DOCIMAGEFILE:文档,附件关联表,此表记录文档和附件(WORD,EXCEL格式文档在数据库中按照附件格式存放)的关系(即一个文档关联了几个附件)IMAGEFILE:附件路径存放表,此表记录了文档的附件(或者WORD,EXCE)存放在文件服务器上的位置DOCSHARE:文档共享表SHARINNERDOC:文档共享明细表,此表存放了该表具体共享给那些用户了DocDetail.doc ImageFile.doc DocImageFile.doc shareinnerdoc.docDocShare.doc2、流程的主要数据结构这里主要介绍流程的数据存放结构及如果通过流程类型获取到流程的字段信息,流程的载体分为表单和单据两类,表单和单据的区别在于:所有使用表单的流程数据存放在同一个表中,而单据每个单据对应着一张独立的数据表1、表单一、对于表单而言流程的数据信息存放在三个数据表中Workflow_requestbase:该表存放了流程的基本信息:标题,创建人,创建时间,流程类型等等Workflow_form:该表存储了流程的具体信息通过REQUESTID字段和Workflow_requestbase表关联Workflow_formdetail:该表存放了流程的明细信息,同样通过REQUESTID 字段和Workflow_requestbase表关联二、通过流程的类型如何获取该流程使用了Workflow_form和Workflow_formdetail表中哪些字段在Workflow_form和Workflow_formdetail表中存放了大量字段,所有使用表单的流程的字段都在这两个表中,如何获取每个流程使用了那些字段呢?A、找到流程的类型ID,假定为wfidB、找到流程用了哪个表单select formid from workflow_base whereid=wfid and isbill=’0’C、获得该表单用到了哪些主字段:select(select fieldlable from workflow_fieldlable where workflow_fieldlable.fieldid=workflow_formfield.fieldid and langurageid=7andworkflow_fieldlable.formid=workflow_formfield.formid)as name,(select fieldname from workflow_formdictwhere id=fieldid)from workflow_formfield whereformid=上面获取的FORMID and (isdetail is null orisdetail=’’)哪些明细字段:select(select fieldname fromworkflow_formdictdetail where id=fieldid)fromworkflow_formfield where formid=上面获取的FORMID andisdetail=’1’2、单据对于表单而言流程的数据信息存放在三个数据表中Workflow_requestbase:该表存放了流程的基本信息:标题,创建人,创建时间,流程类型等等Workflow_form:该表只存放Workflow_requestbase和单据表之间的关系信息各单据主表:该表存储了流程的具体信息通过REQUESTID字段和Workflow_requestbase表关联,如何获取该表呢:A、找到流程的类型ID,假定为wfidB、找到流程用了哪个单据select formid form workflow_basewhere id=wfid and isbill=’1’C、通过单据ID可以获取到该单据使用的字段Select * from workflow_billfield where billid= formidD、通过单据ID找到其用了那个表存储流程主信息,那个表存储流程明细信息select tablename from workflow_bill where id= formidselect tablename from workflow_billdetailtablewhere id= formid各单据主明细表:该表存放了流程的明细信息,同样通过REQUESTID字段和Workflow_requestbase表关联3、流程的其他信息表结构流程处理人情况表Workflow_currentoperator:此表存储了流程当前未操作者,已操作者等信息workflow_requestlog 流程处理意见表:此表存储了流程处理人处理过的审批意见workflow_requestbase.doc workflow_bill.doc workflow_base.doc workflow_currentoperator.docworkflow_requestLog.doc六、系统已经有可开发的接口的培训1、短信接口可以通过该接口实现其他短信网关或者硬件短信设备进行在OA中发送短信的操作通用短信接口实现方式及使用说明.docsms.xml smsZ中间表.xml2、单点登录接口ECOLOGY提供了通过用户映射和模拟其他系统登录窗体的方式实现多系统之间的单点登录接口Ecology系统接口指南---单点登录篇.doc3、流程节点前后附加操作action接口Ecology系统接口指南--节点附加操作.doc4、自定义浏览按钮Ecology系统接口指南--自定义浏览框.docbrowser.xml datasource.xml5、流程webservice接口new_工作流WebService接口.doc6、人力资源webservices接口人力资源WebService接口使用说明.doc7、文档webservice接口e-cology文档WebService接口使用说明.七、Html模式的流程应用HTML模板的应用.doc八、几个常用的底层类的说明最基本的底层类,数据库操作类,上传下载文件,如何构建缓存,基本的工具类Ecology系统底层包开发指南.doc。