版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
經(jīng)營分析系統(tǒng)第一期定式報表設(shè)計說明書V1.0廣東省分行科技處
文檔信息編寫者編寫日期審核者審核日期批準(zhǔn)人批準(zhǔn)日期變更歷史日期變更描述批準(zhǔn)文檔資料分發(fā)姓名職位機(jī)構(gòu)目錄TOC\o"1-3"一. 概述 概述本文檔就經(jīng)營分析系統(tǒng)定式報表的xml實現(xiàn)方案進(jìn)行詳細(xì)的描述,該文檔主要描述在OLAPDB數(shù)據(jù)庫端存儲XML數(shù)據(jù)的文件系統(tǒng)結(jié)構(gòu)、XML數(shù)據(jù)文件的通用格式及批量生成XML數(shù)據(jù)文件程序sql2xml的設(shè)計、使用、配置說明旨在指導(dǎo)設(shè)計人員和開發(fā)人員進(jìn)行工程的實施。目的經(jīng)營分析系統(tǒng)的第一期需求中定式報表的實現(xiàn)方式是:使用中間表(數(shù)據(jù)庫表)存儲數(shù)據(jù),JSP+JavaBean+JDBC展現(xiàn)數(shù)據(jù)。盡管可行,但這種方案需要用戶在硬件、系統(tǒng)靈活性付出很大的代價,具體的表現(xiàn)在:造成時間、空間等數(shù)據(jù)庫資源的浪費;報表結(jié)果數(shù)據(jù)無法保證完整性;表現(xiàn)層缺乏靈活性。為了解決以上問題,項目組選擇了利用xml存儲報表數(shù)據(jù)、用xsl格式化xml數(shù)據(jù)進(jìn)行表現(xiàn)在的技術(shù)方案。約定為了簡便起見,“定式報表需求xml方式實現(xiàn)方式”在下文中簡稱為“xmlReport”。xmlxslJaxp技術(shù)簡介XML(eXtensibleMarkupLanguage,可擴(kuò)展置標(biāo)語言),是被認(rèn)為最有發(fā)展前途的數(shù)據(jù)存儲方式。XSL(eXtensibleStylesheetLanguage,可擴(kuò)展樣式語言)是為XML文件定義的一種標(biāo)識語言,用來對xml進(jìn)行修飾、格式轉(zhuǎn)換,為xml的表現(xiàn)服務(wù)。Jaxp用于XML文檔處理的使用Java語言編寫的編程接口。利用JaxpAPI我們可以十分簡單的將xml和xsl解析出html文檔。數(shù)據(jù)下載打印總體設(shè)計數(shù)據(jù)下載打印數(shù)據(jù)展示數(shù)據(jù)展示JaxpJaxp解析生成xsl文件xsl文件HTML(報表)經(jīng)批量轉(zhuǎn)換HTML(報表)經(jīng)批量轉(zhuǎn)換程序處理Excel文檔數(shù)據(jù)庫Excel文檔數(shù)據(jù)庫xml數(shù)據(jù)xml數(shù)據(jù)系統(tǒng)打包,用戶下載系統(tǒng)打包,用戶下載Excel模板Excel模板數(shù)據(jù)展示階段數(shù)據(jù)生成階段數(shù)據(jù)展示階段數(shù)據(jù)生成階段如上圖所示xmlReport的設(shè)計分為兩個階段:數(shù)據(jù)生成階段、數(shù)據(jù)展示階段。數(shù)據(jù)生成在數(shù)據(jù)生成階段的主要工作是由一個xmlRport數(shù)據(jù)批量生成程序(xmlReportDataMaker)來完成的。該程序根據(jù)具體的報表的需求,將符合要求的所有數(shù)據(jù),按照一定的xmldtd,從數(shù)據(jù)庫中導(dǎo)出到xml文件中。數(shù)據(jù)展示數(shù)據(jù)展示階段的工作由“數(shù)據(jù)展示”和“數(shù)據(jù)下載打印”兩部分組成,該階段的工作是由“公共控制系統(tǒng)”來完成的。數(shù)據(jù)展示公共控制系統(tǒng)根據(jù)用戶的查詢條件,找到對應(yīng)的xml文件(如何找到見下文),將它和對應(yīng)xsl文件一起送入jaxpxml解析引擎,生成html結(jié)果,展示給用戶。數(shù)據(jù)下載打印用戶在看到報表結(jié)果以后,向公共控制系統(tǒng)發(fā)出下載請求,公共控制系統(tǒng)先生成目標(biāo)html,方法同上,然后將事先準(zhǔn)備好的excel模板和該html一起壓縮,發(fā)送給瀏覽器,完成報表的下載。數(shù)據(jù)存儲策略利用xml存儲報表數(shù)據(jù),可以不受數(shù)據(jù)庫服務(wù)器的容量限制,原理上可以達(dá)到“海量存儲”。從xml的存儲位置上,我們將存儲策略分為以下兩種:本地存儲策略xml數(shù)據(jù)和xsl腳本存儲本地的“文件系統(tǒng)”中,使得數(shù)據(jù)展示應(yīng)用(在經(jīng)營分析系統(tǒng)中是公共控制應(yīng)用)可以以訪問本地數(shù)據(jù)的方式進(jìn)行訪問,我們稱這樣的數(shù)據(jù)存儲方式為本地存儲策略。遠(yuǎn)程存儲策略如果數(shù)據(jù)展示應(yīng)用無法通過“文件系統(tǒng)”訪問到xml數(shù)據(jù)和xsl數(shù)據(jù)那么我這稱這樣的數(shù)據(jù)存儲方式為遠(yuǎn)程存儲策略。按照數(shù)據(jù)展示應(yīng)用獲取目標(biāo)數(shù)據(jù)的方式不同,可以分為:http數(shù)據(jù)展示應(yīng)用通過http協(xié)議,作為客戶端向該“web服務(wù)器”發(fā)送索取數(shù)據(jù)的請求,由“web服務(wù)器”將數(shù)據(jù)傳遞給數(shù)據(jù)展示應(yīng)用。ftp數(shù)據(jù)展示應(yīng)用通過ftp協(xié)議,作為客戶端向該“ftp服務(wù)器”發(fā)送索取數(shù)據(jù)的請求,由“ftp服務(wù)器”把數(shù)據(jù)傳遞給數(shù)據(jù)展示應(yīng)用。其它其它如TCP/IP、webService、用戶自定義協(xié)議等都可以作為數(shù)據(jù)展示應(yīng)用獲取xml數(shù)據(jù)和xsl數(shù)據(jù)的方式,數(shù)據(jù)展示應(yīng)用為提供了一套數(shù)據(jù)獲取機(jī)制的接口,具有很好的擴(kuò)展性,關(guān)于數(shù)據(jù)獲取機(jī)制的接口將在下文中講到。xml數(shù)據(jù)格式?jīng)Q定報表的因素決定一份定式報表的因素包括:名稱代碼備注報表編號ReportCode報表描述ReportDescript機(jī)構(gòu)代碼BankCode機(jī)構(gòu)名稱BankName數(shù)據(jù)日期DataDate報表日期類型ReportTimeType報表的時間類型范圍1 年報2 半年報3 季報4 月報5 旬報6 日報貨幣代碼CurrencyCode貨幣名稱CurrencyName期次代碼PeriodNo只針對國債類需求期次名稱PeriodName卡類型代碼CardType卡類型名稱CardName報表數(shù)據(jù)的文檔描述(DTD)經(jīng)過以上的分析,定式報表的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>結(jié)點說明Report根結(jié)點report,代表xml報表數(shù)據(jù)。屬性報表編號 ReportCode報表描述 ReportDescript機(jī)構(gòu)代碼 BankCode機(jī)構(gòu)名稱 BankName數(shù)據(jù)日期 DataDate子結(jié)點CommonArea定義定式報表的查詢條件搜索順序、數(shù)據(jù)列的key、每一個數(shù)據(jù)列的類型信息。ReportData具體的報表數(shù)據(jù)CommonArea定義定式報表的查詢條件搜索順序、數(shù)據(jù)列的key、每一個數(shù)據(jù)列的類型信息。屬性子結(jié)點SequenceList 查詢條件搜索條件,如果有多個查詢條件,那么以逗號作為分隔符;不分先后順序。DataRowKeyID數(shù)據(jù)列的key,如果有多個鍵,那么以逗號作為分隔符;不分先后順序。ColumnDataType定義每一數(shù)據(jù)列的數(shù)據(jù)類型信息。SequenceList定義查詢報表數(shù)據(jù)的搜索條件。具體的原因,在后面數(shù)據(jù)生成部分給出。DataRowKeyID定義報表數(shù)據(jù)中數(shù)據(jù)列的關(guān)鍵字段。ColumnDataType定義每一數(shù)據(jù)列的數(shù)據(jù)類型信息。屬性子結(jié)點DataType 數(shù)據(jù)類型。DataType定義每一數(shù)據(jù)列的數(shù)據(jù)類型信息。屬性ID字段的順序號Name字段的名稱Type字段的類型Desc字段的描述子結(jié)點ReportData定義報表數(shù)據(jù)。屬性ReportTimeType報表日期類型CurrencyCode幣種代碼CurrencyName幣種名稱CardType卡類型CardName卡名稱PeriodNo報表期次PeriodName報表名稱子結(jié)點DataRow數(shù)據(jù)行DataRow報表數(shù)據(jù)的數(shù)據(jù)行。屬性ID數(shù)據(jù)行的編號。子結(jié)點DataColumn數(shù)據(jù)列。DataColumn報表數(shù)據(jù)的數(shù)據(jù)列,該結(jié)點使用#PCDATA類型存儲字段數(shù)據(jù)。屬性ID數(shù)據(jù)列的編號。子結(jié)點報表xml數(shù)據(jù)生成文件粒度因為需要生成所有符合要求的報表數(shù)據(jù),在5.1節(jié)決定報表的因素中定義了所有了決定一個報表的可能的條件。在5.2.1節(jié)結(jié)點說明中將要素報表編號(ReportCode),報表描述(ReportDescript),機(jī)構(gòu)代碼(BankCode),機(jī)構(gòu)名稱(BankName),數(shù)據(jù)日期(DataDate)歸屬給根結(jié)點Report,因此在數(shù)據(jù)文件的文件粒度上,定義以下條件決定一個報表數(shù)據(jù)文件的粒度:日期、需求編號(報表編號)、機(jī)構(gòu)。XML數(shù)據(jù)文件分析了前一階段的定式報表,報表數(shù)據(jù)主要有以下幾個層次:數(shù)據(jù)日期、機(jī)構(gòu)、需求編號、報表日期類型(如日月年報)、貨幣、期次(國債)、卡類型等情況,我們主要將其分成文件層次、數(shù)據(jù)層次,將數(shù)據(jù)日期、機(jī)構(gòu)信息、需求編號體現(xiàn)在文件層次,報表日期類型、貨幣、期次(國債)、卡類型體現(xiàn)在數(shù)據(jù)層次。存儲XML數(shù)據(jù)的文件系統(tǒng)結(jié)構(gòu)XML數(shù)據(jù)是以報表日期、機(jī)構(gòu)、需求編號為單位的,為體現(xiàn)層次結(jié)構(gòu),報表的的目錄如下:/$Report/YYYYMMDD/BBBBBB其中:$Report存放XML數(shù)據(jù)的總目錄名稱YYYYMMDD為數(shù)據(jù)的時間,BBBBBB為機(jī)構(gòu)編碼XML數(shù)據(jù)文件的命名如下:YYYYMMDD_BBBBBB_RRRRRR.xml其中:YYYYMMDD為報表時間,如:20031231BBBBBB為機(jī)構(gòu)編碼,如:449999RRRRRR–報表的需求編號,如:A9029(業(yè)務(wù)狀況表)舉例如下:2003年12月31日生成的449999機(jī)構(gòu)業(yè)務(wù)狀況表/Report/20031231/449999/20031231_449999_A9029.xml該XML文件包括449999機(jī)構(gòu)20031231的所有貨幣的(包括折人民幣A00,外幣折美元B00等)日總帳、月總帳、年總帳數(shù)據(jù)。XML數(shù)據(jù)文件格式在XML數(shù)據(jù)文件中不但要記錄數(shù)據(jù)層次的信息,還要記錄文件層次的信息,所以XML數(shù)據(jù)文件的格式定義有以下三個層次,文件層次(<Report>):將報表編號,報表描述,機(jī)構(gòu),機(jī)構(gòu)名稱,數(shù)據(jù)日期固定的屬性放在<Report>的屬性中。另外有些報表有特有的屬性,我們在<Report>下定義<CommonArea>來描述各報表需求特殊的屬性,目前我們定義的值有以下幾種:<SequenceList>數(shù)據(jù)層次的順序(可選)<DataRowKeyID>關(guān)鍵字段索引(可選)<ColumnDataType>字段類型(必須)舉例如下:<?xmlversion="1.0"encoding="GB2312"?><ReportReportCode="A9029"ReportDescript="業(yè)務(wù)狀況表"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="上期貸方發(fā)生數(shù)"/>
<DataTypeID="5"Type="Number"Name="本期借方發(fā)生數(shù)"/>
<DataTypeID="6"Type="Number"Name="本期貸方發(fā)生數(shù)"/>
<DataTypeID="7"Type="Number"Name="本期借方余額"/>
<DataTypeID="8"Type="Number"Name="本期貸方余額"/>
</ColumnDataType>
</CommonArea>……</Report>(2)數(shù)據(jù)層次(<ReportData>):在同一個XML文件會存在需要分類的情況,比如分日月年報,分貨幣,分期次等,這我們通過數(shù)據(jù)層次來體現(xiàn),可以進(jìn)行嵌套,目前<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程序設(shè)計說明Sql2xml的功能是根據(jù)報表配置文件,執(zhí)行相應(yīng)的sql語句,把結(jié)果輸出到xml數(shù)據(jù)文件。程序的目錄說明./srcSql2xml及相關(guān)的源程序目錄./bin可執(zhí)行文件目錄./etc/sql2xml.conf全局配置文件./etc/tasks具體每個需求的XML配置文件./log日志文件目錄./reportXML數(shù)據(jù)文件目錄,可在全局配置文件指定sql2xml的程序流程程序的基本流程如下:讀全局配置文件(etc/sql2xml.conf)信息,包括:數(shù)據(jù)庫連接參數(shù)、存放XML數(shù)據(jù)的總目錄名稱、系統(tǒng)調(diào)試參數(shù)、報表時間類型編碼表、卡類型編碼表、期次編碼表連接數(shù)據(jù)庫,從Dim_CCY形成貨幣編碼表。讀報表配置文件(每張報表一個配置文件,如tasks/A9030.conf)信息,包括:報表編號、sql語句、列數(shù)、各列大小、各列類型(S:StringN:Number)、層次、Xml頭模版執(zhí)行sql語句,生成xml數(shù)據(jù)文件A.根據(jù)報表編號,取該報表的輸出機(jī)構(gòu)級別(SelectBank_Rel_LevelFromRpt_Bank_LevelWhereRequirement_Id='reportcode')B取該報表的機(jī)構(gòu)列表(代碼、名稱)(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根據(jù)配置中的機(jī)構(gòu)處理方式、幣種處理方式和報表類型處理方式等,選擇相應(yīng)的方式(是否采用外部循環(huán),形成多條sql語句),生成Xml報表: 替換sql語句中的參數(shù)替換Xml頭模版中的參數(shù)創(chuàng)建目錄及文件輸出Xml頭部分執(zhí)行sql語句,輸出數(shù)據(jù)部分Sql2xml程序使用說明命令格式sql2xml task.conf datadatecomm.conf 其中task.conf為報表配置文件,必須帶路徑,如../etc/tasks/A9029.confdatadate為數(shù)據(jù)日期,格式為’yyyymmdd’,如20031231comm.conf為全局配置文件,該參數(shù)可選,如沒有,則取默認(rèn)值sql2xml.conf。該參數(shù)不要帶路徑,程序假定路徑為環(huán)境變量OLAP_XML_COMM_PATH的值。提供此可選參數(shù)是為了方便連接不同的數(shù)據(jù)庫,尤其是在測試時。 由于程序用到環(huán)境變量OLAP_XML_COMM_PATH,因此,運行之前必須給環(huán)境變量OLAP_XML_COMM_PATH賦值,如運行腳本.Olap_etl_env。如:sql2xml../etc/tasks/A9029.conf 20031231則取默認(rèn)的全局配置文件$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全局配置文件包括以下信息:數(shù)據(jù)庫連接參數(shù)存放XML數(shù)據(jù)的總目錄名稱系統(tǒng)調(diào)試參數(shù)報表時間類型編碼表卡類型編碼表期次編碼表以下是一樣例(見文件sql2xml.conf):[dbinfo]#登錄數(shù)據(jù)庫的登錄信息connectstring=NCR4900/sysolap001,sysolap001[report]#存放XML數(shù)據(jù)的總目錄名稱reportpath=/home/jobsch/sql2xml/bin/report#調(diào)試相關(guān)[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=地方性轉(zhuǎn)帳卡,IC卡,專用卡,萬事順卡,金穗通寶借記,威士金卡,威士普通卡,萬事達(dá)金卡,萬事達(dá)普通卡[PeriodNo]#期次Count=7PeriodNos=1,2,3,4,5,6,7PeriodNames=第一期,第二期,第三期,第四期,第五期,第六期,第七期報表配置文件報表配置文件包括以下信息:報表編號sql語句列數(shù)各列大小各列類型S:StringN:NumberL:左邊空格以0xA1替換的字符串層次Xml頭模版以下是一樣例(見文件A9029.conf):##業(yè)務(wù)狀況表#機(jī)構(gòu):到網(wǎng)點#報表類型:日、旬、月、季、半年、年#幣種:人民幣、各外幣原幣、折人民幣總計、外幣折美元總計#報表編號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#列數(shù)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#機(jī)構(gòu)處理方式0:在sql中BANKTYPE=0#Xml頭模版*XML<?xmlversion="1.0"encoding="GB2312"?><ReportReportCode="$ReportCode$"ReportDescript="業(yè)務(wù)狀況表"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="借方發(fā)生額"/><DataTypeID="6"Type="Number"Name="貸方發(fā)生額"/><DataTypeID="7"Type="Number"Name="期末借方余額"/><DataTypeID="8"Type="Number"Name="期末貸方余額"/><DataTypeID="9"Type="String"Name="科目號"/></ColumnDataType></CommonArea>說明:前面是提供如ReportCode,Sql等一些值,#后是注釋。注意一個值只能占一行,如sql語句很長,不能用回車分開多行。后面是Xml頭模版,以*XML標(biāo)示開始,XML頭模版允許以回車分成多行。SequenceList=ReportTimeType,CurrencyCode表示輸出的紀(jì)錄中前兩列作為層次分組,注意sql語句必須對屬于層次的列使用orderby。如果沒有層次,也要寫成SequenceList=目前程序只能處理定長的列,對于金額類型,使用CAST轉(zhuǎn)換為字符類型,如:CAST(SUM(ZEROIFNULL(Cr_Amt))ASCHAR(21));對于VARCHAR類型,使用CAST轉(zhuǎn)換為定長字符類型,如:CAST(Sec_Branch_DescASCHAR(60))。對數(shù)據(jù)類型為N的列程序使用千分位格式化。對數(shù)據(jù)類型為L的列,程序?qū)ψ筮吙崭褚?xA1替換,以保留左邊空格,這對于損益表、資產(chǎn)負(fù)債表等表是需要的。程序提供了以下參數(shù):$DATADATE$:數(shù)據(jù)日期$BANKCODE$:機(jī)構(gòu)代碼$CCYCODE$:貨幣代碼$TIMETYPE$:報表類型$BANKNAME$:機(jī)構(gòu)名稱$REPORTCODE$:報表編號$SEQUENCELIST$:數(shù)據(jù)層次Sql語句中可使用$DATADATE$,$BANKCODE$、$CCYCODE$、$TIMETYPE$引用數(shù)據(jù)日期、機(jī)構(gòu)代碼、貨幣代碼、報表類型等參數(shù)值。Xml頭模版中可使用$DATADATE$,$BANKCODE$,$ReportCode$,$BANKNAME$,$SequenceList$引用參數(shù)或定義的值。報表的機(jī)構(gòu)級別 對每張報表,必須在表RPT_BANK_LEVEL中增加一條記錄,指定該報表輸出到機(jī)構(gòu)的級別。報表類型由于數(shù)據(jù)層次中的報表時間類型是必選,所以對于中間表中沒有報表時間類型的報表,如只有月報,必須在sql中加上如:CAST('4'ASCHAR(1))ReportTimeType,同時SequenceList=ReportTimeType 至于如貨幣,期次等是可選,則無須象報表時間類型這樣處理。Sql語句的兩種處理方式#機(jī)構(gòu)處理方式0:在sql中1:在sql外循環(huán)BANKTYPE=1#幣種處理方式0:在sql中1:在sql外循環(huán)CCYTYPE=1ccysql=selectdistinctccy_codefromFR_A9030_PROFIT_LOSSwhereBank_Id='$BANKCODE$'orderbyccy_code#報表類型處理方式0:在sql中1:在sql外循環(huán)TIMETYPE=0如果在配置文件中沒有制定,則默認(rèn)是0。 對于機(jī)構(gòu)、幣種、報表類型等,程序提供了兩種處理方式,一種是單一sql語句方式,機(jī)構(gòu)、幣種、報表類型等字段出現(xiàn)在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;#機(jī)構(gòu)處理方式0:在sql中BANKTYPE=0 這種方式下,對于機(jī)構(gòu),必須放在第一列,同時,必須人工利用RPT_BANK_LEVEL限定機(jī)構(gòu)級別,如:a.Bank_Idin(SELECTbank_idFROMbank_rel_levelWherebank_rel_level<='6'),注意:加上orderbybank_id. 這種處理方式只需要向數(shù)據(jù)庫提交一次請求,速度較快,對于大數(shù)據(jù)量,機(jī)構(gòu)較多(如到網(wǎng)點)的報表,能大大減少執(zhí)行時間。推薦使用這種處理方式。 但對于一些報表,如損益表、資產(chǎn)負(fù)債表的固定欄目的報表,目前不能采用這種單一sql語句的方式,程序提供了另一種處理方式:外部循環(huán)。 在外部循環(huán)方式下,機(jī)構(gòu)、幣種、報表類型等以參數(shù)方式出現(xiàn)在where語句中,以$BANKCODE$、$CCYCODE$、$TIMETYPE$引用,程序遍歷各代碼表,形成多條sql語句,逐一執(zhí)行。這種處理方式需要向數(shù)據(jù)庫提交多次請求(可能有上萬),速度較慢,建議僅必要時才使用。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#列數(shù)Cols=6#各列大小Sizes=1,3,50,8,21,21#各列類型S:StringN:NumberTypes=S,S,L,S,N,N#層次SequenceList=ReportTimeType,CurrencyCode#機(jī)構(gòu)處理方式0:在sql中1:在sql外循環(huán)BANKTYPE=1#幣種處理方式0:在sql中1:在sql外循環(huán)CCYTYPE=1ccysql=selectdistinctccy_codefromFR_A9031_ABC_BALANCE_SHEETwherebank_id='$BANKCODE$'andIs_Abc='0'orderbyccy_code#報表類型處理方式0:在sql中1:在sql外循環(huán)TIMETYPE=1在上面A9031的例子中,為了減少循環(huán),加快速度,對于幣種,指定了循環(huán)用的代碼表的sql語句ccysql,并且在ccysql語句中限定了條件,bank_id='$BANKCODE$'andIs_Abc='0',盡可能減少循環(huán),如不限定機(jī)構(gòu),則可能對許多機(jī)構(gòu),盡管該機(jī)構(gòu)沒有某些幣種的數(shù)據(jù),由于采用外連接方式,也會生成許多數(shù)據(jù)全為零的報表。對于報表類型,程序自動根據(jù)日期確定類型列表,如2003-12-31,則為1,2,3,4(年報,半年報,季報,月報);2004-03-31,則為3,4(季報,月報);2004-04-30,則為4(月報)。 Xml頭模版中,需要填寫的節(jié)點包括:ReportDescriptDataRowKeyIDColumnDataType中的DataType(ID,Type,Name)其他節(jié)點不要修改。數(shù)據(jù)展示xml報表的展示,需要公共控制系統(tǒng)后臺按照用戶的查詢條件找到對應(yīng)的xml數(shù)據(jù)和xsl文件,然后經(jīng)過jaxp對xls和xml進(jìn)行解析、過濾生成html,再回應(yīng)給前端用戶。xsl腳本xsl腳本的作用是,將報表數(shù)據(jù)從xml中提取出來,并按照定式報表表樣的要求生成html。獲取xmlxsl文件公共控制系統(tǒng)目前支持二種數(shù)據(jù)獲取方案:ftp、本地文件。類圖如下:
IFileSpider接口定義了獲取xml和xsl句柄及臨時清理的方法:publicinterfaceIFileSpider{//根據(jù)日期機(jī)構(gòu)號需求編號得到一個XML數(shù)據(jù)文件的拷貝并且此文件打開publicFile[]getOneXmlCopyAndOpen(Stringdate,StringbankId,StringreqNo,VectorvParameter)throwsException;//根據(jù)日期機(jī)構(gòu)號需求編號得到一個XLS數(shù)據(jù)樣式文件的拷貝并且此文件打開publicFile[]getOneXslCopyAndOpen(Stringdate,StringbankId,StringreqNo)throwsException;//根據(jù)需要清理臨時文件publicvoidclear(File[]fileCopy)throwsException;}FtpFileSpiderIFileSpider的FTP存儲方式實現(xiàn)。LocalFileSpiderIFileSpider的本地存儲方式實現(xiàn)。HttpFileSpiderIFileSpider的http存儲方式實現(xiàn)。注:該類是擴(kuò)展實現(xiàn),在本項目中沒有使用到。SpiderFactory該類根據(jù)需求編號,并結(jié)合perties配置文件中的配置生成具體的IFileSpider。交易配置在perties文件中我們對xml定式報表進(jìn)行配置。################################################################################定式報表部分xml實現(xiàn)方式################################################################################默認(rèn)配置ReportXcessage.defult=reportx/reportx.jspReportXml.classname.defult=abas.abas.reportx.XmlReport#本機(jī)存儲方式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>如上所示:我們規(guī)定ReportXml前綴是xml定式報表的標(biāo)識。描述一個xml定式報表的信息需要以下四個關(guān)鍵信息:處理頁面;處理請求的具體JavaBean;xml報表數(shù)據(jù)的存儲策略和存儲路徑;該交易的xsl數(shù)據(jù)的存儲策略和存儲路徑。默認(rèn)配置#默認(rèn)配置ReportXcessage.defult=reportx/reportx.jspReportXml.classname.defult=abas.abas.reportx.XmlReport#本機(jī)存儲方式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/ 約定每個關(guān)鍵要素的默認(rèn)配置以.defaut%結(jié)尾。 xmlFilePosition和xslFilePosition在存儲策略定義上使用的方式如下:本地:localhost://具體的路徑ftp:ftp://用戶名:密碼@具體的路徑具體交易配置#儲蓄存款變動情況分析ReportXmlB1023.processpage=<default>ReportXmlB1023.classname=<default>ReportXmlB1023.xmlFilePosition=<default_1>ReportXmlB1023.xslFilePosition=<default_1>具體交易可以使用默認(rèn)配置,也可以自定義,如我們定義:ReportXmlB1023.xslFilePosition=ftp://jobsch:jobsch@1/jobsch/xsl/生成html在得到xml和xsl以后,利用類abas.util.file.xlm輸出html到指定的介質(zhì),該類的接口定義如下:publicclassxml{publicstaticvoidtransform(StringsXmlFile,StringsXslFile,OutputStreamout)throwsException;publicstaticvoidtransform(StringsXmlFile,StringsXslFile,PrintWriterout)throwsException;privatestaticvoidtransform(StringsXmlFile,StringsXslFile,ResultoutResult)throwsException;publicstaticvoidtransform(StringsXmlFile,StringsXslFile,StringoutFileName)throwsException;}數(shù)據(jù)下載Excelxml定式報表利用Excel實現(xiàn)報表的打印。用戶首先需要通過公共控制系統(tǒng)提供的相關(guān)功能實現(xiàn)報表的下載,在下載的數(shù)據(jù)包中,包括一個Excel文件和一個Excel同名的目錄,在這個目錄下就是用戶的目標(biāo)報表(html格式)。 目錄結(jié)構(gòu)如下: 模板.xls 模板.files filelist.xml Demo報表.htm 用戶選擇的目標(biāo)報表的生成過程同數(shù)據(jù)展示部分的處理流和是相同的。Excel模板<htmlxmlns:o="urn:schemas-microsoft-com:o
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年綠色生態(tài)建筑農(nóng)民工勞動合同示范3篇
- 二零二五年度防盜門行業(yè)市場分析報告合同2篇
- 二零二五版加油站智能監(jiān)控與數(shù)據(jù)分析合同3篇
- 二零二五白云區(qū)觀白活力中心房地產(chǎn)合作開發(fā)投資框架合同2篇
- 二零二五年度智能家電產(chǎn)品研發(fā)與銷售合同3篇
- 二零二五版養(yǎng)殖企業(yè)與個體養(yǎng)牛戶合作合同3篇
- 二零二五版數(shù)據(jù)中心機(jī)房租賃及數(shù)據(jù)備份服務(wù)合同2篇
- 基于2025年度5G網(wǎng)絡(luò)技術(shù)研發(fā)合作合同2篇
- 二零二五版拌和站產(chǎn)品質(zhì)量追溯與售后服務(wù)合同2篇
- 二零二五版建筑工程土方中介合同糾紛調(diào)解機(jī)制3篇
- 第1課+中華文明的起源與早期國家+課件+-2023-2024學(xué)年高中歷史統(tǒng)編版2019必修中外歷史綱要上冊+
- 大廈物業(yè)管理保潔服務(wù)標(biāo)準(zhǔn)5篇
- 神經(jīng)內(nèi)科國家臨床重點專科建設(shè)項目評分標(biāo)準(zhǔn)(試行)
- 業(yè)主委員會成員推薦表
- 城市設(shè)計與城市更新培訓(xùn)
- 2023年貴州省銅仁市中考數(shù)學(xué)真題試題含解析
- 世界衛(wèi)生組織生存質(zhì)量測量表(WHOQOL-BREF)
- 《葉圣陶先生二三事》第1第2課時示范公開課教學(xué)PPT課件【統(tǒng)編人教版七年級語文下冊】
- 某送電線路安全健康環(huán)境與文明施工監(jiān)理細(xì)則
- GB/T 28885-2012燃?xì)夥?wù)導(dǎo)則
- PEP-3心理教育量表-評估報告
評論
0/150
提交評論