泛微OA-ecology-二次开发实例-开发完整说明
泛微OA-ecology-二次开发实例-开发完整说明学习资料
二次开发培训文档一、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 中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
泛微表单建模二次开发案例
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>。
泛微OAecology二次开发实例开发完整说明书
二次开发培训文档一、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. 引言 (2)1.1概述 (2)1.2定义 ..................................... 错误!未定义书签。
2.底层包应用及范例 (2)2.1最基本的继承类 (2)2.2怎样记录日志 (3)2.3怎样获取属性文件的值 (9)2.4怎样获取系统的运行目录 (12)2.5怎样访问和运行数据库脚本 (13)2.6如何上传一个文件 (23)2.7如何访问已经上传的文件 (31)2.8如何使用缓存提高系统效率 (32)2.9其它底层类基本方法 (61)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对象。
(OA自动化)泛微协同OA办公系统方案
(OA自动化)泛微协同OA 办公系统方案泛微e-office协同OA应用方案目录目录2第一部分总体介绍4一、企业需要什么样的OA?4二、e-office的解决方案4三、e-office的十大关键应用4第二部分e-office的功能说明12一、功能应用架构12二、各功能应用说明131、门户应用131.1板块综述131.2多门户信息展现131.3内部信息发布151.4外部资讯抓取151.5扩展集成应用162、流程管理172.1板块综述172.2无纸化办公和规范管理流程172.3自由流程182.4流程处理查询192.5收发文管理202.6流程报表统计212.7表单智能设置222.8图形化流程配置232.9快速复制、套用流程表单模板243、知识管理243.1板块综述253.2建立企业知识管理体系253.3辅助个人知识管理263.4知识地图--创建知识共享整合环境263.5知识讨论回复263.6图档管理263.7企业知识目录构建273.8丰富的自定义权限体系273.9建立知识推送通道273.10快速调用知识模块273.11知识报表分析中心274、沟通平台274.1板块综述274.2事务协作中心284.3新闻公告管理294.4内外部邮件管理294.5内外部短信管理304.6信息论坛讨论中心304.7网上投票调查305、综合事务315.1板块综述315.2日程安排管理315.3工作计划管理325.4工作日志管理335.5会议管理335.6客户管理345.7供应商管理355.8车辆管理355.9办公用品管理365.10固定资产管理365.11图书管理376、系统管理376.1组织机构设置376.2角色与权限管理386.3印章管理386.4交流设置386.5界面设置386.6菜单设置386.7系统日志管理386.8系统资源管理386.9系统访问控制386.10系统安全设置386.11数据备份和恢复39第三部分e-office的客户价值39一、投资少,性价比高39二、快速应用,快速见效39三、简单易用,方便维护39四、平稳升级,适应企业发展39五、服务体系完善,多种服务方式39附件:部分成功客户名单40根据企业内部不同分公司、不同部门的员工本身的工作范畴,为其提供有自身需求的工作信息内容和快速统一的获取渠道,从而建立企业内部的统一的不同级别的信息门户,加强工作信息的利用价值。
泛微OA ecology 二次开发实例 开发完整说明
二次启垦训练文档之阳早格格创做一、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 HtmlLabelInfoVALUES(81249,'Range of choice',8)INSERT INTO HtmlLabelInfo VALUES(81249,'選擇範圍',9)3、JAVA步调的基础组成正在ECOLOGY中启垦JAVA步调修议继启.BaseBean,正在BaseBean中主要启拆了二个要领:写日志文献,获与摆设文献中的参数值.public String getPropValue(String fname , String key)public void writeLog(Object obj)三、页里权力统造的证明,何如正在页里中引用权力,怎么样新删一个权力,怎么样正在新启垦的模块上引进权力统造正在那一部分将形貌:新删的页里怎么样脆持战ECOLOGY的风格脆持普遍;新删的页里上引用ECOLOGY中的权力;新删的页里上引用新的ECOLOGY中还不的权力;1、不妨根据<泛微协共商务系统(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、新删新的权力统造新功能的查看四、系统的人员构造结构的介绍1、主要数据结构2、怎么样从慢存中获与人员疑息(对付三个慢存的简朴介绍)五、对付过程,文档数据的存搁证明(主数据,明细数据,普遍疑息等正在数据库中怎么样存搁,主要为了思量报表的问题)1、文档的主要数据结构文档疑息的主要保存表DOCDETAIL:文档疑息保存表,主要存搁文档的基础疑息DOCDETAILCONTENT: 文档真质存搁表(如果是ORACLE数据库,如果文档的典型是HTML文档,那么文档真质存搁正在该表中,SQLSERVER数据库不必该表)DOCIMAGEFILE:文档,附件闭联表,此表记录文档战附件(WORD,EXCEL要领文档正在数据库中依照附件要领存搁)的闭系(即一个文档闭联了几个附件)IMAGEFILE:附件路径存搁表,此表记录了文档的附件(大概者WORD,EXCE)存搁正在文献服务器上的位子DOCSHARE:文档共享表SHARINNERDOC:文档共享明细表,此表存搁了该表简直共享给那些用户了2、过程的主要数据结构那里主要介绍过程的数据存搁结构及如果通过过程典型获与到过程的字段疑息,过程的载体分为表单战票据二类,表单战票据的辨别正在于:所有使用表单的过程数据存搁正在共一个表中,而票据每个票据对付应着一弛独力的数据表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 formidfromworkflow_base where id=wfid andisbill=’0’C、赢得该表单用到了哪些主字段:select(select fieldlablefrom workflow_fieldlable where workflow_fieldlable.fieldid=workflow_formfield.fieldidandlangurageid=7and workflow_fieldlable.formid=workflow_formfield.formid)asname,(select fieldnamefrom workflow_formdict whereid=fieldid)from workflow_formfield where formid=上头获与的FORMID and (isdetail is null orisdetail=’’)哪些明细字段:select(select fieldnamefrom workflow_formdictdetail whereid=fieldid)from workflow_formfield where formid=上头获与的FORMID and isdetail=’1’2、票据对付于表单而止过程的数据疑息存搁正在三个数据表中Workflow_requestbase:该表存搁了过程的基础疑息:题目,创修人,创修时间,过程典型等等Workflow_form:该表只存搁Workflow_requestbase战票据表之间的闭系疑息各票据主表:该表保存了过程的简直疑息通过REQUESTID字段战Workflow_requestbase表闭联,怎么样获与该表呢:A、找到过程的典型ID,假定为wfidB、找到过程用了哪个票据select formidform workflow_base where id=wfid andisbill=’1’C、通过票据ID不妨获与到该票据使用的字段Select * from workflow_billfield wherebillid=formidD、通过票据ID找到其用了那个表保存过程主疑息,那个表保存过程明细疑息select tablename from workflow_bill whereid=formidselect tablenamefrom workflow_billdetailtable whereid=formid各票据主明细表:该表存搁了过程的明细疑息,共样通过REQUESTID字段战Workflow_requestbase表闭联3、过程的其余疑息表结构过程处理人情况表Workflow_currentoperator:此表保存了过程目前已收配者,已收配者等疑息workflow_requestlog 过程处理意睹表:此表保存了过程处理人处理过的审批意睹六、系统已经有可启垦的交心的训练1、短疑交心不妨通过该交心真止其余短疑网闭大概者硬件短疑设备举止正在OA中收收短疑的收配2、单面登录交心ECOLOGY提供了通过用户映射战模拟其余系统登录窗体的办法真止多系统之间的单面登录交心3、过程节面前后附加收配action交心4、自定义欣赏按钮5、过程webservice交心6、人力资材webservices交心7、文档webservice交心七、Html模式的过程应用八、几个时常使用的下层类的证明最基础的下层类,数据库收配类,上传下载文献,怎么样构修慢存,基础的工具类。
泛微OA-ecology-二次开发实例-开发完整说明.doc
二次开发培训文档一、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 中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
泛微OA实施方案实例
泛微OA实施方案实例在当今信息化的办公环境中,企业需要建立高效的办公自动化系统来提高工作效率、降低成本。
泛微OA作为一款领先的办公自动化系统,为企业提供了全面的解决方案,涵盖了办公协同、流程管理、知识管理等多个方面。
本文将结合实际案例,介绍泛微OA的实施方案,以期为企业在实施泛微OA时提供参考。
1.需求分析。
在实施泛微OA之前,首先需要进行需求分析,明确企业的具体需求和目标。
例如,企业是否需要建立统一的流程管理系统?是否需要提高员工的协同办公效率?是否需要加强对知识库的管理和共享?通过对企业需求的全面了解,可以有针对性地制定实施方案,避免资源的浪费和盲目的实施。
2.系统规划。
在需求分析的基础上,进行系统规划是实施泛微OA的关键步骤之一。
系统规划包括了硬件设备的选型、系统架构的设计、安全性和稳定性的考量等方面。
例如,根据企业规模和业务需求,选择合适的服务器设备和存储设备;设计系统架构,确保系统的高可用性和扩展性;制定安全策略,保障系统数据的安全和隐私。
3.流程优化。
泛微OA的实施需要对企业的业务流程进行优化和重构,以适应系统的应用。
通过对企业现有流程的分析和优化,可以提高工作效率、降低成本、减少人为错误。
例如,对采购、报销、审批等流程进行重新设计,实现自动化流转和智能化处理,提高流程的透明度和可控性。
4.系统实施。
系统实施是整个实施过程中的核心环节,需要制定详细的实施计划和时间表,确保实施过程的顺利进行。
在实施过程中,需要对系统进行部署和配置,进行数据迁移和系统集成,进行用户培训和技术支持等工作。
同时,需要在实施过程中对系统进行监控和评估,及时发现和解决问题,确保系统的稳定运行。
5.系统运维。
系统实施完成后,需要进行系统的日常运维和维护工作,以保证系统的稳定和安全。
包括系统的监控和性能优化、数据备份和恢复、安全漏洞的修补等方面。
同时,需要及时跟踪系统的使用情况和用户的反馈,不断改进系统,满足企业的不断变化的需求。
泛微 ecology 二次开发培训文档
二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JA V ASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录Crm..Workflow 该功能分文件夹存放每个功能的文件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表示英文显示名称,languageid=9表示繁体显示名称.3、JA V A程序的基本组成在ECOLOGY中开发JA V A程序建议继承weaver.general. BaseBean,在BaseBean 中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
写日志的方法:writeLog(Object obj) 日志会输出到weaver/ecology/log/ecology 中获取配置文件数据:getPropValue(String fname , String key)比如获取weaver.properties中的DriverClasses的值,代码如下:getPropValue(“weaver”,” DriverClasses”)三、如何添加多语言版本的标签四、页面权限控制的说明这一部分将讲解怎样在页面中引用权限,怎么样新增一个权限,如何在新开发的模块上引入权限控制,1、引用系统中的权限首先从系统的权限设置中找到需要引用的权限名称,如下图找到“表单维护”这个权限,其ID为591,然后通过“select rightdetail from systemrightdetailwhere rightid=591”得到其rightdetail=“FormManage:All”,那么在JSP页面中通过如下语句,就可以使得有“表单维护”这个权限的用户可以查看该页面2、如何新增新的权限如何在新建的功能模块上添加新的权限(JSP页面添加权限控制)第一步:通过类似的sql先添加一个需要的权限在数据库中执行完上面的sql后,在系统权限管理中就可以看到添加的该权限了!注意:以上SQL语句中的id请用负数或者统一使用1000000以上的值(这样可以避免和我们升级可能给出的权限重复),并保证不重复,同时保证SystemRightDetail的字段rightdetail也不能重复,上面插入SystemRightDetail表数据的sql,其中42717目前没有实际意义,但也请不要重复,可以使用一个非常大的数据,比如500000。
泛微OAecology二次开发实例开发完整说明
二次开发培训文档一、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中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
泛微协同商务系统(Ecology)_系统底层包开发指南
泛微协同商务系统(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对象。
泛微oa开发环境搭建说明
泛微o a开发环境搭建说明The document was prepared on January 2, 20211.概述本文档将介绍如何通过自己电脑搭建开发环境,实现开发过程可debug进行调试,从而达到提升开发效率.2.准备工作下载链接地址:密码:r96h此次以本机的Win7+SQL SERVER 2008R2系统运行环境、开发环境进行讲解.①在本机电脑安装好和SQL SERVER 2008R2.注册码:用户名:MyEclipse 注册码:②下载强烈建议将其解压的D盘的根目录,这样就不用改什么东西了③是数据库文件,如果想什么都不改,那么数据库命名为ecology8,用户sa,密码123456,如果数据库改了,则修改D:\WEAVER_E8\ecology\WEB-INF\prop下面文件中的相关参数④如果电脑内存不够大,则修改一下内存,D:\WEAVER_E8\Resin\conf下的文件的90行和91行,改小一点,根据自己电脑内存的实际情况进行设置,如果这里内存设置太大的话,resin 可能到时候运行不起来的⑤解压时,如果不是解压到D盘,或者文件解压后文件也不是叫“WEAVER_E8”,那么需要修改D:\WEAVER_E8\Resin\conf下的⑥查看或者修改端口:D:\WEAVER_E8\Resin\conf下的文件⑦设置Java的环境变量新建好了后,通过dos窗口的Java和javac校验配置的环境变量是否成功⑧解压好了之后,可以进入D:\WEAVER_E8\Resin手工点击进行启动Resin服务,如图备注:若双击后dos窗口闪退,则可能是环境变量未设置成功当dos窗口出现了Resin start in XXXms ,则表示启动已完成,输入地址访问OA系统报错说明:如果启动后,还是无法进入登陆页面,则查看ecology/log路径下面的报错日志文件那么说明SQL Server的TCP/IP服务未开启,那么通过以下方式设置开启⑨输入用户名和密码后需要验证码和授权文件授权文件请将识别码发给泛微人员进行申请,验证码目前设置的是1,查看或者修改进入WEB-INF下面的文件⑩登录成功,准备工作已完成3.搭建开发环境第二步登录成功,说明初步准备工作已经完成,但是并不能说是开发环境已经搭建好了,因为到时候开发是没办法debug,所以下面进行开环境的搭建.①请将准备工作时打开的关闭,切记或者②将D:\WEAVER_E8\ecology下面的classbean文件夹备份一下,切记③打开myeclipse,为使系统运行顺畅些,建议将myeclipse校验取消,然后新建一个JDK校验取消完成,下面新建JDK确定后,一个JDK就建完④新建一个java project不要建web project,否则myeclipse到时会特别卡注意:此步骤可能会比较慢,比较耗CPU和内存,如果myeclipse卡机了几分钟,那么进程关闭myeclipse,重启启动myeclipse,启动后先执行下面的第“⑤”步操作,操作完再回到此处操作.⑤新建src源文件夹如果src文件夹已经有了,则此步骤跳过⑥将系统目前ecology/classbean路径下已有的class文件引用到项目中,以方便后期写java代码时,有相关提示.注意,如果classbean里面的文件被清空了,那么将备份的那个classbean里面的文件复制到classbean中⑦将Resin 下面lib的jar包引用进来⑧配置resin相关参数⑨设置ecology加载的默认class路径ecology加载class文件的默认路径为ecology/classbean,但是若想debug自己写的java代码,那么需要设置resin中的source.进入WEAVER_E8\Resin\conf文件夹下的,增加如下代码⑩debug启动reisin启动完成注:如果没有找到“Servers”,那么可以通过以下操作把其放出来或者点击“Other”注:若启动resin过程中出现以下错误,可能是JDK问题,用myeclipse自带的JDK试试看⑪输入地址访问4.开发调试现在已经将开发环境搭建好,下面可进行debug调试了.①建一个java文件②注册自定义接口③流程节点附件操作引用接口④debug调试提交流程时,等待debug处理完成Myeclipse已经进入到debug状态⑤配置完成。
泛微ecology7二开权限控制
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保值一致。
泛微协同OA管理应用平台(e-cology)的应用模式
移动办公专家 泛微协同OA管理应用平台(e-cology)的应用模式泛微协同管理应用平台应用模式模式一:Intranet应用模式与Internet相同,都是使用Browser/Web Server构成的企业内部网,称为Intranet。
这种模式的特点是Web Server在企业内部,企业外部的访问者必须经过企业的防火墙或代理服务器才能与系统相连。
此应用模式是在企业内部安装并使用泛微协同OA管理应用平台(e-cology)系统,信息只在企业内部网络系统中发布,外部分支机构或者移动办公用户直接与企业连接,接入系统,而不通过Internet。
其拓扑逻辑结构如下图:此应用模式适合于:对"移动商务"要求不高,以及异地分支机构比较少的企业。
所有的OA 系统应用者处于共同的局域网络之中。
此应用模式的优点:这种应用模式实现起来比较方便,可以充分利用企业现有的局域网络系统而不需要做太大的改动。
此外,系统数据不在公众网上发布,因而具有较高的安全性。
移动办公专家 模式二: Extranet应用模式Extranet是分布在多个物理地址上的企业内部网络系统(Intranet),通过专用线路或者VPN(虚拟专用网络)服务而相互连通组成一个大的网络系统,称为Extranet。
Extranet 应用模式的拓扑逻辑结构如下图:此应用模式适合于:在各地有固定分支机构的企业,并且这些分支机构规模比较大,业务相对独立、拥有自己的局域网络系统。
此应用模式的优点:在保留了企业各地分支机构网络系统的独立性,实现了全企业的信息互动。
可以充分利用企业现有的网络系统,节约了实施的成本。
模式三:企业自有Web应用模式如果企业在总部有自己的Web网站,并通过高速的线路向Internet发布。
企业可以使用企业自有Web应用模式进行系统建设。
这时,所有的移动办公用户或者异地分支机构直接通过Internet与OA系统进行连接完成业务操作。
泛微OAecology二次开发实例开发完整说明书
实用标准文案精彩文档二次开发培训文档一、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中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
泛微OA ecology 二次开发实例 开发完整说明学习资料
泛微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中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
泛微协同商务系统(Ecology)_系统底层包开发指南[精品文档]
泛微协同商务系统(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) 底层包开发指南目录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对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JA VASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录CrmWorkflow 该功能分文件夹存放每个功能的文件WEB-INFProp 系统配置文件存放Service 系统的接口配置文件的存放二、说明一个JSP页面,一个JA VA程序的基本组成,如何阅读JSP页面1、一个jsp页面通常需要包含什么内容2、如何阅读一个JSP页面由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文:比如:在IE上显示“姓名”那么在JSP页面中将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“select labelname from htmllabelinfowhere 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 VA程序的基本组成在ECOLOGY中开发JA VA程序建议继承weaver.general. BaseBean,在BaseBean中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
public String getPropValue(String fname , String key)void writeLog(Object obj)public怎样在页面中引用权限,怎么样新增一个权限,如何在新开发三、页面权限控制的说明, 的模块上引入权限控制的风格保持一致;新增的页ECOLOGY在这一部分将描述:新增的页面如何保持和中还没有的权限;面上引用ECOLOGY中的权限;新增的页面上引用新的ECOLOGY保证新开发的页面<可以根据泛微协同商务系统(Ecology)_JSP式样编写指南>1、在风格上和原有系统保持一致泛微协同商务系统(Ecology)_JSP式样编写2、引用系统中的权限如下如找到首先从系统的权限设置中找到需要引用的权限名称,“地址类型维护”这个权限,其ID为41,然后通过“select rightdetail”得到其rightdetail=41where rightid=from systemrightdetail “AddAddressType:Add”,那么在JSP页面中通过如下语句,就可以使得只“地址类型维护”这个权限用的用户可以查看该页面<% 有的ifAddAddressType:Add , user) ) { ?版啭敳噲牡晩?档捥啫敳割杩瑨尨response.sendRedirect(\/notice/noright.jsp);return;}%>新增新的权限控制新功能的查看、3.新增功能模块添加权限控制.doc四、系统的人员组织结构的介绍1、主要数据结构HrmDepartment(部HrmResource(人员HrmSubCompany(分基本信息表).doc部信息表).doc门信息表).doc2、如何从缓存中获取人员信息(对三个缓存的简单介绍)五、对流程,文档数据的存放说明(主数据,明细数据,一般信息等在数据库中如何存放,主要为了考虑报表的问题)1、文档的主要数据结构文档信息的主要存储表DOCDETAIL:文档信息存储表,主要存放文档的基本信息DOCDETAILCONTENT: 文档内容存放表(如果是ORACLE数据库,如果文档的类型是HTML 文档,那么文档内容存放在该表中,SQLSERVER数据库不用该表)DOCIMAGEFILE:文档,附件关联表,此表记录文档和附件(WORD,EXCEL格式文档在数据库中按照附件格式存放)的关系(即一个文档关联了几个附件)IMAGEFILE:附件路径存放表,此表记录了文档的附件(或者WORD,EXCE)存放在文件服务器上的位置DOCSHARE:文档共享表SHARINNERDOC:文档共享明细表,此表存放了该表具体共享给那些用户了DocImageFile.docDocDetail.docshareinnerdoc.docImageFile.doc DocShare.doc2、流程的主要数据结构这里主要介绍流程的数据存放结构及如果通过流程类型获取到流程的字段信息,流程的载体分为表单和单据两类,表单和单据的区别在于:所有使用表单的流程数据存放在同一个表中,而单据每个单据对应着一张独立的数据表表单、1.一、对于表单而言流程的数据信息存放在三个数据表中:该表存放了流程的基本信息:标题,创建人,创建Workflow_requestbase 时间,流程类型等等字段和REQUESTIDWorkflow_form:该表存储了流程的具体信息通过表关联Workflow_requestbaseREQUESTID该表存放了流程的明细信息,同样通过Workflow_formdetail:Workflow_requestbase表关联字段和和Workflow_form类过流程的型如何获取该流程使用了二、通表中哪些字段Workflow_formdetail所有在Workflow_form和Workflow_formdetail表中存放了大量字段,如何获取每个流程使用了那些字使用表单的流程的字段都在这两个表中,段呢?wfid A、找到流程的类型ID,假定为workflow_base whereselect formid from 找到流程用了哪个表单B、0'id=wfid and isbill=' 得该表单用到了哪些主字段:、获C(select select fieldlable from where workflow_fieldlablefie workflow_fieldlable.fieldid=workflow_formfield.=ldid and langurageid7and form.workflow_fieldlable.formid=workflow_formfield workflow_formdict as name, (select fieldname from id) where workflow_formfield fieldid where id=)from FORMID and (isdetail is null or formid=上面获取的)''isdetail=哪些明细字段:(select fieldname fromselectfieldid)from workflow_formdictdetail where id=and FORMID where formid=上面获取的workflow_formfield isdetail='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= formid找到其用了那个表存储流程主信息,那个表存ID通过单据、D.储流程明细信息formid id=workflow_bill where tablename from selectselect tablename from workflow_billdetailtableformidwhere id=各单据主明细表:该表存放了流程的明细信息,同样通过REQUESTID字段和Workflow_requestbase表关联3、流程的其他信息表结构流程处理人情况表Workflow_currentoperator:此表存储了流程当前未操作者,已操作者等信息流程处理意见表:此表存储了流程处理人处理过workflow_requestlog的审批意见workflow_requestbworkflow_bill.docworkflow_base.docworkflow_currentoperator.docase.docworkflow_requestLog.doc六、系统已经有可开发的接口的培训1、短信接口可以通过该接口实现其他短信网关或者硬件短信设备进行在OA中发送短信的操作通用短信接口实现方式及使用说明.docsms.xmlsmsZ中间表.xml2、单点登录接口ECOLOGY提供了通过用户映射和模拟其他系统登录窗体的方式实现多系统之间的单点登录接口Ecology系统接口指南---单点登录篇.doc3、流程节点前后附加操作action接口Ecology系统接口指南--节点附加操作.doc自定义浏览按钮4、Ecology系统接口指南--自定义浏览框.docdatasource.xmlbrowser.xml接口、流程webservice5new_工作流WebService接口.doc接口、6人力资源webservices人力资源WebService接口使用说明.doc7接口webservice文档、e-cology文档WebService接口使用说明.七、Html模式的流程应用HTML模板的应用.doc八、几个常用的底层类的说明最基本的底层类,数据库操作类,上传下载文件,如何构建缓存,基本的工具类Ecology系统底层包开发指南.doc。