e表集成开发手册.docx
《e表集成开发手册.docx》由会员分享,可在线阅读,更多相关《e表集成开发手册.docx(44页珍藏版)》请在冰豆网上搜索。
e表集成开发手册
如何集成e表2
e表for.NET版的集成2
1复制系统文件2
2数据库连接2
3集成到2003和2005之间的不同2
e表for.J2EE版的集成2
1复制系统文件2
2数据库连接2
运行报表3
在运行报表时动态指定数据源4
在运行报表时控制权限4
配置运行报表的工具栏5
在iframe中运行报表6
修改报表6
接口开发7
将报表格式文件保存到数据库中7
自定义数据集7
定期运行报表的实现9
装入已存好的报表结果页面11
含参数的报表的运算结果保存13
从运行报表工具栏上保存报表的运算结果14
如何实现在运行报表时调整统计图功能15
实现自定义函数功能15
报表运行时改变参数或宏的事件17
报表运行时改变数据集配置的事件19
如何集成e表
e表for.NET版的集成
1复制系统文件
将ebiao/bin目录下的所有dll文件复制到自己系统的bin目录下。
将ebiao/ebsys目录复制到自己的虚拟目录下。
将ebiao/log4net.config文件复制到自己的虚拟目录下。
2数据库连接
系统可以配置一个默认的数据库连接,当数据集中没有指定连接串时用它。
默认的数据库连接串在web.config文件中的此处配置:
在自己系统的web.config文件中加上此配置。
数据库连接串的写法格式常用有以下几种:
Provider=SQLOLEDB;DataSource=localhost;InitialCatalog=ebtest;UserID=sa;pwd=;
表示用oledb方式来连接sqlserver库
DataSource=localhost;InitialCatalog=ebtest;UserId=sa;Password=;
表示用sqlclient方式来连接sqlserver库
Provider=OraOLEDB.Oracle;DataSource=sys;UserID=eboracle;Password=eboracle;
表示用oledb方式来连接oracle库
DataSource=sys;IntegratedSecurity=no;UserId=eboracle;Password=eboracle;
表示用oracleclient方式来连接oracle库
3集成到2003和2005之间的不同
集成到vs2003时应将bin目录下的WebBill.dll文件删除,因为它是当前工程生成出来的dll,同时应将bin目录中的所有dll文件添加引用到当前项目中。
同时应将当前目录的设置为可写,即象安装时做的这一步一样:
3、从资源管理器中选中C:
\Inetpub\wwwroot\ebiao目录(假如你的IIS装在C:
\下),按右键,点属性菜单,点安全页签,在名称列表中选中Everyone,然后将下面的权限列表中的允许这一列都勾上,按确定即可.(注:
此步不做的话,则无法保存报表文件)。
e表for.J2EE版的集成
1复制系统文件
将ebiao目录下的所有文件复制到自己系统的webapps目录下。
2数据库连接
系统可以配置一个默认的数据库连接,当数据集中没有指定连接串时用它。
默认的数据库连接串在fc.properties文件中配置:
driver=oracle.jdbc.driver.OracleDriver
ccerp.url=jdbc:
oracle:
thin:
@localhost:
1521:
sys
ccerp.user=fcdemo
ccerp.password=fcdemo
ccerp.maxconn=100
ccerp.normalconn=2
conntimeout=3000
debug=false
mailhome=d:
/
pagesize=15
addresssize=10
注意:
如果是连oracle数据库,则应将
D:
\fcsoft\tomcat\webapps\ebiao\ebsys\fceform\js\fcpub.js文件,将第6行的
databaseTypeName:
"sqlserver",
改成
databaseTypeName:
"oracle",
然后保存即可.
运行报表
在报表设计器中设计好了报表文件后,可以通过在IE地址栏上直接输入:
http:
//localhost/ebiao/ebsys/fceform/ereport/ebrun.htm?
file=/ebiao/ebsys/ebfile/test.htm
(注意:
这个路径一般是对于e表for.NET版而言的,对于e表forJ2EE版而言,往往需要加上端口号,如:
http:
//localhost:
8080/ebiao/ebsys/fceform/ereport/ebrun.htm?
file=/ebiao/ebsys/ebfile/test.htm,下同)
来运行,其中test为报表文件名。
/ebiao/ebsys/ebfile/为报表所在的路径。
如是含报表参数的报表,要在运行时自动带上报表参数,即不出一个界面来输入报表参数。
这种情况下运行报表的格式如下:
http:
//localhost/ebiao/ebsys/fceform/ereport/ebrun.htm?
file=/ebiao/ebsys/ebfile/samples/s_参数表单.htm&startdate=2005-02-01&urlpara=yes
在运行报表的URL中含有urlpara=yes表示不会出现报表参数的输入界面。
startdate=2005-02-01表示报表参数startdate的值为2005-02-01,在URL中未给值的报表参数将为报表中定义的默认值。
也可以
http:
//localhost/ebiao/ebsys/fceform/ereport/ebrun.htm?
file=/ebiao/ebsys/ebfile/samples/s_参数表单.htm&startdate=2005-02-01
表示运行报表时先给好了startdate的参数值,但同时出报表参数输入界面,供操作员输入其它报表参数值。
在运行报表的URL后加上&e_runsavefile=a1则表示运行报表时会在服务器端将当前报表的运行结果保存为文件,主文件名为a1,具体是当报表结果分多页时,文件名为a1_1.htm,a1_2.htm,a1_3.htm等等,还同时保存a1.xlsa1.xlt和a1.pdf,对应为excel和pdf的报表内容。
这些文件保存在默认的路径下,即ebsys/fceform/ereport/js/loadreport.js中配置的fcpub.tempFilePath。
通过运行报表的URL中也可以用&宏变量名=宏值的方式预置放宏变量的值。
在运行报表的URL后面加上&e_pageno=2表示直接显示报表结果中的第二页的内容,这个值为从1开始的整数,但当&e_pageno=-1表示将分页前的整个报表运算结果显示出来。
而且以固定行列的方式显示,即非数据区固定不动,数据区超过窗口的宽度或高度时可以来回滚动查看。
用&e_pageno=-1来运行报表,一般用只需要显示报表运行结果的场合,此时不考虑分页和打印,因为是不分页输出,所以当数据量大时可能会很慢。
在运行报表时动态指定数据源
在同一个报表文件上要实现动态指定数据库连接串,这个可通过在运行报表的URL后面加上&urldatasource=值的方式来实现。
这个值的格式是:
default//如有default表示要打开默认的数据库连接
dbencoding=\"GBK\"
dbtype=\"2\"
drivername=\"Provider=SQLOLEDB\"
encodesql=\"false\"
name=\"sqlserver1\"
password=\"\"
url=\"DataSource=localhost;InitialCatalog=ebtest\"
userid=\"sa\"
/>
…//可能有多个象上述ds格式的数据库连接串
上述格式的值因为直接写在URL上会不合法,所以需要用javascript函数escape后才行。
例如:
在URL后加上:
urldatasource=default%3Cdatasources%3E%3Cds%20dbencoding%3D%22GBK%22%20dbtype%3D%222%22%20drivername%3D%22Provider%3DSQLOLEDB%22%20encodesql%3D%22false%22%20name%3D%22sqlserver1%22%20password%3D%22%22%20url%3D%22Data%20Source%3Dlocalhost%3BInitial%20Catalog%3Debtest%22%20userid%3D%22sa%22/%3E%3C/datasources%3E
在运行报表时控制权限
在运行报表时常常需要控制权限,比如张三能运行A报表,李四则不能运行A报表。
在e表中实现此功能是通过在ebsys/fceformext/js/userfunc.js中的
/**
*控制能不能运行某个报表
**/
functionEbiaoEnterStatus(callback)
函数中写代码来实现的。
如运行报表的URL中是用name=报表名称的方式,则在此函数中就要用
parent.Request.QueryString("name").toString()
来取得当前运行报表的名称,如是用file=报表文件的方式,则在此函数中就要用
parent.Request.QueryString("file").toString()
来取得当前运行报表的文件,它是包含全路径的。
在此函数中先取session变量来取得当前用户信息。
再判断能不能正常运行报表,如最后运行:
callback(true);//执行此命令表示能正常运行报表.
表示可以正常运行此报表,如最后运行:
callback(false);//通知关闭窗口
表示不可以正常运行此报表。
示例代码如下:
GetSession("username",function(arrRet){
varsessionValue=arrRet["username"];
if(sessionValue=="liuxm"&&parent.Request.QueryString("name").toString()=="销售汇总报表"){
alert("你无权运行此报表!
");
callback(false);//通知关闭窗口
return;
}
callback(true);
})
配置运行报表的工具栏
运行报表的工具栏可以通过ebsys/fceform/ereport/js/loadreport.js中的fcpub.toolbar变量的值来配置。
也可加上自定义的功能按钮。
运行报表的工具栏的样式可以通过ebsys/fceform/ereport/js/loadreport.js中的fcpub.toolbarstyle变量的值来配置。
然后通过运行报表的URL后加上&tbcss=red之类的方式来指定工具栏的样式。
共有:
red,yellow,light,Office,blue,green,white,CoolBlue等样式名称。
也可以在ebsys/fceformext/js/userfunc.js中的
/**
*控制能不能运行某个报表
**/
functionEbiaoEnterStatus(callback)
函数中写代码来实现根据不同的操作员的权限来显示不同的运行报表的工具栏按钮。
即实现比如操作员为张三时不能有导出excel的功能。
写的代码的大体是通过取session变量的值来得到操作员的信息。
然后再对fcpub.toolbar全局变量赋值,以控制运行报表的工具栏上出哪些按钮。
在iframe中运行报表
在ebsys/ebsamples/iframerun.htm中做了一个简单运行报表的示例页面,在一个htm文件中加上:
name=samples/s_数据集函数"width=0height=0>
如你不需要看到报表的运行界面则让iframe的widthheight都为0,否则的话可以根据需要给定widthheight值。
然后在页面中加一个按钮:
打印
JS代码是:
functionuf_test(){
//要调用运行报表工具栏的函数,可以用如下方式:
//其中,Print(4)为运行报表工具栏窗口的全局的js函数.
window.frames("iframe1").toolbar.execScript("Print(4)");
}
现在的代码的功能是直接打印报表。
也可以做其它的工作,比如导出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地址栏上直接输入:
http:
//localhost/ebiao/ebsys/fceform/ereport/ebdesign.htm?
name=samples/s_simplelist
来直接在报表设计器中打开此报表来修改,其中s_simplelist为报表文件名,samples/为它的路径。
接口开发
将报表格式文件保存到数据库中
要将报表格式文件保存到数据库中,可以利用e表已写好的程序。
作如下步骤的设置:
1在默认数据源所对应的数据库中,建一个如下的表:
表名:
e_reportfile
字段:
sNamevarchar(100)notnull主键
sTexttextnull
sName保存报表名,sText保存报表格式文件的内容
2在下图界面上:
勾上[从数据库中读写报表格式文件],然后按确定。
这样报表格式文件的打开保存和运行就都是指从数据库的e_reportfile表中了。
自定义数据集
数据集的内容一般来说都是来自于一个SQL语句或存储过程的运行结果,但有时可能需要能自定义,比如来自一个xml数据,来自一个程序的运行结果。
下面以报表格式文件:
s_自定义数据集.htm为例来说明。
打开s_自定义数据集.htm文件,进入数据集的[详细属性]中,可见到如下的界面图:
在此定义了两个参数:
key,xmlfile。
xmlfile标识userds.xml文件的路径,此文件和s_自定义数据集报表文件在同一目录下。
要想运行此表,应修改xmlfile后的路径值,让它正确地找到userds.xml文件。
在e表for.Net版本中的做法是:
然后再看看ebiaoext工程中的DesignReportEvent.cs文件中的如下函数:
///自定义数据集时会回调此函数,由参数来得到数据集的字段名列表和整个数据集的数据
///设置自定义数据集时定义的参数
///字段名列表
///整个数据集的数据
publicstaticvoidUserDefineDataSet(System.Collections.Hashtableprop,outSystem.Collections.ArrayListcolNameList,outSystem.Collections.ArrayListdataList)
在这个函数中输入prop参数,此参数能收到在自定义数据集时定义的参数及参数内容。
如key和xmlfile,(string)prop["key"]=="loadxml",(string)prop["xmlfile"]=="C:
/Inetpub/wwwroot/WebBill/userds.xml";
在e表forJ2EE版本中的做法是:
在.fcsoft.report.ext包下有一个UserDs.java的示例文件中定义如下函数:
///
///自定义数据集时会回调此函数,由参数来得到数据集的字段名列表和整个数据集的数据
///
///设置自定义数据集时定义的参数
///返回字段名列表
///返回整个数据集的数据
publicstaticvoidUserDefineDataSet(Hashtableprop,ArrayListcolNameList,ArrayListdataList)
在这个函数中输入prop参数,此参数能收到在自定义数据集时定义的参数及参数内容。
如key和xmlfile,(String)prop.get("key")=="loadxml",(String)prop.get("xmlfile")=="C:
/Inetpub/wwwroot/WebBill/userds.xml";
在这个函数中输出colNameList(字段名列表)和dataList(整个数据集的数据),这两个都是ArrayList型,但dataList的每个元素的内容是Object[]。
由用户自已在这个函数中添加代码来实现由前台用户定义的参数(如key,xmlfile)来得到数据集的结果(即colNameList,dataList),
在这个示例中是实现读入xmlfile指定的xml文件来得到数据集。
用户在自定义数据集时可以参考这个函数的内容来写。
定期运行报表的实现
e表内部提供了函数来实现成批的运行报表,并将报表结果保存为文件(含html,xls,pdf等三种格式的文件)。
这个函数的输入参数为:
格式:
原文件名生成的文件名(不带.htm)
参数名参数值
...
...
econfig文件的路径
生成的相对路径
yes/no//报表文件是否存在数据库中
htm/xls/xlt/pdf/*//生成文件的类型,为*表示全部类型
输入参数举例为:
/WebBill/ebsys/ebfile/samples/s_simplelist.htms_simplelist
/WebBill/ebsys/ebfile/samples/s_排名.htms_ordername
/WebBill/ebsys/fceform/ereport/econfig.xml
/WebBill/ebsys/ebexpfile/
no
htm
输出参数为:
格式:
报表文件名
总页数
运行的错误信息
生成后的文件名(多页的为加上_1...)
...
输出参数举例为:
/WebBill/ebsys/ebfile/samples/s_simplelist.htm
2
s_simplelist
/WebBill/ebsys/ebfile/samples/s_排名.htm
1
s_ordername
此函数的调用方式为:
在前台的js的代码中调用,其中txtXml.value为输入参数值,运行后的输出参数也返回到txtXml.value中。
SendHttp(location.protocol+"//"+location.host+fcpubdata.servletPath+"/RunReport"+fcpubdata.dotnetVersion+"?
key=genHtmlFile",txtXml.value,
function(result){
varsRet=result.value;
txtXml.value=