版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
经营分析系统第一期定式报表设计说明书V1.0广东省分行科技处
文档信息编写者编写日期审核者审核日期批准人批准日期变更历史日期变更描述批准文档资料分发姓名职位机构目录TOC\o"1-3"一. 概述 概述本文档就经营分析系统定式报表的xml实现方案进行详细的描述,该文档主要描述在OLAPDB数据库端存储XML数据的文件系统结构、XML数据文件的通用格式及批量生成XML数据文件程序sql2xml的设计、使用、配置说明旨在指导设计人员和开发人员进行工程的实施。目的经营分析系统的第一期需求中定式报表的实现方式是:使用中间表(数据库表)存储数据,JSP+JavaBean+JDBC展现数据。尽管可行,但这种方案需要用户在硬件、系统灵活性付出很大的代价,具体的表现在:造成时间、空间等数据库资源的浪费;报表结果数据无法保证完整性;表现层缺乏灵活性。为了解决以上问题,项目组选择了利用xml存储报表数据、用xsl格式化xml数据进行表现在的技术方案。约定为了简便起见,“定式报表需求xml方式实现方式”在下文中简称为“xmlReport”。xmlxslJaxp技术简介XML(eXtensibleMarkupLanguage,可扩展置标语言),是被认为最有发展前途的数据存储方式。XSL(eXtensibleStylesheetLanguage,可扩展样式语言)是为XML文件定义的一种标识语言,用来对xml进行修饰、格式转换,为xml的表现服务。Jaxp用于XML文档处理的使用Java语言编写的编程接口。利用JaxpAPI我们可以十分简单的将xml和xsl解析出html文档。数据下载打印总体设计数据下载打印数据展示数据展示JaxpJaxp解析生成xsl文件xsl文件HTML(报表)经批量转换HTML(报表)经批量转换程序处理Excel文档数据库Excel文档数据库xml数据xml数据系统打包,用户下载系统打包,用户下载Excel模板Excel模板数据展示阶段数据生成阶段数据展示阶段数据生成阶段如上图所示xmlReport的设计分为两个阶段:数据生成阶段、数据展示阶段。数据生成在数据生成阶段的主要工作是由一个xmlRport数据批量生成程序(xmlReportDataMaker)来完成的。该程序根据具体的报表的需求,将符合要求的所有数据,按照一定的xmldtd,从数据库中导出到xml文件中。数据展示数据展示阶段的工作由“数据展示”和“数据下载打印”两部分组成,该阶段的工作是由“公共控制系统”来完成的。数据展示公共控制系统根据用户的查询条件,找到对应的xml文件(如何找到见下文),将它和对应xsl文件一起送入jaxpxml解析引擎,生成html结果,展示给用户。数据下载打印用户在看到报表结果以后,向公共控制系统发出下载请求,公共控制系统先生成目标html,方法同上,然后将事先准备好的excel模板和该html一起压缩,发送给浏览器,完成报表的下载。数据存储策略利用xml存储报表数据,可以不受数据库服务器的容量限制,原理上可以达到“海量存储”。从xml的存储位置上,我们将存储策略分为以下两种:本地存储策略xml数据和xsl脚本存储本地的“文件系统”中,使得数据展示应用(在经营分析系统中是公共控制应用)可以以访问本地数据的方式进行访问,我们称这样的数据存储方式为本地存储策略。远程存储策略如果数据展示应用无法通过“文件系统”访问到xml数据和xsl数据那么我这称这样的数据存储方式为远程存储策略。按照数据展示应用获取目标数据的方式不同,可以分为:http数据展示应用通过http协议,作为客户端向该“web服务器”发送索取数据的请求,由“web服务器”将数据传递给数据展示应用。ftp数据展示应用通过ftp协议,作为客户端向该“ftp服务器”发送索取数据的请求,由“ftp服务器”把数据传递给数据展示应用。其它其它如TCP/IP、webService、用户自定义协议等都可以作为数据展示应用获取xml数据和xsl数据的方式,数据展示应用为提供了一套数据获取机制的接口,具有很好的扩展性,关于数据获取机制的接口将在下文中讲到。xml数据格式决定报表的因素决定一份定式报表的因素包括:名称代码备注报表编号ReportCode报表描述ReportDescript机构代码BankCode机构名称BankName数据日期DataDate报表日期类型ReportTimeType报表的时间类型范围1 年报2 半年报3 季报4 月报5 旬报6 日报货币代码CurrencyCode货币名称CurrencyName期次代码PeriodNo只针对国债类需求期次名称PeriodName卡类型代码CardType卡类型名称CardName报表数据的文档描述(DTD)经过以上的分析,定式报表的xml格式定义如下:01<?xmlversion="1.0"encoding="GB2312"?>02<!ELEMENTReport(CommonArea,ReportData)>03<!ATTLISTReport04 ReportCodeCDATA#REQUIRED05 ReportDescriptCDATA#REQUIRED06 BankCodeCDATA#REQUIRED07 BankNameCDATA#REQUIRED08 DataDateCDATA#REQUIRED09>10<!ELEMENTCommonArea(SequenceList,DataRowKeyID,ColumnDataType)>11<!ELEMENTSequenceList(#PCDATA)>12<!ELEMENTDataRowKeyID(#PCDATA)>13<!ELEMENTColumnDataType(DataType+)>14<!ELEMENTDataTypeEMPTY>15<!ATTLISTDataType16 IDCDATA#IMPLIED17 NameCDATA#REQUIRED18 Type(Integer|Money|String)"String"19DescCDATA#IMPLIED20>21<!ELEMENTReportData(DataRow+)>22<!ATTLISTReportData23 ReportTimeTypeCDATA#IMPLIED24 CurrencyCodeCDATA#IMPLIED25 CurrencyNameCDATA#IMPLIED26 CardTypeCDATA#IMPLIED27 CardNameCDATA#IMPLIED28 PeriodNoCDATA#IMPLIED29 PeriodNameCDATA#IMPLIED30>31<!ELEMENTDataRow(DataColumn+)>32<!ATTLISTDataRow33 IDCDATA#IMPLIED34>35<!ELEMENTDataColumn(#PCDATA)>36<!ATTLISTDataColumn37 IDCDATA#IMPLIED38>结点说明Report根结点report,代表xml报表数据。属性报表编号 ReportCode报表描述 ReportDescript机构代码 BankCode机构名称 BankName数据日期 DataDate子结点CommonArea定义定式报表的查询条件搜索顺序、数据列的key、每一个数据列的类型信息。ReportData具体的报表数据CommonArea定义定式报表的查询条件搜索顺序、数据列的key、每一个数据列的类型信息。属性子结点SequenceList 查询条件搜索条件,如果有多个查询条件,那么以逗号作为分隔符;不分先后顺序。DataRowKeyID数据列的key,如果有多个键,那么以逗号作为分隔符;不分先后顺序。ColumnDataType定义每一数据列的数据类型信息。SequenceList定义查询报表数据的搜索条件。具体的原因,在后面数据生成部分给出。DataRowKeyID定义报表数据中数据列的关键字段。ColumnDataType定义每一数据列的数据类型信息。属性子结点DataType 数据类型。DataType定义每一数据列的数据类型信息。属性ID字段的顺序号Name字段的名称Type字段的类型Desc字段的描述子结点ReportData定义报表数据。属性ReportTimeType报表日期类型CurrencyCode币种代码CurrencyName币种名称CardType卡类型CardName卡名称PeriodNo报表期次PeriodName报表名称子结点DataRow数据行DataRow报表数据的数据行。属性ID数据行的编号。子结点DataColumn数据列。DataColumn报表数据的数据列,该结点使用#PCDATA类型存储字段数据。属性ID数据列的编号。子结点报表xml数据生成文件粒度因为需要生成所有符合要求的报表数据,在5.1节决定报表的因素中定义了所有了决定一个报表的可能的条件。在5.2.1节结点说明中将要素报表编号(ReportCode),报表描述(ReportDescript),机构代码(BankCode),机构名称(BankName),数据日期(DataDate)归属给根结点Report,因此在数据文件的文件粒度上,定义以下条件决定一个报表数据文件的粒度:日期、需求编号(报表编号)、机构。XML数据文件分析了前一阶段的定式报表,报表数据主要有以下几个层次:数据日期、机构、需求编号、报表日期类型(如日月年报)、货币、期次(国债)、卡类型等情况,我们主要将其分成文件层次、数据层次,将数据日期、机构信息、需求编号体现在文件层次,报表日期类型、货币、期次(国债)、卡类型体现在数据层次。存储XML数据的文件系统结构XML数据是以报表日期、机构、需求编号为单位的,为体现层次结构,报表的的目录如下:/$Report/YYYYMMDD/BBBBBB其中:$Report存放XML数据的总目录名称YYYYMMDD为数据的时间,BBBBBB为机构编码XML数据文件的命名如下:YYYYMMDD_BBBBBB_RRRRRR.xml其中:YYYYMMDD为报表时间,如:20031231BBBBBB为机构编码,如:449999RRRRRR–报表的需求编号,如:A9029(业务状况表)举例如下:2003年12月31日生成的449999机构业务状况表/Report/20031231/449999/20031231_449999_A9029.xml该XML文件包括449999机构20031231的所有货币的(包括折人民币A00,外币折美元B00等)日总帐、月总帐、年总帐数据。XML数据文件格式在XML数据文件中不但要记录数据层次的信息,还要记录文件层次的信息,所以XML数据文件的格式定义有以下三个层次,文件层次(<Report>):将报表编号,报表描述,机构,机构名称,数据日期固定的属性放在<Report>的属性中。另外有些报表有特有的属性,我们在<Report>下定义<CommonArea>来描述各报表需求特殊的属性,目前我们定义的值有以下几种:<SequenceList>数据层次的顺序(可选)<DataRowKeyID>关键字段索引(可选)<ColumnDataType>字段类型(必须)举例如下:<?xmlversion="1.0"encoding="GB2312"?><ReportReportCode="A9029"ReportDescript="业务状况表"BankCode="44A001"BankName="广东省分行"DataDate="2003-12-31"><CommonArea>
<SequenceList>ReportTimeType,CurrencyCode</SequenceList>
<DataRowKeyID>1</DataRowKeyID><ColumnDataType>
<DataTypeID="1"Type="String"Name="科目编号"/>
<DataTypeID="2"Type="String"Name="名称"/>
<DataTypeID="3"Type="Number"Name="上期借方余额"/>
<DataTypeID="4"Type="Number"Name="上期贷方发生数"/>
<DataTypeID="5"Type="Number"Name="本期借方发生数"/>
<DataTypeID="6"Type="Number"Name="本期贷方发生数"/>
<DataTypeID="7"Type="Number"Name="本期借方余额"/>
<DataTypeID="8"Type="Number"Name="本期贷方余额"/>
</ColumnDataType>
</CommonArea>……</Report>(2)数据层次(<ReportData>):在同一个XML文件会存在需要分类的情况,比如分日月年报,分货币,分期次等,这我们通过数据层次来体现,可以进行嵌套,目前<ReportData>的属性有如下定义:<CurrencyCode>货币代码(可选)<CurrencyName> 货币名称(可选)<CurrencyUnitName> 货币单位(可选)<PeriodNo> 期次 (可选)<PeriodName>期次描述(可选)<ReportTimeType>报表时间类型代码(必选)<ReportTimeDesc>报表时间类型名称(必选)<CardType>卡类型代码(可选)<CardTypeDesc>卡类型描述(可选)举例如下:<ReportDataReportTimeType="4"ReportTimeDesc="月报"CurrencyCode="01"CurrencyName="人民币"CurrencyUnitName="元">。。。。。。</ReportData>(3)记录层次(<DataRow>):以$分割字段,每条记录一行。<!--DataRowbegin-->666$8,813,131,835,756.77$8,811,729,965,114.22$301,936,402.32$0.00$743$3,368,486,858.34$2,997,198,894.97$12,248,645,572.80$0.00$760$48,486,820,905.99$48,056,788,328.36$0.00$3,658,259,582.70$8236$2,378,168,801,237.94$2,399,323,923,442.20$579,775,657,758.06$0.00$842$360,223,098,787.23$362,379,423,344.77$7,817,517,783.48$0.00$<!--DataRowend-->Sql2xml程序设计说明Sql2xml的功能是根据报表配置文件,执行相应的sql语句,把结果输出到xml数据文件。程序的目录说明./srcSql2xml及相关的源程序目录./bin可执行文件目录./etc/sql2xml.conf全局配置文件./etc/tasks具体每个需求的XML配置文件./log日志文件目录./reportXML数据文件目录,可在全局配置文件指定sql2xml的程序流程程序的基本流程如下:读全局配置文件(etc/sql2xml.conf)信息,包括:数据库连接参数、存放XML数据的总目录名称、系统调试参数、报表时间类型编码表、卡类型编码表、期次编码表连接数据库,从Dim_CCY形成货币编码表。读报表配置文件(每张报表一个配置文件,如tasks/A9030.conf)信息,包括:报表编号、sql语句、列数、各列大小、各列类型(S:StringN:Number)、层次、Xml头模版执行sql语句,生成xml数据文件A.根据报表编号,取该报表的输出机构级别(SelectBank_Rel_LevelFromRpt_Bank_LevelWhereRequirement_Id='reportcode')B取该报表的机构列表(代码、名称)(SELECTdim.bank_id,CAST(dim.bank_nameASCHAR(60))frombank_rel_levellevel,dim_bankdimwherelevel.bank_id=dim.bank_idandlevel.bank_rel_level<='reportlevel'orderbylevel.bank_rel_level,dim.bank_id)C根据配置中的机构处理方式、币种处理方式和报表类型处理方式等,选择相应的方式(是否采用外部循环,形成多条sql语句),生成Xml报表: 替换sql语句中的参数替换Xml头模版中的参数创建目录及文件输出Xml头部分执行sql语句,输出数据部分Sql2xml程序使用说明命令格式sql2xml task.conf datadatecomm.conf 其中task.conf为报表配置文件,必须带路径,如../etc/tasks/A9029.confdatadate为数据日期,格式为’yyyymmdd’,如20031231comm.conf为全局配置文件,该参数可选,如没有,则取默认值sql2xml.conf。该参数不要带路径,程序假定路径为环境变量OLAP_XML_COMM_PATH的值。提供此可选参数是为了方便连接不同的数据库,尤其是在测试时。 由于程序用到环境变量OLAP_XML_COMM_PATH,因此,运行之前必须给环境变量OLAP_XML_COMM_PATH赋值,如运行脚本.Olap_etl_env。如:sql2xml../etc/tasks/A9029.conf 20031231则取默认的全局配置文件$OLAP_XML_COMM_PATH/sql2xml.confsql2xml../etc/tasks/A9029.conf 20031231test.conf则取指定的全局配置文件$OLAP_XML_COMM_PATH/test.conf配置文件说明配置文件包括一全局配置文件(etc/sql2xml.conf)和报表配置文件(在etc/tasks子目录下)。全局配置文件sql2xml.conf全局配置文件包括以下信息:数据库连接参数存放XML数据的总目录名称系统调试参数报表时间类型编码表卡类型编码表期次编码表以下是一样例(见文件sql2xml.conf):[dbinfo]#登录数据库的登录信息connectstring=NCR4900/sysolap001,sysolap001[report]#存放XML数据的总目录名称reportpath=/home/jobsch/sql2xml/bin/report#调试相关[debug]#是否在屏上显示计算过程信息0:不显示1:显示showscrinfo=1#是否在过程日志中记录计算过程信息0:不记录1:记录recordprocess=1[ReportTimeType]#报表时间类型Count=6ReportTimeTypes=1,2,3,4,5,6ReportTimeDescs=年报,半年报,季报,月报,旬报,日报[CardType]#卡类型Count=9CardTypes=01,02,03,04,05,06,07,08,09CardTypeDescs=地方性转帐卡,IC卡,专用卡,万事顺卡,金穗通宝借记,威士金卡,威士普通卡,万事达金卡,万事达普通卡[PeriodNo]#期次Count=7PeriodNos=1,2,3,4,5,6,7PeriodNames=第一期,第二期,第三期,第四期,第五期,第六期,第七期报表配置文件报表配置文件包括以下信息:报表编号sql语句列数各列大小各列类型S:StringN:NumberL:左边空格以0xA1替换的字符串层次Xml头模版以下是一样例(见文件A9029.conf):##业务状况表#机构:到网点#报表类型:日、旬、月、季、半年、年#币种:人民币、各外币原币、折人民币总计、外币折美元总计#报表编号ReportCode=A9029#sql语句Sql=selecta.Bank_Id,a.Rep_Type,a.Ccy_Code,b.Acct_Categ_Code_View,CAST(b.Acct_Categ_DescASCHAR(50)),CAST(ZEROIFNULL(a.Bop_Dr_Bal)ASCHAR(21)),CAST(ZEROIFNULL(a.Bop_Cr_Bal)ASCHAR(21)),CAST(ZEROIFNULL(a.Dr_Amt)ASCHAR(21)),CAST(ZEROIFNULL(a.Cr_Amt)ASCHAR(21)),CAST(ZEROIFNULL(a.Eop_Dr_Bal)ASCHAR(21)),CAST(ZEROIFNULL(a.Eop_Cr_Bal)ASCHAR(21)),b.Acct_Categ_Code_ViewfromFR_A9029_BUSINESS_INFOa,REF_A9029bwherea.Acct_Categ_Code=b.Acct_Categ_Codeanda.Dte_Id=CAST('$DATADATE$'ASDATEFORMAT'YYYYMMDD')anda.Bank_Idin(SELECTbank_idFROMbank_rel_levelWherebank_rel_level<='6')orderbya.Bank_id,a.Rep_Type,a.Ccy_Code,b.Seq_No#列数Cols=12#各列大小Sizes=13,1,3,5,50,21,21,21,21,21,21,5#各列类型S:StringN:NumberTypes=S,S,S,S,L,N,N,N,N,N,N,S#层次SequenceList=ReportTimeType,CurrencyCode#机构处理方式0:在sql中BANKTYPE=0#Xml头模版*XML<?xmlversion="1.0"encoding="GB2312"?><ReportReportCode="$ReportCode$"ReportDescript="业务状况表"BankCode="$BANKCODE$"BankName="$BANKNAME$"DataDate="$DATADATE$"><CommonArea><SequenceList>$SequenceList$</SequenceList><DataRowKeyID>1</DataRowKeyID><ColumnDataType><DataTypeID="1"Type="String"Name="科目号"/><DataTypeID="2"Type="String"Name="科目名称"/><DataTypeID="3"Type="Number"Name="期初借方余额"/><DataTypeID="4"Type="Number"Name="期初贷方余额"/><DataTypeID="5"Type="Number"Name="借方发生额"/><DataTypeID="6"Type="Number"Name="贷方发生额"/><DataTypeID="7"Type="Number"Name="期末借方余额"/><DataTypeID="8"Type="Number"Name="期末贷方余额"/><DataTypeID="9"Type="String"Name="科目号"/></ColumnDataType></CommonArea>说明:前面是提供如ReportCode,Sql等一些值,#后是注释。注意一个值只能占一行,如sql语句很长,不能用回车分开多行。后面是Xml头模版,以*XML标示开始,XML头模版允许以回车分成多行。SequenceList=ReportTimeType,CurrencyCode表示输出的纪录中前两列作为层次分组,注意sql语句必须对属于层次的列使用orderby。如果没有层次,也要写成SequenceList=目前程序只能处理定长的列,对于金额类型,使用CAST转换为字符类型,如:CAST(SUM(ZEROIFNULL(Cr_Amt))ASCHAR(21));对于VARCHAR类型,使用CAST转换为定长字符类型,如:CAST(Sec_Branch_DescASCHAR(60))。对数据类型为N的列程序使用千分位格式化。对数据类型为L的列,程序对左边空格以0xA1替换,以保留左边空格,这对于损益表、资产负债表等表是需要的。程序提供了以下参数:$DATADATE$:数据日期$BANKCODE$:机构代码$CCYCODE$:货币代码$TIMETYPE$:报表类型$BANKNAME$:机构名称$REPORTCODE$:报表编号$SEQUENCELIST$:数据层次Sql语句中可使用$DATADATE$,$BANKCODE$、$CCYCODE$、$TIMETYPE$引用数据日期、机构代码、货币代码、报表类型等参数值。Xml头模版中可使用$DATADATE$,$BANKCODE$,$ReportCode$,$BANKNAME$,$SequenceList$引用参数或定义的值。报表的机构级别 对每张报表,必须在表RPT_BANK_LEVEL中增加一条记录,指定该报表输出到机构的级别。报表类型由于数据层次中的报表时间类型是必选,所以对于中间表中没有报表时间类型的报表,如只有月报,必须在sql中加上如:CAST('4'ASCHAR(1))ReportTimeType,同时SequenceList=ReportTimeType 至于如货币,期次等是可选,则无须象报表时间类型这样处理。Sql语句的两种处理方式#机构处理方式0:在sql中1:在sql外循环BANKTYPE=1#币种处理方式0:在sql中1:在sql外循环CCYTYPE=1ccysql=selectdistinctccy_codefromFR_A9030_PROFIT_LOSSwhereBank_Id='$BANKCODE$'orderbyccy_code#报表类型处理方式0:在sql中1:在sql外循环TIMETYPE=0如果在配置文件中没有制定,则默认是0。 对于机构、币种、报表类型等,程序提供了两种处理方式,一种是单一sql语句方式,机构、币种、报表类型等字段出现在select中,如A9029:Sql=selecta.Bank_Id,a.Rep_Type,a.Ccy_Code,b.Acct_Categ_Code_View,CAST(b.Acct_Categ_DescASCHAR(50)),CAST(ZEROIFNULL(a.Bop_Dr_Bal)ASCHAR(21)),CAST(ZEROIFNULL(a.Bop_Cr_Bal)ASCHAR(21)),CAST(ZEROIFNULL(a.Dr_Amt)ASCHAR(21)),CAST(ZEROIFNULL(a.Cr_Amt)ASCHAR(21)),CAST(ZEROIFNULL(a.Eop_Dr_Bal)ASCHAR(21)),CAST(ZEROIFNULL(a.Eop_Cr_Bal)ASCHAR(21)),b.Acct_Categ_Code_ViewfromFR_A9029_BUSINESS_INFOa,REF_A9029bwherea.Acct_Categ_Code=b.Acct_Categ_Codeanda.Dte_Id=date'$DATADATE$'anda.Bank_Idin(SELECTbank_idFROMbank_rel_levelWherebank_rel_level<='6')orderbya.Bank_id,a.Rep_Type,a.Ccy_Code,b.Seq_No;#机构处理方式0:在sql中BANKTYPE=0 这种方式下,对于机构,必须放在第一列,同时,必须人工利用RPT_BANK_LEVEL限定机构级别,如:a.Bank_Idin(SELECTbank_idFROMbank_rel_levelWherebank_rel_level<='6'),注意:加上orderbybank_id. 这种处理方式只需要向数据库提交一次请求,速度较快,对于大数据量,机构较多(如到网点)的报表,能大大减少执行时间。推荐使用这种处理方式。 但对于一些报表,如损益表、资产负债表的固定栏目的报表,目前不能采用这种单一sql语句的方式,程序提供了另一种处理方式:外部循环。 在外部循环方式下,机构、币种、报表类型等以参数方式出现在where语句中,以$BANKCODE$、$CCYCODE$、$TIMETYPE$引用,程序遍历各代码表,形成多条sql语句,逐一执行。这种处理方式需要向数据库提交多次请求(可能有上万),速度较慢,建议仅必要时才使用。ReportCode=A9031#sql语句Sql=selectCAST('$TIMETYPE$'ASCHAR(1))ReportTimeType,CAST('$CCYCODE$'ASCHAR(3)),CAST(b.Item_NameASCHAR(50)),b.Seq_No,CAST(ZEROIFNULL(a.Bop_Bal)ASCHAR(21)),CAST(ZEROIFNULL(a.Eop_Bal)ASCHAR(21))from(select*fromREF_A9031whereIs_Abc='1')bleftouterjoin(select*fromFR_A9031_ABC_BALANCE_SHEETwhereCcy_Code='$CCYCODE$'andBank_Id='$BANKCODE$'ANDDte_Id=date'$DATADATE$'andRep_Type='$TIMETYPE$')aona.Is_Abc=b.Is_Abcanda.Seq_No=b.Seq_Noorderbyb.Is_Abc,b.Seq_No#列数Cols=6#各列大小Sizes=1,3,50,8,21,21#各列类型S:StringN:NumberTypes=S,S,L,S,N,N#层次SequenceList=ReportTimeType,CurrencyCode#机构处理方式0:在sql中1:在sql外循环BANKTYPE=1#币种处理方式0:在sql中1:在sql外循环CCYTYPE=1ccysql=selectdistinctccy_codefromFR_A9031_ABC_BALANCE_SHEETwherebank_id='$BANKCODE$'andIs_Abc='0'orderbyccy_code#报表类型处理方式0:在sql中1:在sql外循环TIMETYPE=1在上面A9031的例子中,为了减少循环,加快速度,对于币种,指定了循环用的代码表的sql语句ccysql,并且在ccysql语句中限定了条件,bank_id='$BANKCODE$'andIs_Abc='0',尽可能减少循环,如不限定机构,则可能对许多机构,尽管该机构没有某些币种的数据,由于采用外连接方式,也会生成许多数据全为零的报表。对于报表类型,程序自动根据日期确定类型列表,如2003-12-31,则为1,2,3,4(年报,半年报,季报,月报);2004-03-31,则为3,4(季报,月报);2004-04-30,则为4(月报)。 Xml头模版中,需要填写的节点包括:ReportDescriptDataRowKeyIDColumnDataType中的DataType(ID,Type,Name)其他节点不要修改。数据展示xml报表的展示,需要公共控制系统后台按照用户的查询条件找到对应的xml数据和xsl文件,然后经过jaxp对xls和xml进行解析、过滤生成html,再回应给前端用户。xsl脚本xsl脚本的作用是,将报表数据从xml中提取出来,并按照定式报表表样的要求生成html。获取xmlxsl文件公共控制系统目前支持二种数据获取方案:ftp、本地文件。类图如下:
IFileSpider接口定义了获取xml和xsl句柄及临时清理的方法:publicinterfaceIFileSpider{//根据日期机构号需求编号得到一个XML数据文件的拷贝并且此文件打开publicFile[]getOneXmlCopyAndOpen(Stringdate,StringbankId,StringreqNo,VectorvParameter)throwsException;//根据日期机构号需求编号得到一个XLS数据样式文件的拷贝并且此文件打开publicFile[]getOneXslCopyAndOpen(Stringdate,StringbankId,StringreqNo)throwsException;//根据需要清理临时文件publicvoidclear(File[]fileCopy)throwsException;}FtpFileSpiderIFileSpider的FTP存储方式实现。LocalFileSpiderIFileSpider的本地存储方式实现。HttpFileSpiderIFileSpider的http存储方式实现。注:该类是扩展实现,在本项目中没有使用到。SpiderFactory该类根据需求编号,并结合perties配置文件中的配置生成具体的IFileSpider。交易配置在perties文件中我们对xml定式报表进行配置。################################################################################定式报表部分xml实现方式################################################################################默认配置ReportXcessage.defult=reportx/reportx.jspReportXml.classname.defult=abas.abas.reportx.XmlReport#本机存储方式ReportXml.xmlFilePosition.defult_1=localhost:d:/eclipse/workspace/abas/xmlreport/ReportXml.xslFilePosition.defult_1=localhost:d:/eclipse/workspace/abas/xmlreportxsl/#ftp存储方式ReportXml.xmlFilePosition.defult_2=ftp://jobsch:jobsch@1/jobsch/xml/ReportXml.xslFilePosition.defult_2=ftp://jobsch:jobsch@1/jobsch/xsl/#储蓄存款变动情况分析ReportXmlB1023.processpage=<default>ReportXmlB1023.classname=<default>ReportXmlB1023.xmlFilePosition=<default_1>ReportXmlB1023.xslFilePosition=<default_1>如上所示:我们规定ReportXml前缀是xml定式报表的标识。描述一个xml定式报表的信息需要以下四个关键信息:处理页面;处理请求的具体JavaBean;xml报表数据的存储策略和存储路径;该交易的xsl数据的存储策略和存储路径。默认配置#默认配置ReportXcessage.defult=reportx/reportx.jspReportXml.classname.defult=abas.abas.reportx.XmlReport#本机存储方式ReportXml.xmlFilePosition.defult_1=localhost:d:/eclipse/workspace/abas/xmlreport/ReportXml.xslFilePosition.defult_1=localhost:d:/eclipse/workspace/abas/xmlreportxsl/#ftp存储方式ReportXml.xmlFilePosition.defult_2=ftp://jobsch:jobsch@1/jobsch/xml/ReportXml.xslFilePosition.defult_2=ftp://jobsch:jobsch@1/jobsch/xsl/ 约定每个关键要素的默认配置以.defaut%结尾。 xmlFilePosition和xslFilePosition在存储策略定义上使用的方式如下:本地:localhost://具体的路径ftp:ftp://用户名:密码@具体的路径具体交易配置#储蓄存款变动情况分析ReportXmlB1023.processpage=<default>ReportXmlB1023.classname=<default>ReportXmlB1023.xmlFilePosition=<default_1>ReportXmlB1023.xslFilePosition=<default_1>具体交易可以使用默认配置,也可以自定义,如我们定义:ReportXmlB1023.xslFilePosition=ftp://jobsch:jobsch@1/jobsch/xsl/生成html在得到xml和xsl以后,利用类abas.util.file.xlm输出html到指定的介质,该类的接口定义如下:publicclassxml{publicstaticvoidtransform(StringsXmlFile,StringsXslFile,OutputStreamout)throwsException;publicstaticvoidtransform(StringsXmlFile,StringsXslFile,PrintWriterout)throwsException;privatestaticvoidtransform(StringsXmlFile,StringsXslFile,ResultoutResult)throwsException;publicstaticvoidtransform(StringsXmlFile,StringsXslFile,StringoutFileName)throwsException;}数据下载Excelxml定式报表利用Excel实现报表的打印。用户首先需要通过公共控制系统提供的相关功能实现报表的下载,在下载的数据包中,包括一个Excel文件和一个Excel同名的目录,在这个目录下就是用户的目标报表(html格式)。 目录结构如下: 模板.xls 模板.files filelist.xml Demo报表.htm 用户选择的目标报表的生成过程同数据展示部分的处理流和是相同的。Excel模板<htmlxmlns:o="urn:schemas-microsoft-com:o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度防腐工程智能控制系统合同
- 二零二四年度商务用车服务协议3篇
- 二零二四年文化艺术交流活动合同
- 二零二四年度机械设备租赁合同标的及设备详细描述
- 2024年度餐饮连锁经营与管理服务合同2篇
- 2024年度信息技术系统升级与维护合同
- 二零二四年度市场推广合同标的广告投放与效果评估3篇
- 二零二四年度餐饮技术创新服务协议
- 五猖会鲁迅的看法
- 2024窗帘定制尺寸设计与制作合同
- 钢框架结构优秀毕业设计计算书
- 人身保护令申请书范文精选5篇
- 第四讲马克思主义的唯物辩证法课件
- 尿崩症护理查房
- 二年级语文上册 第八单元 集体备课+教材分析
- 2022秋国开农村社会学形考任务3试题及答案
- 《劳动关系协调员》教学计划及教学大纲
- 中国历史文化名城-南京课件
- 城市桥梁安全性评估规程DB50-T 273-2021
- 尾矿库在线自动监测系统解决预案
- 文华财经期货软件指标公式源码至尊波段王指标公式源码
评论
0/150
提交评论