下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何集成e 将e表和用户自己的系统集成在一 使用e表,数据库为sqlserver 使用e表forjava,数据库为 系统文件说 前台文 文 E表系统文件中的配置信息说 fcpub.js文件中的配置信息说 fcconfig.xml文件中的配置信息说 数据库表结构说 FC_ENTITY表结 FC_ENTITYSUB表结 FC_EBDS表结 数据库连接的集 e表版数据源的配 E表forJ2ee版数据源的配 常用数据 运行报 在运行报表时动态指定数据 在运行报表时控制权 配置运行报表的在iframe中运行报 修改报 接口开 从运行报表上保存报表的运算结 调用Sqlserver库的过 在sqlserver库中做好如下的过 用过程来定义报表的数据 用call函数来调用过 调用Oracle库的过 在oracle库中做好如下的过 用过程来定义报表的数据 用call函数来调用过 用自己的代码来生成报表运行结果文 在.net中调 在java中调 如何集e将e表和用户自己的系统集成在一,数据库为sqlserversqlserversqlserver中建好用户要开发的数据库,并安装好e表,假如按默认安装到 下 的.net工程,假如此工程在C:\Inetpub\wwwroot\ 将C:\Inetpub\wwwroot\ebiao\ebsys这个 到C:\Inetpub\wwwroot\ 把C:\Inetpub\wwwroot\ebiao\bin\中的所有文件到 <?xmlversion="1.0"encoding="utf-<dsname="eformsqloledb"type="oledb"connStr="Provider=SQLOLEDB;DataSource=localhost;InitialCatalog=efdemo;UserID=sa;Password=;"/><dsname="eformsql"type="sqlclient"connStr="DataSource=localhost;InitialCatalog=eformtest;UserId=sa;Password=;"/><dsname="ebsql"type="oledb"connStr="Provider=SQLOLEDB;DataSource=localhost;InitialCatalog=ebtest;UserID=sa;Password=;"/><dsname="ebsqljava"type="jdbc"jdbcDriver="com.newatlanta.jturbo.driver.Driver"jdbcUrl="jdbc:JTurbo://localhost/ebtest/charset=GBK"user="sa"password=""/><dsname="eboracle"type="jdbc"jdbcUrl="jdbc:oracle:thin:@localhost:1521:sys"user="eboracle"<pubparam>用户.ID,用户.名称,部门.ID,部门.名称,系统.单位名称XML格式的文件,其中<datasources>节点的内容为所有数据库连接的配置,在SQL-SERVER查询分析器编辑框内执行:use ,从而进入数据库名为:操作。点击图标,解压databasebak.rar文件,打开其中的sqlserver.sql文件,点图标,SQLServere省略不做,因为e表不要求必须要有e表的系统表。这样用e表开发用户自己的数据库要用的报表的开发环境配置好了.执行就可以进入eforjava,数据库安装好oracle9i,并解压安装好e表forj2ee,假如安装到下修改web-inf/fcconfig.xml文件,eforj2ee的数据库连接串保存在此文件中,此文件的内<?xmlversion="1.0"encoding="utf-<dsname="fhjtest"type="jdbc"jdbcDriver="com.newatlanta.jturbo.driver.Driver"jdbcUrl="jdbc:JTurbo://localhost/eformtest/charset=GBK"user="sa"password=""/><dsname="efdemo"type="jdbc"jdbcDriver="oracle.jdbc.driver.OracleDriver"jdbcUrl="jdbc:oracle:thin:@localhost:1521:mysys"user="efdemo"password="efdemo"/><dsname="fcsamples"type="jdbc"jdbcDriver="oracle.jdbc.driver.OracleDriver"jdbcUrl="jdbc:oracle:thin:@localhost:1521:mysys"user="fcsamples"password="fcsamples"/><dsname="ebjndi"type="jndi"jndiName="jdbc/ebjndi" p/env"<dsname="eboracle"type="jdbc"jdbcDriver="oracle.jdbc.driver.OracleDriver"jdbcUrl="jdbc:oracle:thin:@localhost:1521:mysys"user="eboracle"password="eboracle"/><dsname="ebsql"type="jdbc"jdbcDriver="com.newatlanta.jturbo.driver.Driver"jdbcUrl="jdbc:JTurbo://localhost/ebtest/charset=GBK"user="sa"password=""/><dsname="eformsql"type="jdbc"jdbcDriver="com.newatlanta.jturbo.driver.Driver"jdbcUrl="jdbc:JTurbo://localhost/eformtest/charset=GBK"user="sa"password=""/><dsname="eformoracle"type="jdbc"jdbcDriver="oracle.jdbc.driver.OracleDriver"jdbcUrl="jdbc:oracle:thin:@localhost:1521:sys"user="eformtest"password="eformtest"/><pubparam>用户.ID,用户.名称,部门.ID,部门.名称,系统.单位名称XML格式的文件,其中<datasources>节点的内容为所有数据库连接的配置,解压databasebak.rar文件,打开其中的oracle.sql文件,将其内容在PL/SQL软件中执行,以生成e表平台上所用的系统表。这一步也可以省略不做,因为e表不要求必须要有e表的系统表。这样用e表forj2ee开发用户自己的数据库要用的报表的开发环境就配置好了.执行就可以进系统文件说e表系统文件分为前台文件和文件。前台文件是指htmjscssxml等文件。后dlljar包。Eforjavaefornet版的前台文件是一样的。但文件不一样。前台文件上图是e表前台文件的界面图,它都在ebsys 下。其中ebsys/eformaspx/ 是e表版的文件。在e表forjava版中不需要此 在 中 提供 是eform的文件,在其下 是eform的样式文件,其中dj.css在样式文件中比较重要,所有表单都它 Common有好多常用的页面,如在运行表单时先打开djframe.htm的页面。 csjsrequest.js这是用于当超的地址是到一个htm页面,此时希望取URL的?后的以参数名称=参数值格式的值时,就需要此JS,它是实现这样的功能的。design.js表单设计器中要用到的fcbasecont.js基本控件(如radiocheckboxcombobox等)中要用到的一些函数。fcdataset.js数据集控件的一些常用函数。fcebiao.jslayout布局控件和ebiao控件的实现函数。fcgensql.jsSQL语句生成向导界面的实现函数。fcopendj.js打开表单用的函数fcother.jsfcpub.js全局JS,它是最常用的函数,几乎所有的页面都会它fcrundj.js表单运行时会用到的函数。fcsavedj.js表单保存时会用到的函数。fcselfuse.jseform系统表单中会用到的函数。fcskins.js切换皮肤的函数。fctoolbar.js自定义表单设计器的的功能函数fctorun.js实现将表单的设计串转换成运行串的功能,它在表单设计器中保存表单fcupload.js多附件上传控件的实现函数。fcvalid.js数据验证的实现函数。fcwebgrid.jsgrid控件的常用函数。htmlarea.jstable-operations.js在表单设计器中设计htmltable的实现函数。Ajax.js微软JS框架。selectdate.js实现选择日期。tabpane.jstab页签控件的实现函数。xtree.js树控件的实现函数。 dataset.htc数据集控件的实现fc_code.htcdropdownlist控件的实现。NumEdit.htcspin控件的实现。webgrid.htcgrid控件的实现。 .htc 下是eform要用到的 常用来保存用户自定义的页面 form_开头 是一些示例用的表单 保存的是用户自定义的JS文件其中userfunc.js在默认时表单都会它可以将 文件如果是e表版就要用到bin,在 ebiao.dll是e表系统的程序。ebiaoext.dll是供用户集成和扩展时写的程序工程。WebBill.dll是当前工程生成的dll,即当前工程的.aspx.cs文件生成的dll.E表版的文件还有ebsys/eformaspx/下的文件,它只有一个WebBill.aspx,这是由前台JS调用DLL文件编译成WebBill.dll)来调用DLL文件中的方法。如果是e表forjava版,需要web-inf/下的fcconfig.xml文件和perties文件,perties文件是log4j的日志的配置文件。web-inf/lib下文件。其中ebiao.jar是eform运行的包。这个包中的根下是WebBill.class文件,这是一个servlet,前台JS用AJAX方式.fcsoft.ajax这个包下是ajax.fcsoft.ajax.chart.fcsoft.report.cell.fcsoft.report.core.fcsoft.report.dataset.fcsoft.report.export.fcsoft.report.ext.fcsoft.util commons-fileupload-1.1.jarcommons-io-1.2.jar是用于上传附件dom4j-1.6.1.jar和jaxen-1.1-beta-6.jardom4j用于分析xml的GUID-OpenTools.jar用于产生GUIDlog4j_128.jarlog4j日志ojdbc14.jaroracle库的JDBC驱动sqlserver7jdbc.jaruna2000.jar这是两个sqlserver库的JDBCbarcode4j.jar md5 .jar读写excelitext_099.jar和 E表系统文件中的配置信息说JSebsys/fceform/js/fcpub.jsJS中要用到的信息。另一个是的XML文件,它配置程序中要用到的一些配置信息。如果是e表版这个文件是binweb-inffcconfig.xml文件。fcpub.js文件中的配置信息说var :"/ebsys/eformaspx", //调用文件的基路径,for.NET的常用写法是:/ebsys/eformaspx,eformforj2ee的常用写法是:/servlet :"/ebsys", 径,常用写法是:/eformsys:://=""表示为java版本,=".aspx"为.net//数据库类型://="FC_DBSTRU"="FC_FLDLIST"://在表单中加载的css文件,路径在,一般写://表单skin :"base", //设计器的样式可设值为:actionButtonDisplay //控件属性框中的设置权限按钮的属性值"none" :"DB2ADMIN", :"dj_sn", :"rightmain", :"absolute", //缺省的定位模式=absolute/static list,textarea,|,dbimg,upload",//表单设计器按钮,|是分隔符,br是换行 :"<optionpath=\" </option><optionpath=\" mon/toolbarinput2.htm\">多表输入</option><optionpath=\" mon/toolbarfind.htm\">查询</option><option mon/toolbar.htm\">带</option>",//配置用eform画的表单的可用工具表示占的高度,如不指定,则取默认值为31px,节点值为名称,在表单设计器的表单属性窗 :":与连接出错 //特定的连出错信 :null,//eform的设计区,是个div :"DsMain", :"null",//取得session的标识,这是为了用同步方式取session的方法,常用写法是:autoAddField:"no" :""//保存各子窗口的url,:""://原来的pubdjbh,用于主键字段的://原来的pubDataSet,://原来的pubEdit,://判断能不能进入表单,为OK :newArray(),//保存校验失败的事件对象,用于在保存前再校验. :newObject(), :window.createPopup()fcconfig.xml文件中的配置信息说<?xmlversion="1.0"encoding="utf-<datasources><dsname="eformsqloledb"type="oledb"connStr="Provider=SQLOLEDB;DataSource=localhost;InitialCatalog=efdemo;UserID=sa;Password=;"/><dsname="eformsql"type="sqlclient"connStr="DataSource=localhost;InitialCatalog=eformtest;UserId=sa;Password=;"/><dsname="ebsql"type="oledb"connStr="Provider=SQLOLEDB;DataSource=localhost;InitialCatalog=ebtest;UserID=sa;Password=;"/><dsname="ebsqljava"type="jdbc"jdbcDriver="com.newatlanta.jturbo.driver.Driver"jdbcUrl="jdbc:JTurbo://localhost/ebtest/charset=GBK"user="sa"password=""/><dsname="eboracle"type="jdbc"jdbcDriver="oracle.jdbc.driver.OracleDriver"jdbcUrl="jdbc:oracle:thin:@localhost:1521:sys"user="eboracle"password="eboracle"<fileroot>/ebsys</fileroot><pubparam>用户.ID,用户.名称,部门.ID,部门.名称,系统.单位名称</pubparam>数据库表结构说FC_ENTITY表结构CREATETABLEFC_ENTITYorgidchar(11)tbnamevarchar(50)NOTNULL,//表名tbchnnamevarchar(50)NULL,owneridchar(11)NULL,keyPrefixchar(3)FC_ENTITYFC_ENTITYSUB表结构CREATETABLEFC_ENTITYSUBorgidchar(11)tbnamevarchar(50)NOTNULL,//表名fdnamevarchar(50)NOTNULL, chnnamevarchar(50) //字段中文fdtypechar(4)NULL,fdsizeintNULL,//字段长度fddecintNULL,//小数位数typechar(10)NULL,detailxmlvarchar(7000)NULL//详细信息,XMLFC_ENTITYSUBFC_EBDS表结构CREATETABLEFC_EBDSnamevarchar(50)NOTNULL,sqlstrvarchar(2000)NULL,//SQLparamvarchar(2000)NULL,//参数信息fieldchnvarchar(2000)NULL,dsnvarchar(50)NULL,//数据源名称dstypevarchar(12)NULLFC_EBDSECREATETABLEFC_REPORTFILEsNamevarchar(100)NOTNULL,userTypevarchar(50)NULL,//用户自定的报表分类sTexttextNULL//报表的内容在的情况下,是可以不用建任何e表系统表的。即不用额外建任何表,e数据库连接的集据源的配在 <?xmlversion="1.0"encoding="utf-<dsname="eformsqloledb" Catalog=eformtest;UserID=sa;Password=;"/><dsname="eformsql"type="sqlclient"connStr="DataSource=localhost;InitialCatalog=eformtest;UserId=sa;Password=;"/><dsname="ebsql" Catalog=ebtest;UserID=sa;Password=;"/>这是一个XML的配置文件,其中的datasources节点用于配置数据源,一般是把可能用到的dsds
// // connStr="Provider=SQLOLEDB;DataSource=localhost;InitialCatalog=eformtest;User 动态数据源的配当数据源名称为:fcDsnTemp时,表示此时数据库连接可以由代码动态产生。如果需要将fcDsnTemp这个名称改名的话,可以通过修改ebiaoext项目下ConfigFix类中的如下publicstaticstringdatasourceNameTemp"fcDsnTemp";ebiaoext项目下GetDbConnectionpublicstaticDBOperatorgetDBOperator(){EforJ2ee据源的配 <?xmlversion="1.0"encoding="utf-<dsname="ebjndi"type="jndi"jndiName="jdbc/ebjndi" p/env"<dsname="fhjtest" jdbcUrl="jdbc:JTurbo://localhost/eformtest/charset=GBK"user="sa"password=""/>这是一个XML的配置文件,其中的datasources节点用于配置数据源,一般是把可能用到的dsdsname="fhjtest" // p/env表示查找数据源时的环境串前缀,在不同的WEB服务器中不同,如中是p/env,而Weblogic和Websphere中均不需要,可以不 jdbcUrl="jdbc:JTurbo://localhost/eformtest/charset=GBK"//URL 如果type=fcpool则表示使用e表自身的数据库连接池此时数据库连接信息的配置在webapps\eform\web-inf\classes\perties文件中动态数据源的配 当数据源名称为:fcDsnTemp时,表示此时数据库连接可以由代码动态产生。如果需fcDsnTemp这个名称改名的话,可以通过修改.fcsoft.report.ext.ConfigFix类中publicstaticStringdatasourceNameTemp"fcDsnTemp";//动态的数据源名称,当数 publicstaticConnectiongetConnection()throwsException中。加上语义层显示字段中文SQLtbnamevarchar(50)NOTNULL,tbchnnamevarchar(50)NULLtbnamevarchar(50)NOTNULL,fdnamevarchar(50)NOTNULL,chnnamevarchar(50)NULL)fc_entity(tbname字段和表中文名称(tbchnname字段,fc_entitysub表用于保存字段中文名称,表名称(tbname字段),字段名称(fdname字段),字段中文名称(chnname字段。ebsys/fceform/js/fcpub.js5 : :SQL语句向导界面中便会自动列出这两个表常用数据作只需要在开始使用时做一次就可以了.SQL语句是:CREATETABLEFC_EBDSnamevarchar(50) NOTNULL,sqlstrvarchar(2000) NULL,paramvarchar(2000) NULL,fieldchnvarchar(2000) NULL,dsnvarchar(50) NULL,dstypevarchar )存为常用数据集按钮,这样以后在别的报表中再需要此数据集时,便不用从头来设置,可以选运行报IE(注意:这个路径一般是对于e表for.NET版而言的,对于e表forJ2EE版而言,往往需 , ,下同testURLurlpara=yes表示不会出现报表参数的输入界面。startdate=2005-02-01startdate2005-02-01URL中未给值的报表参URL&e_runsavefile=a1则表示运行报表时会在服务器端将当前报表的运行结果保存为文件,主文件名为a1,具体是当报表结果分多页时,文件名为的fcpub.tempFilePath。URL&宏变量名=URL&e_pageno=2表示直接显示报表结果中的第二页的内容,1开始的整数,但当&e_pageno=-1表示将分页前的整个报表运算结果显示用&e_pageno=-1来运行报表,一般用只需要显示报表运行结果的场合,因为是不在运行报表时动态指定数据URL后面加上&urldatasource=值的方式来实现。这个值的格式是: //default表示要打开默认的数据库连url=\"DataSource=localhost;InitialCatalog=ebtest\"dsURLjavascriptescape后才行。URL后加上:在运行报表时控制权在运行报表时常常需要控制权限,比如运行A报表,则不能运行A报表。e表中实现此功能是通过在ebsys/fceformext/js/userfunc.js中的*functionURLname=报表名称的方式,则在此函数中session变量来取得当前用户信息。再判断能不能正常运行报表,如最后运callback(true);//执行此命令表示能正常运行报表.callback(false);//通知关闭窗口GetSession("username",function(arrRet){varsessionValue=arrRet["username"];if(sessionValue=="liuxm"&&parent.Request.QueryString("name").toStringcallback(false);}配置运行报表运行报表的可以通过ebsys/fceform/ereport/js/loadreport.js中的fcpub.toolbar变运行报表的的样式可以通过ebsys/fceform/ereport/js/loadreport.js中的fcpub.toolbarstyleURL后加上&tbcss=red之类的方式来指定的样式。共有:red,yellow,light,Office,blue,green,white,CoolBlue等样式名ebsys/fceformext/js/userfunc.js*function函数中写代码来实现根据不同的操作员的权限来显示不同的运行报表的按钮即实现比如操作员为时不能有导出excel的功能。sessionfcpub.toolbar全局变量赋值,以控制运行报表的上出哪些按钮。iframe中运行报ebsys/ebsamples/iframerun.htmhtm文件中<iframeid=iframe1src="../fceform/ereport/ebrun.htm?name=samples/s_数据集函数"width=0height=0></iframe>iframewidthheight0,否则的话可以根据需要widthheight值。然后在页面中加一个按钮:<buttononclick="uf_test()">打印JSfunction//要调用运行报表的函数,可以用如下方式//其中,Print(4)为运行报表窗口的全局的js函数.}也可以做其它的工作,比如导出PDF文件等等。运行报表窗口提供的js函数有MovePage(1)上一页MovePage(2)上一页MovePage(3)第一页MovePage(4)最后一页Print(1)打印预览Print(2)打印Print(3)Print(4)SaveasExcel(true)excel文件中SaveasExcel(false)excel文件中SaveasPdf()pdf文件中实际上也就是上提供的功能函数修改报IE来直接在报表设计器中打开此报表来修改,其中s_simplelist为报表文件名,samples/为它批量打印报ebsys/ebsamples/batchPrint.htm文functionuf_start()vararr=newArray();arr[0]fcpub.rootPath+"samples/s_simplelist.htm";arr[1]=fcpub.rootPath+"samples/s_cross0.htm";arr[2]=fcpub.rootPath+"samples/s_报表区域.htm"; //组织要打印配置的XMLvarsb=newSys.StringBuilder("<filenames>");for(vari=0;i<arr.length;i++){sb.append("<fn><in>"+arr[i]+}varsPaths=><orderpageno>no</orderpageno></paths>";//fromdb=yes表示报表文件保存在数据库中=yesvarsXml=}接口开将报表格式文件保存到数据库e表名:e_reportfilesName notnullsTexttextsName保存报表名,sText勾上[从数据库中读写报表格式文件],然后按确定e_reportfile自定义数据数据集的内容一般来说都是来自于一个SQL语句或过程的运行结果,但有时可能s_自定义数据集.htm为例来说明。s_自定义数据集.htm文件,进入数据集的[详细属性]数据集报表文件在同一 下。要想运行此表,应修改xmlfile后的路径值,让它正确地找到userds.xml文件。efor.Net版本中的做法是ebiaoextDesignReportEvent.cs///<paramname="prop">设置自定义数据集时定义的参数///<paramname="colNameList">字段名列表///<paramname="dataList">整个数据集的数据publicstaticvoidUserDefineDataSet(System.Collections.Hashtableprop,outSystem.Collections.ArrayListcolNameList,outSystem.Collections.ArrayListdataList)prop =="C:/Inetpub/wwwroot/WebBill/userds.xml"eforJ2EE版本中的做法是 .fcsoft.report.ext包下有一个UserDs.java的示例文件中定义如下函数/////////<paramname="prop">设置自定义数据集时定义的参数///<paramname="colNameList">返回字段名列表///<paramname="dataList">返回整个数据集的数据publicstaticvoidUserDefineDataSet(Hashtable prop,ArrayListcolNameList,ArrayListprop 和xmlfile, =="C:/Inetpub/wwwroot/WebBill/userds.xml"在这个函数中输出colNameList(字段名列表)和dataList(整个数据集的数据),这两个都是ArrayListdataList的每个元素的内容是Object[]。colNameList,dataListxmlfilexml文件来得到数据集。用户在自定义数据集定期运行报表的实e表内部提供了函数来实现成批的运行报表,并将报表结果保存为文件(html,xls,pdf等 <config>econfig文件的路径 <exptype>htm/xls/xlt/pdf/*</exptype生成文件的类型,为* 名<genname>生成后的文件名(jstxtXml.value为输入参数值,运行后的输出参数也返回到txtXml.value中。SendHttp(tocol+"//"+location.host+fcpubdata.servletPath+functionvarsRet=result.value;txtXml.value=sRet;} 装入已存好的报表结果页一般是先用上节的方式,成批的运行报表,并将报表结果保存为文件(html,xls,pdfebsys\ebexpfile\下。且文件名,ebBill,ebsys,ebfile,samples,s_simplelist.xlsWebBill中当前虚拟的名称。替换为htm文件时,应为:,WebBill,ebsys,ebfile,samples,s_simplelist_1.htm格式,主文件名加上_1表示第一页的内IE 在其中点击鼠标右键,点属性,可以看出是直接到在这个报表运行上点导出到Excel文件和导出为pdf文件时也将是直接调用以前生成Excelpdf文件。要点:URL中加上&e_directrun=yes表示直接打开已经生成好的报表结果文件。URL中加上&e_pages=22,一般的流程是在生成报表XML信息中含有报表的总页数,用户可以用程序将这报表的总页数先xml文件中,也可以保存到数据库的表中。然后在装入已存好的&e_pages=2URL运行报表串URL中有&e_pages=2必须在有&e_directrun=yes时才起作用。含参数的报表的运算结果保URL&e_runsavefile=testsave则表示会将本次报表的运行结果保存为文件(含多页的每个htm文件,两个excel文件,pdf文件一般会01件(注意:testsave是主文件名)是日期为:2007-08-01时的报表运行结果文件。它默认情ebsys\ebtmpfile\下。iframe中运行,而且需要利用报HandleAfterInitReport函数名是固定名称,是在运行报表结束后就会调用此函数oRet现有oRet.pagesfunction成批保存报表结果的示例详见:\ebsys\ebsamples\iframesave.htmurle_directrun=主文件名,ebsys\ebtmpfile\下保存当前报表结果的文件。比如在\ebsys\ebtmpfile\下保存了几个testsave的文件。它是samples\s_simplelistIE的地址栏上写: 限。然后在fceformext/js/userfunc.js文件的functionEbiaoEnterStatus(callback)的开始处加if(parent.Request.QueryString("e_runsavefile").toString()!="undefined"||(parent.Request.QueryString("e_directrun").toString()!="undefined"&&parent.Request.QueryString("e_directrun").toString()!="yes")){fcpub.tempFilePath=GetUrlFirstPart()+}其意思是在运行报表前调整全局变量fcpub.tempFilePath的值到你的子 了。if(parent.Request.QueryString("e_runsavefile").toString()!="undefined"||(parent.Request.QueryString("e_directrun").toString()!="undefined"&&parent.Request.QueryString("e_directrun").toString()!="yes")){这个条件判断可以根据自己的从运行报表上保存报表的运算结本节介绍如何实现在运行报表上加一个保存按钮,点此按钮后将运算结果保存为文修改ebsys/fceform/ereport/js/loadreport.jsfcpub.toolbar变量的值,由:即在运行上加上了一个保存按钮ebsys/fceformext/js/userfunc.jsEbiaoSaveEvent()函数,*从上点保存按钮时执行此函数,它用保存当前报表运行结果functionEbiaoSaveEvent()varsaveFileName="curSave";//要保存的主文件名RunReport(1,"保存",saveFileName,function(result){varTotalPages=result.pagesvarsRetValueresult.valuexml字符串.varsReportFile=parent.sPubPath;//本次运行的报表文件.}在此函数中,执行RunReport(1,"保存",saveFileName,function(result){});时会调用程序来function(result){varTotalPages=result.pagesvarsRetValueresult.valuexml字符串.varsReportFile=parent.sPubPath;//本次运行的报表文件.}在此函数中可以取到返回的信息,这些信息可以保存起来供后面使用保存报表结果文件时注yes&e_directrun=yes表示固定undefined般这个超的地址是用相对路径来到ebsys\fceform\ereport\ebrun.htm的.而要保证一../../fceform/ereport/ebrun.htm能找到ebrun.htm文件如何实现在运行报表时调整统计图功ebfile/samples/动态统计图.htm这个报表是实现在运行报表时调整统计图功能的,它主要B5=${macro1},动 图 为chart("title=xx示例&xlabel=c3&titlefont=隶书,16pt,0&titlecolor=#0000ff&xtitlefont=宋 体,12pt,0&xlabelcolor=#0000ff&is3d=1&islegend=1&s10_name= 合同利用js的escape函数转码后的值,转码的目的是怕URL中数据实现自定义函数功数功能的大致步骤为:由用户自行编写程序,实现其publicvoidcalculate()方法,通 下的ebcustomfunc.xml中后,能如e表内置的函数一样可以直接在报表文件中使用其的函数名。<?xmlversion="1.0"encoding="GB2312"<funcname="upper1"class="LoadEbiao.Upper1"type="1"<funcname="sum1"class="LoadEbiao.DSSum1"type="2"<funcname="取出" .fcsoft.report.core.function.DSGet"type="4"”对于e表for.NET版来说,通过在工程LoadEbiao中增加的函数代码,代码的法可以参照示例中的方式编译生成dll文件后将LoadEbiao.dll到系统的 下eforJ2EEeUpperjava文件,放在相应的包下。Upper.java的代码如下: publicclassUpperextends{public{}publicObject{if(paramList.size()==thrownewReportError("upper函数参数为空");ExpParseparam1=(ExpParse)paramList.get(0);if(result1==null)returnresult1;if(!(result1instanceofString)){thrownewReportError("upper1应为字符串}{Stringstr=(String)result1;returnstr.toUpperCase();}}}e改短(groupG等等。象<funcname="取出" .fcsoft.report.core.function.DSGet"type="4"就是将系统内的get”取出”getefor.NETyp=””4”e表forvatype=””表示为常规函数,type=2”<funcname="取出" .fcsoft.report.core.function.DSGet"type="2"报表运行时改变参数或宏的事增加报表的宏定义。在e表中通过写的IParamMacro事件代码来实现。对于efor.NETLoadEbiaoIparamMacro.cs文件的代码,代码的写法可以参照示例中的方式编译生成dll文件后将LoadEbiao.dll到系统的改变参数的/////////<paramname="env">当前报表运行环境///<returns>无publicvirtualvoidsetParams(Env{stringsParamTag=env.Request["e_setparammacro"];stringparamName="arg1"if(env.isParamName(paramName))env.putParam(paramName,"StringMapparamsMap=newStringMap(1); ra"]="newvalue";}改变宏的事/////////<paramname="env">当前报表运行环境///<returns>无publicvirtualvoidsetMacros(Env{stringsParamTag=env.Request["e_setparammacro"];stringmacroName="macro1"if(env.isMacroName(macroName))env.putMacro(macroName,"StringMapmacrosMap=newStringMap(1);macrosMap["newmacro"]="newvalue";}在此处写了事件代码并编译LoadEbiao.dll,到系统的bin后。按常规方式运行报表时并不会调用到此处的事件代码,只有在运行报表的URL的后加上了&e_setparammacro=yes后才会调用此处写的事件代码。&e_setparammacro=yesyes也可以用其它的非空值代替。也就是说只要&e_setparammacro非空才能调用事件代码。因为stringsParamTag=env.Request["e_setparammacro"];来区分了。env.Request["e_setparammacro"]&e_setparammacro=yesyes这个值。比三类报表参数的处理方式:type1,type2,type3;则事件代码为:stringsParamTagenv.Request["e_setparammacro"];if(sParamTag.equals(“type1”)){}if(sParamTag.equals(“type2”))}if(sParamTag.equals(“type3”))}在运行报表时要调用第一种报表参数的处理方式就加上:&e_setparammacro=type1,要调用第二种报表参数的处理方式就加上:&e_setparammacro=type2,以此类推。arg1=1arg1=2,则最终是按报表参arg1=2来运算报表的。eforJava.fcsoft.report.extsetMacros(Envenv)方法用于设置宏值。用户可以修改这部分代码后,编译运行即可。报表运行时改变数据集配置的事通过写的IDataSet事件代码来实现。efor.NETLoadEbiaoIDataSet.cs文件的代码,代码的写法可以参照示例中的方式。编译生成dll文件后,将LoadEbiao.dll到系统的改变数据集配置的事/////////<paramname="env">当前报表运行环境///<paramname="dss">原始的数据集配置信息///<returns>处理后的数据集配置信息publicvirtualGetDataSetssetDataSetConfigs(Envenv,GetDataSets{stringsParamTag=env.Request["e_setdataset"];DataSetConfigdsc=dss.get_Renamed("ds1");dsc.SQL"select*frome_group";sql语句dss.put(dsc);//将修改后的dataset加回DataSetConfignewdsc=newDataSetConfig();newdsc.Name="ds2";//数据集名称,必须指定newdsc.SQL"select*frome_groupwheresdw=?";newdsc.addSQLArgument("公司",ArgDataType.STRING);//设置参数的值return}在此处写了事件代码并编译LoadEbiao.dll,到系统的bin后。按常规方式运行报表时并不会调用到此处的事件代码,只有在运行报表的URL的后加上了&e_setdataset=yes&e_setdataset=yesyes也可以用其它&e_setdatasetstringsParamTag=env.Request["e_setdataset"];来区分了。env.Request["e_setdataset"]&e_setdataset=yesyes这个值。比stringsParamTagenv.Request["e_setdataset"];if(sParamTag.equals(“type1”)){}if(sParamTag.equals(“type2”))}if(sParamTag.equals(“type3”))}在运行报表时要调用第一种改变数据集配置的处理方式就加上:&e_setdataset=type1,要调用第二种改变数据集配置的处理方式就加上:&e_setdataset=type2,以此类推。eforJava.fcsoft.report.ext下的SetInRunReport.Java文件中。其中有publicGetDataSetssetDataSetConfigs(Env调用Sqlserver库的过调用过程的地方有两处:1是在定义数据集时,选择类型为过程。2是在应calldbcall函数时。在sqlserver库中做好如下的过selecttop3idfrom@Searchvarchar(100)exec('selectimoneyfrome_group'+@Search)@Searchvarchar(100) @retvarchar(1000)out--exec('selectimoneyfrome_group@Search)set@ret='值:'+@Search过程e_test是一个简单的sql语句,过程e_testpara含有一个输入参数,过程用过程来定义报表的数据版来说,根据使用的数据库连接对象的不同而设置不同:用OleDb方式来连接的话,应设置如下:SqlClient要注意此时必须要设置参数名称Search,且参数名称Search必须和过程eforJavaOleDb用call函数来调用过版来说,根据使用的数据库连接对象的不同而设置不同:用OleDb方式来连接的话,应设置如下:单元格的表达式为:=call("e_testpara","wheresarea='表示调用过程:e_testpara,。第二个及以后的参数为过程的参数值数值为@@result时,表示此参数为输出参数。默认时,输出参数的类型为字符型,长度为SqlClient方式来连接的话,应设置如下单元格的表达式为:=call("e_testpara","search","wheresarea='表示调用过程:e_testpara,第二个参数为参数名列表,多个参数时用逗号分隔开参数名称必须和过程e_testpara中定义的参数名称一样。第三个及以后的参数为过程隔开参数名称,第三个及以后的参数为过程的参数值。当参数值为@@result时,表示callcall函数中的代码:usingusingExpParse usingFunctionUnit= usingConvertTool= usingReportError= usingSQLTool= usingSystem.Data.OracleClient;usingSystem.Data.SqlClient;usingSystem.Data.OleDb;usingSystem.Data; {publicclass{public{}publicoverrideSystem.Object{{System.Data.IDbConnectioncn=if(cn==null||(cn.State==System.Data.ConnectionState.Closed))thrownewReportError("过程调用函数执行异常,无有效数据库连接");System.Stringencoding=env.getDBCharset();if(paramList.Count==0)thrownewReportError("过程调用函数参数列表为空");ExpParseparam1=(ExpParse)paramList[0];System.Objectresult1=ConvertTool.getValue(param1.calculate());System.Stringsql=null;if(result1issql=((System.String)thrownewReportError("过程调用函数参数1应为字符串");mandpst=SupportClass.TransactionManager.manager.PrepareCall(cn,String[]argNameList=null;intstartPos=1;if(pst mand||pst {startPos=2if(paramList.Count>1){ExpParseparam2=(ExpParse)paramList[1];System.Objectresult2=System.StringargNames=null;if(result2isSystem.String){argNames=((System.String)argNameList=argNames.Split(',');//参数名用逗号分开if(argNameList.LengthparamList.Count-startPos)thrownewReportError("call}{thrownewReportError("过程调用函数参数2}}}OracleParameteroraP=null;SqlParametersqlP=null;OleDbParameteroledbP=null;intrn=0;for(inti=startPos;i<paramList.Count;{ExpParseparam=(ExpParse)paramList[i];if(param==null)thrownewReportError("stringargNameif(startPos==2)argName=argNameList[i-startPos];System.Objectresult=ConvertTool.getValue(param.calculate());if(result!=null&&{if(pstis mand){//":"+Convert.ToString(
oraP=newOracleParameter();//oraP.ParameterName=argName;//"p_CURSOR";//oraP.OracleType=OracleType.Cursor;oraP.OracleType=OracleType.VarChar;oraP.Size=4000;oraP.Direction=System.Data.ParameterDirection.ReturnValue;//此处用}catch(Exceptione) thrownewReportError(System.String.Concat("过程调用参数异常:",e.Message.ToString().ToString()),e);}if(pstis mand){sqlP=newSqlParameter();//sqlP.ParameterName=argName;sqlP.Size=4000;sqlP.SqlDbType=sqlP.Direction=System.Data.ParameterDirection.Output;//此处要用}catch(Exception{ thrownewReportError(System.String.Concat("过程调用参数异常:",e.Message.ToString().ToString()),e);}if(pstis mand){oledbP=newOleDbParameter();//oledbP.Size=4000;oledbP.OleDbType=oledbP.Direction=System.Data.ParameterDirection.Output;//此处要用}catch(Exception{ thrownewReportError(System.String.Concat("过程调用参数异常:",e.Message.ToString().ToString()),e);}}{}}
if(rn==rn=SQLTool.setObject(pst,i-startPos+1,result,if(oraP!=null||
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论