經(jīng)營(yíng)分析系統(tǒng)定式報(bào)表設(shè)計(jì)說(shuō)明書(shū)_第1頁(yè)
經(jīng)營(yíng)分析系統(tǒng)定式報(bào)表設(shè)計(jì)說(shuō)明書(shū)_第2頁(yè)
經(jīng)營(yíng)分析系統(tǒng)定式報(bào)表設(shè)計(jì)說(shuō)明書(shū)_第3頁(yè)
經(jīng)營(yíng)分析系統(tǒng)定式報(bào)表設(shè)計(jì)說(shuō)明書(shū)_第4頁(yè)
經(jīng)營(yíng)分析系統(tǒng)定式報(bào)表設(shè)計(jì)說(shuō)明書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

VIP免費(fèi)下載

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

經(jīng)營(yíng)分析系統(tǒng)第一期定式報(bào)表設(shè)計(jì)說(shuō)明書(shū)V1.0廣東省分行科技處

文檔信息編寫(xiě)者編寫(xiě)日期審核者審核日期批準(zhǔn)人批準(zhǔn)日期變更歷史日期變更描述批準(zhǔn)文檔資料分發(fā)姓名職位機(jī)構(gòu)目錄TOC\o"1-3"一. 概述 概述本文檔就經(jīng)營(yíng)分析系統(tǒng)定式報(bào)表的xml實(shí)現(xiàn)方案進(jìn)行詳細(xì)的描述,該文檔主要描述在OLAPDB數(shù)據(jù)庫(kù)端存儲(chǔ)XML數(shù)據(jù)的文件系統(tǒng)結(jié)構(gòu)、XML數(shù)據(jù)文件的通用格式及批量生成XML數(shù)據(jù)文件程序sql2xml的設(shè)計(jì)、使用、配置說(shuō)明旨在指導(dǎo)設(shè)計(jì)人員和開(kāi)發(fā)人員進(jìn)行工程的實(shí)施。目的經(jīng)營(yíng)分析系統(tǒng)的第一期需求中定式報(bào)表的實(shí)現(xiàn)方式是:使用中間表(數(shù)據(jù)庫(kù)表)存儲(chǔ)數(shù)據(jù),JSP+JavaBean+JDBC展現(xiàn)數(shù)據(jù)。盡管可行,但這種方案需要用戶(hù)在硬件、系統(tǒng)靈活性付出很大的代價(jià),具體的表現(xiàn)在:造成時(shí)間、空間等數(shù)據(jù)庫(kù)資源的浪費(fèi);報(bào)表結(jié)果數(shù)據(jù)無(wú)法保證完整性;表現(xiàn)層缺乏靈活性。為了解決以上問(wèn)題,項(xiàng)目組選擇了利用xml存儲(chǔ)報(bào)表數(shù)據(jù)、用xsl格式化xml數(shù)據(jù)進(jìn)行表現(xiàn)在的技術(shù)方案。約定為了簡(jiǎn)便起見(jiàn),“定式報(bào)表需求xml方式實(shí)現(xiàn)方式”在下文中簡(jiǎn)稱(chēng)為“xmlReport”。xmlxslJaxp技術(shù)簡(jiǎn)介XML(eXtensibleMarkupLanguage,可擴(kuò)展置標(biāo)語(yǔ)言),是被認(rèn)為最有發(fā)展前途的數(shù)據(jù)存儲(chǔ)方式。XSL(eXtensibleStylesheetLanguage,可擴(kuò)展樣式語(yǔ)言)是為XML文件定義的一種標(biāo)識(shí)語(yǔ)言,用來(lái)對(duì)xml進(jìn)行修飾、格式轉(zhuǎn)換,為xml的表現(xiàn)服務(wù)。Jaxp用于XML文檔處理的使用Java語(yǔ)言編寫(xiě)的編程接口。利用JaxpAPI我們可以十分簡(jiǎn)單的將xml和xsl解析出html文檔。數(shù)據(jù)下載打印總體設(shè)計(jì)數(shù)據(jù)下載打印數(shù)據(jù)展示數(shù)據(jù)展示JaxpJaxp解析生成xsl文件xsl文件HTML(報(bào)表)經(jīng)批量轉(zhuǎn)換HTML(報(bào)表)經(jīng)批量轉(zhuǎn)換程序處理Excel文檔數(shù)據(jù)庫(kù)Excel文檔數(shù)據(jù)庫(kù)xml數(shù)據(jù)xml數(shù)據(jù)系統(tǒng)打包,用戶(hù)下載系統(tǒng)打包,用戶(hù)下載Excel模板Excel模板數(shù)據(jù)展示階段數(shù)據(jù)生成階段數(shù)據(jù)展示階段數(shù)據(jù)生成階段如上圖所示xmlReport的設(shè)計(jì)分為兩個(gè)階段:數(shù)據(jù)生成階段、數(shù)據(jù)展示階段。數(shù)據(jù)生成在數(shù)據(jù)生成階段的主要工作是由一個(gè)xmlRport數(shù)據(jù)批量生成程序(xmlReportDataMaker)來(lái)完成的。該程序根據(jù)具體的報(bào)表的需求,將符合要求的所有數(shù)據(jù),按照一定的xmldtd,從數(shù)據(jù)庫(kù)中導(dǎo)出到xml文件中。數(shù)據(jù)展示數(shù)據(jù)展示階段的工作由“數(shù)據(jù)展示”和“數(shù)據(jù)下載打印”兩部分組成,該階段的工作是由“公共控制系統(tǒng)”來(lái)完成的。數(shù)據(jù)展示公共控制系統(tǒng)根據(jù)用戶(hù)的查詢(xún)條件,找到對(duì)應(yīng)的xml文件(如何找到見(jiàn)下文),將它和對(duì)應(yīng)xsl文件一起送入jaxpxml解析引擎,生成html結(jié)果,展示給用戶(hù)。數(shù)據(jù)下載打印用戶(hù)在看到報(bào)表結(jié)果以后,向公共控制系統(tǒng)發(fā)出下載請(qǐng)求,公共控制系統(tǒng)先生成目標(biāo)html,方法同上,然后將事先準(zhǔn)備好的excel模板和該html一起壓縮,發(fā)送給瀏覽器,完成報(bào)表的下載。數(shù)據(jù)存儲(chǔ)策略利用xml存儲(chǔ)報(bào)表數(shù)據(jù),可以不受數(shù)據(jù)庫(kù)服務(wù)器的容量限制,原理上可以達(dá)到“海量存儲(chǔ)”。從xml的存儲(chǔ)位置上,我們將存儲(chǔ)策略分為以下兩種:本地存儲(chǔ)策略xml數(shù)據(jù)和xsl腳本存儲(chǔ)本地的“文件系統(tǒng)”中,使得數(shù)據(jù)展示應(yīng)用(在經(jīng)營(yíng)分析系統(tǒng)中是公共控制應(yīng)用)可以以訪問(wèn)本地?cái)?shù)據(jù)的方式進(jìn)行訪問(wèn),我們稱(chēng)這樣的數(shù)據(jù)存儲(chǔ)方式為本地存儲(chǔ)策略。遠(yuǎn)程存儲(chǔ)策略如果數(shù)據(jù)展示應(yīng)用無(wú)法通過(guò)“文件系統(tǒng)”訪問(wèn)到xml數(shù)據(jù)和xsl數(shù)據(jù)那么我這稱(chēng)這樣的數(shù)據(jù)存儲(chǔ)方式為遠(yuǎn)程存儲(chǔ)策略。按照數(shù)據(jù)展示應(yīng)用獲取目標(biāo)數(shù)據(jù)的方式不同,可以分為:http數(shù)據(jù)展示應(yīng)用通過(guò)http協(xié)議,作為客戶(hù)端向該“web服務(wù)器”發(fā)送索取數(shù)據(jù)的請(qǐng)求,由“web服務(wù)器”將數(shù)據(jù)傳遞給數(shù)據(jù)展示應(yīng)用。ftp數(shù)據(jù)展示應(yīng)用通過(guò)ftp協(xié)議,作為客戶(hù)端向該“ftp服務(wù)器”發(fā)送索取數(shù)據(jù)的請(qǐng)求,由“ftp服務(wù)器”把數(shù)據(jù)傳遞給數(shù)據(jù)展示應(yīng)用。其它其它如TCP/IP、webService、用戶(hù)自定義協(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定報(bào)表的因素決定一份定式報(bào)表的因素包括:名稱(chēng)代碼備注報(bào)表編號(hào)ReportCode報(bào)表描述ReportDescript機(jī)構(gòu)代碼BankCode機(jī)構(gòu)名稱(chēng)BankName數(shù)據(jù)日期DataDate報(bào)表日期類(lèi)型ReportTimeType報(bào)表的時(shí)間類(lèi)型范圍1 年報(bào)2 半年報(bào)3 季報(bào)4 月報(bào)5 旬報(bào)6 日?qǐng)?bào)貨幣代碼CurrencyCode貨幣名稱(chēng)CurrencyName期次代碼PeriodNo只針對(duì)國(guó)債類(lèi)需求期次名稱(chēng)PeriodName卡類(lèi)型代碼CardType卡類(lèi)型名稱(chēng)CardName報(bào)表數(shù)據(jù)的文檔描述(DTD)經(jīng)過(guò)以上的分析,定式報(bào)表的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é)點(diǎn)說(shuō)明Report根結(jié)點(diǎn)report,代表xml報(bào)表數(shù)據(jù)。屬性報(bào)表編號(hào) ReportCode報(bào)表描述 ReportDescript機(jī)構(gòu)代碼 BankCode機(jī)構(gòu)名稱(chēng) BankName數(shù)據(jù)日期 DataDate子結(jié)點(diǎn)CommonArea定義定式報(bào)表的查詢(xún)條件搜索順序、數(shù)據(jù)列的key、每一個(gè)數(shù)據(jù)列的類(lèi)型信息。ReportData具體的報(bào)表數(shù)據(jù)CommonArea定義定式報(bào)表的查詢(xún)條件搜索順序、數(shù)據(jù)列的key、每一個(gè)數(shù)據(jù)列的類(lèi)型信息。屬性子結(jié)點(diǎn)SequenceList 查詢(xún)條件搜索條件,如果有多個(gè)查詢(xún)條件,那么以逗號(hào)作為分隔符;不分先后順序。DataRowKeyID數(shù)據(jù)列的key,如果有多個(gè)鍵,那么以逗號(hào)作為分隔符;不分先后順序。ColumnDataType定義每一數(shù)據(jù)列的數(shù)據(jù)類(lèi)型信息。SequenceList定義查詢(xún)報(bào)表數(shù)據(jù)的搜索條件。具體的原因,在后面數(shù)據(jù)生成部分給出。DataRowKeyID定義報(bào)表數(shù)據(jù)中數(shù)據(jù)列的關(guān)鍵字段。ColumnDataType定義每一數(shù)據(jù)列的數(shù)據(jù)類(lèi)型信息。屬性子結(jié)點(diǎn)DataType 數(shù)據(jù)類(lèi)型。DataType定義每一數(shù)據(jù)列的數(shù)據(jù)類(lèi)型信息。屬性ID字段的順序號(hào)Name字段的名稱(chēng)Type字段的類(lèi)型Desc字段的描述子結(jié)點(diǎn)ReportData定義報(bào)表數(shù)據(jù)。屬性ReportTimeType報(bào)表日期類(lèi)型CurrencyCode幣種代碼CurrencyName幣種名稱(chēng)CardType卡類(lèi)型CardName卡名稱(chēng)PeriodNo報(bào)表期次PeriodName報(bào)表名稱(chēng)子結(jié)點(diǎn)DataRow數(shù)據(jù)行DataRow報(bào)表數(shù)據(jù)的數(shù)據(jù)行。屬性ID數(shù)據(jù)行的編號(hào)。子結(jié)點(diǎn)DataColumn數(shù)據(jù)列。DataColumn報(bào)表數(shù)據(jù)的數(shù)據(jù)列,該結(jié)點(diǎn)使用#PCDATA類(lèi)型存儲(chǔ)字段數(shù)據(jù)。屬性ID數(shù)據(jù)列的編號(hào)。子結(jié)點(diǎn)報(bào)表xml數(shù)據(jù)生成文件粒度因?yàn)樾枰伤蟹弦蟮膱?bào)表數(shù)據(jù),在5.1節(jié)決定報(bào)表的因素中定義了所有了決定一個(gè)報(bào)表的可能的條件。在5.2.1節(jié)結(jié)點(diǎn)說(shuō)明中將要素報(bào)表編號(hào)(ReportCode),報(bào)表描述(ReportDescript),機(jī)構(gòu)代碼(BankCode),機(jī)構(gòu)名稱(chēng)(BankName),數(shù)據(jù)日期(DataDate)歸屬給根結(jié)點(diǎn)Report,因此在數(shù)據(jù)文件的文件粒度上,定義以下條件決定一個(gè)報(bào)表數(shù)據(jù)文件的粒度:日期、需求編號(hào)(報(bào)表編號(hào))、機(jī)構(gòu)。XML數(shù)據(jù)文件分析了前一階段的定式報(bào)表,報(bào)表數(shù)據(jù)主要有以下幾個(gè)層次:數(shù)據(jù)日期、機(jī)構(gòu)、需求編號(hào)、報(bào)表日期類(lèi)型(如日月年報(bào))、貨幣、期次(國(guó)債)、卡類(lèi)型等情況,我們主要將其分成文件層次、數(shù)據(jù)層次,將數(shù)據(jù)日期、機(jī)構(gòu)信息、需求編號(hào)體現(xiàn)在文件層次,報(bào)表日期類(lèi)型、貨幣、期次(國(guó)債)、卡類(lèi)型體現(xiàn)在數(shù)據(jù)層次。存儲(chǔ)XML數(shù)據(jù)的文件系統(tǒng)結(jié)構(gòu)XML數(shù)據(jù)是以報(bào)表日期、機(jī)構(gòu)、需求編號(hào)為單位的,為體現(xiàn)層次結(jié)構(gòu),報(bào)表的的目錄如下:/$Report/YYYYMMDD/BBBBBB其中:$Report存放XML數(shù)據(jù)的總目錄名稱(chēng)YYYYMMDD為數(shù)據(jù)的時(shí)間,BBBBBB為機(jī)構(gòu)編碼XML數(shù)據(jù)文件的命名如下:YYYYMMDD_BBBBBB_RRRRRR.xml其中:YYYYMMDD為報(bào)表時(shí)間,如:20031231BBBBBB為機(jī)構(gòu)編碼,如:449999RRRRRR–報(bào)表的需求編號(hào),如: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ù)文件的格式定義有以下三個(gè)層次,文件層次(<Report>):將報(bào)表編號(hào),報(bào)表描述,機(jī)構(gòu),機(jī)構(gòu)名稱(chēng),數(shù)據(jù)日期固定的屬性放在<Report>的屬性中。另外有些報(bào)表有特有的屬性,我們?cè)?lt;Report>下定義<CommonArea>來(lái)描述各報(bào)表需求特殊的屬性,目前我們定義的值有以下幾種:<SequenceList>數(shù)據(jù)層次的順序(可選)<DataRowKeyID>關(guān)鍵字段索引(可選)<ColumnDataType>字段類(lèi)型(必須)舉例如下:<?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="科目編號(hào)"/>

<DataTypeID="2"Type="String"Name="名稱(chēng)"/>

<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>):在同一個(gè)XML文件會(huì)存在需要分類(lèi)的情況,比如分日月年報(bào),分貨幣,分期次等,這我們通過(guò)數(shù)據(jù)層次來(lái)體現(xiàn),可以進(jìn)行嵌套,目前<ReportData>的屬性有如下定義:<CurrencyCode>貨幣代碼(可選)<CurrencyName> 貨幣名稱(chēng)(可選)<CurrencyUnitName> 貨幣單位(可選)<PeriodNo> 期次 (可選)<PeriodName>期次描述(可選)<ReportTimeType>報(bào)表時(shí)間類(lèi)型代碼(必選)<ReportTimeDesc>報(bào)表時(shí)間類(lèi)型名稱(chēng)(必選)<CardType>卡類(lèi)型代碼(可選)<CardTypeDesc>卡類(lèi)型描述(可選)舉例如下:<ReportDataReportTimeType="4"ReportTimeDesc="月報(bào)"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è)計(jì)說(shuō)明Sql2xml的功能是根據(jù)報(bào)表配置文件,執(zhí)行相應(yīng)的sql語(yǔ)句,把結(jié)果輸出到xml數(shù)據(jù)文件。程序的目錄說(shuō)明./srcSql2xml及相關(guān)的源程序目錄./bin可執(zhí)行文件目錄./etc/sql2xml.conf全局配置文件./etc/tasks具體每個(gè)需求的XML配置文件./log日志文件目錄./reportXML數(shù)據(jù)文件目錄,可在全局配置文件指定sql2xml的程序流程程序的基本流程如下:讀全局配置文件(etc/sql2xml.conf)信息,包括:數(shù)據(jù)庫(kù)連接參數(shù)、存放XML數(shù)據(jù)的總目錄名稱(chēng)、系統(tǒng)調(diào)試參數(shù)、報(bào)表時(shí)間類(lèi)型編碼表、卡類(lèi)型編碼表、期次編碼表連接數(shù)據(jù)庫(kù),從Dim_CCY形成貨幣編碼表。讀報(bào)表配置文件(每張報(bào)表一個(gè)配置文件,如tasks/A9030.conf)信息,包括:報(bào)表編號(hào)、sql語(yǔ)句、列數(shù)、各列大小、各列類(lèi)型(S:StringN:Number)、層次、Xml頭模版執(zhí)行sql語(yǔ)句,生成xml數(shù)據(jù)文件A.根據(jù)報(bào)表編號(hào),取該報(bào)表的輸出機(jī)構(gòu)級(jí)別(SelectBank_Rel_LevelFromRpt_Bank_LevelWhereRequirement_Id='reportcode')B取該報(bào)表的機(jī)構(gòu)列表(代碼、名稱(chēng))(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)處理方式、幣種處理方式和報(bào)表類(lèi)型處理方式等,選擇相應(yīng)的方式(是否采用外部循環(huán),形成多條sql語(yǔ)句),生成Xml報(bào)表: 替換sql語(yǔ)句中的參數(shù)替換Xml頭模版中的參數(shù)創(chuàng)建目錄及文件輸出Xml頭部分執(zhí)行sql語(yǔ)句,輸出數(shù)據(jù)部分Sql2xml程序使用說(shuō)明命令格式sql2xml task.conf datadatecomm.conf 其中task.conf為報(bào)表配置文件,必須帶路徑,如../etc/tasks/A9029.confdatadate為數(shù)據(jù)日期,格式為’yyyymmdd’,如20031231comm.conf為全局配置文件,該參數(shù)可選,如沒(méi)有,則取默認(rèn)值sql2xml.conf。該參數(shù)不要帶路徑,程序假定路徑為環(huán)境變量OLAP_XML_COMM_PATH的值。提供此可選參數(shù)是為了方便連接不同的數(shù)據(jù)庫(kù),尤其是在測(cè)試時(shí)。 由于程序用到環(huán)境變量OLAP_XML_COMM_PATH,因此,運(yùn)行之前必須給環(huán)境變量OLAP_XML_COMM_PATH賦值,如運(yùn)行腳本.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配置文件說(shuō)明配置文件包括一全局配置文件(etc/sql2xml.conf)和報(bào)表配置文件(在etc/tasks子目錄下)。全局配置文件sql2xml.conf全局配置文件包括以下信息:數(shù)據(jù)庫(kù)連接參數(shù)存放XML數(shù)據(jù)的總目錄名稱(chēng)系統(tǒng)調(diào)試參數(shù)報(bào)表時(shí)間類(lèi)型編碼表卡類(lèi)型編碼表期次編碼表以下是一樣例(見(jiàn)文件sql2xml.conf):[dbinfo]#登錄數(shù)據(jù)庫(kù)的登錄信息connectstring=NCR4900/sysolap001,sysolap001[report]#存放XML數(shù)據(jù)的總目錄名稱(chēng)reportpath=/home/jobsch/sql2xml/bin/report#調(diào)試相關(guān)[debug]#是否在屏上顯示計(jì)算過(guò)程信息0:不顯示1:顯示showscrinfo=1#是否在過(guò)程日志中記錄計(jì)算過(guò)程信息0:不記錄1:記錄recordprocess=1[ReportTimeType]#報(bào)表時(shí)間類(lèi)型Count=6ReportTimeTypes=1,2,3,4,5,6ReportTimeDescs=年報(bào),半年報(bào),季報(bào),月報(bào),旬報(bào),日?qǐng)?bào)[CardType]#卡類(lèi)型Count=9CardTypes=01,02,03,04,05,06,07,08,09CardTypeDescs=地方性轉(zhuǎn)帳卡,IC卡,專(zhuān)用卡,萬(wàn)事順卡,金穗通寶借記,威士金卡,威士普通卡,萬(wàn)事達(dá)金卡,萬(wàn)事達(dá)普通卡[PeriodNo]#期次Count=7PeriodNos=1,2,3,4,5,6,7PeriodNames=第一期,第二期,第三期,第四期,第五期,第六期,第七期報(bào)表配置文件報(bào)表配置文件包括以下信息:報(bào)表編號(hào)sql語(yǔ)句列數(shù)各列大小各列類(lèi)型S:StringN:NumberL:左邊空格以0xA1替換的字符串層次Xml頭模版以下是一樣例(見(jiàn)文件A9029.conf):##業(yè)務(wù)狀況表#機(jī)構(gòu):到網(wǎng)點(diǎn)#報(bào)表類(lèi)型:日、旬、月、季、半年、年#幣種:人民幣、各外幣原幣、折人民幣總計(jì)、外幣折美元總計(jì)#報(bào)表編號(hào)ReportCode=A9029#sql語(yǔ)句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#各列類(lèi)型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="科目號(hào)"/><DataTypeID="2"Type="String"Name="科目名稱(chēng)"/><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="科目號(hào)"/></ColumnDataType></CommonArea>說(shuō)明:前面是提供如ReportCode,Sql等一些值,#后是注釋。注意一個(gè)值只能占一行,如sql語(yǔ)句很長(zhǎng),不能用回車(chē)分開(kāi)多行。后面是Xml頭模版,以*XML標(biāo)示開(kāi)始,XML頭模版允許以回車(chē)分成多行。SequenceList=ReportTimeType,CurrencyCode表示輸出的紀(jì)錄中前兩列作為層次分組,注意sql語(yǔ)句必須對(duì)屬于層次的列使用orderby。如果沒(méi)有層次,也要寫(xiě)成SequenceList=目前程序只能處理定長(zhǎng)的列,對(duì)于金額類(lèi)型,使用CAST轉(zhuǎn)換為字符類(lèi)型,如:CAST(SUM(ZEROIFNULL(Cr_Amt))ASCHAR(21));對(duì)于VARCHAR類(lèi)型,使用CAST轉(zhuǎn)換為定長(zhǎng)字符類(lèi)型,如:CAST(Sec_Branch_DescASCHAR(60))。對(duì)數(shù)據(jù)類(lèi)型為N的列程序使用千分位格式化。對(duì)數(shù)據(jù)類(lèi)型為L(zhǎng)的列,程序?qū)ψ筮吙崭褚?xA1替換,以保留左邊空格,這對(duì)于損益表、資產(chǎn)負(fù)債表等表是需要的。程序提供了以下參數(shù):$DATADATE$:數(shù)據(jù)日期$BANKCODE$:機(jī)構(gòu)代碼$CCYCODE$:貨幣代碼$TIMETYPE$:報(bào)表類(lèi)型$BANKNAME$:機(jī)構(gòu)名稱(chēng)$REPORTCODE$:報(bào)表編號(hào)$SEQUENCELIST$:數(shù)據(jù)層次Sql語(yǔ)句中可使用$DATADATE$,$BANKCODE$、$CCYCODE$、$TIMETYPE$引用數(shù)據(jù)日期、機(jī)構(gòu)代碼、貨幣代碼、報(bào)表類(lèi)型等參數(shù)值。Xml頭模版中可使用$DATADATE$,$BANKCODE$,$ReportCode$,$BANKNAME$,$SequenceList$引用參數(shù)或定義的值。報(bào)表的機(jī)構(gòu)級(jí)別 對(duì)每張報(bào)表,必須在表RPT_BANK_LEVEL中增加一條記錄,指定該報(bào)表輸出到機(jī)構(gòu)的級(jí)別。報(bào)表類(lèi)型由于數(shù)據(jù)層次中的報(bào)表時(shí)間類(lèi)型是必選,所以對(duì)于中間表中沒(méi)有報(bào)表時(shí)間類(lèi)型的報(bào)表,如只有月報(bào),必須在sql中加上如:CAST('4'ASCHAR(1))ReportTimeType,同時(shí)SequenceList=ReportTimeType 至于如貨幣,期次等是可選,則無(wú)須象報(bào)表時(shí)間類(lèi)型這樣處理。Sql語(yǔ)句的兩種處理方式#機(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#報(bào)表類(lèi)型處理方式0:在sql中1:在sql外循環(huán)TIMETYPE=0如果在配置文件中沒(méi)有制定,則默認(rèn)是0。 對(duì)于機(jī)構(gòu)、幣種、報(bào)表類(lèi)型等,程序提供了兩種處理方式,一種是單一sql語(yǔ)句方式,機(jī)構(gòu)、幣種、報(bào)表類(lèi)型等字段出現(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 這種方式下,對(duì)于機(jī)構(gòu),必須放在第一列,同時(shí),必須人工利用RPT_BANK_LEVEL限定機(jī)構(gòu)級(jí)別,如:a.Bank_Idin(SELECTbank_idFROMbank_rel_levelWherebank_rel_level<='6'),注意:加上orderbybank_id. 這種處理方式只需要向數(shù)據(jù)庫(kù)提交一次請(qǐng)求,速度較快,對(duì)于大數(shù)據(jù)量,機(jī)構(gòu)較多(如到網(wǎng)點(diǎn))的報(bào)表,能大大減少執(zhí)行時(shí)間。推薦使用這種處理方式。 但對(duì)于一些報(bào)表,如損益表、資產(chǎn)負(fù)債表的固定欄目的報(bào)表,目前不能采用這種單一sql語(yǔ)句的方式,程序提供了另一種處理方式:外部循環(huán)。 在外部循環(huán)方式下,機(jī)構(gòu)、幣種、報(bào)表類(lèi)型等以參數(shù)方式出現(xiàn)在where語(yǔ)句中,以$BANKCODE$、$CCYCODE$、$TIMETYPE$引用,程序遍歷各代碼表,形成多條sql語(yǔ)句,逐一執(zhí)行。這種處理方式需要向數(shù)據(jù)庫(kù)提交多次請(qǐng)求(可能有上萬(wàn)),速度較慢,建議僅必要時(shí)才使用。ReportCode=A9031#sql語(yǔ)句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#各列類(lèi)型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#報(bào)表類(lèi)型處理方式0:在sql中1:在sql外循環(huán)TIMETYPE=1在上面A9031的例子中,為了減少循環(huán),加快速度,對(duì)于幣種,指定了循環(huán)用的代碼表的sql語(yǔ)句ccysql,并且在ccysql語(yǔ)句中限定了條件,bank_id='$BANKCODE$'andIs_Abc='0',盡可能減少循環(huán),如不限定機(jī)構(gòu),則可能對(duì)許多機(jī)構(gòu),盡管該機(jī)構(gòu)沒(méi)有某些幣種的數(shù)據(jù),由于采用外連接方式,也會(huì)生成許多數(shù)據(jù)全為零的報(bào)表。對(duì)于報(bào)表類(lèi)型,程序自動(dòng)根據(jù)日期確定類(lèi)型列表,如2003-12-31,則為1,2,3,4(年報(bào),半年報(bào),季報(bào),月報(bào));2004-03-31,則為3,4(季報(bào),月報(bào));2004-04-30,則為4(月報(bào))。 Xml頭模版中,需要填寫(xiě)的節(jié)點(diǎn)包括:ReportDescriptDataRowKeyIDColumnDataType中的DataType(ID,Type,Name)其他節(jié)點(diǎn)不要修改。數(shù)據(jù)展示xml報(bào)表的展示,需要公共控制系統(tǒng)后臺(tái)按照用戶(hù)的查詢(xún)條件找到對(duì)應(yīng)的xml數(shù)據(jù)和xsl文件,然后經(jīng)過(guò)jaxp對(duì)xls和xml進(jìn)行解析、過(guò)濾生成html,再回應(yīng)給前端用戶(hù)。xsl腳本xsl腳本的作用是,將報(bào)表數(shù)據(jù)從xml中提取出來(lái),并按照定式報(bào)表表樣的要求生成html。獲取xmlxsl文件公共控制系統(tǒng)目前支持二種數(shù)據(jù)獲取方案:ftp、本地文件。類(lèi)圖如下:

IFileSpider接口定義了獲取xml和xsl句柄及臨時(shí)清理的方法:publicinterfaceIFileSpider{//根據(jù)日期機(jī)構(gòu)號(hào)需求編號(hào)得到一個(gè)XML數(shù)據(jù)文件的拷貝并且此文件打開(kāi)publicFile[]getOneXmlCopyAndOpen(Stringdate,StringbankId,StringreqNo,VectorvParameter)throwsException;//根據(jù)日期機(jī)構(gòu)號(hào)需求編號(hào)得到一個(gè)XLS數(shù)據(jù)樣式文件的拷貝并且此文件打開(kāi)publicFile[]getOneXslCopyAndOpen(Stringdate,StringbankId,StringreqNo)throwsException;//根據(jù)需要清理臨時(shí)文件publicvoidclear(File[]fileCopy)throwsException;}FtpFileSpiderIFileSpider的FTP存儲(chǔ)方式實(shí)現(xiàn)。LocalFileSpiderIFileSpider的本地存儲(chǔ)方式實(shí)現(xiàn)。HttpFileSpiderIFileSpider的http存儲(chǔ)方式實(shí)現(xiàn)。注:該類(lèi)是擴(kuò)展實(shí)現(xiàn),在本項(xiàng)目中沒(méi)有使用到。SpiderFactory該類(lèi)根據(jù)需求編號(hào),并結(jié)合perties配置文件中的配置生成具體的IFileSpider。交易配置在perties文件中我們對(duì)xml定式報(bào)表進(jìn)行配置。################################################################################定式報(bào)表部分xml實(shí)現(xiàn)方式################################################################################默認(rèn)配置ReportXcessage.defult=reportx/reportx.jspReportXml.classname.defult=abas.abas.reportx.XmlReport#本機(jī)存儲(chǔ)方式ReportXml.xmlFilePosition.defult_1=localhost:d:/eclipse/workspace/abas/xmlreport/ReportXml.xslFilePosition.defult_1=localhost:d:/eclipse/workspace/abas/xmlreportxsl/#ftp存儲(chǔ)方式ReportXml.xmlFilePosition.defult_2=ftp://jobsch:jobsch@1/jobsch/xml/ReportXml.xslFilePosition.defult_2=ftp://jobsch:jobsch@1/jobsch/xsl/#儲(chǔ)蓄存款變動(dòng)情況分析ReportXmlB1023.processpage=<default>ReportXmlB1023.classname=<default>ReportXmlB1023.xmlFilePosition=<default_1>ReportXmlB1023.xslFilePosition=<default_1>如上所示:我們規(guī)定ReportXml前綴是xml定式報(bào)表的標(biāo)識(shí)。描述一個(gè)xml定式報(bào)表的信息需要以下四個(gè)關(guān)鍵信息:處理頁(yè)面;處理請(qǐng)求的具體JavaBean;xml報(bào)表數(shù)據(jù)的存儲(chǔ)策略和存儲(chǔ)路徑;該交易的xsl數(shù)據(jù)的存儲(chǔ)策略和存儲(chǔ)路徑。默認(rèn)配置#默認(rèn)配置ReportXcessage.defult=reportx/reportx.jspReportXml.classname.defult=abas.abas.reportx.XmlReport#本機(jī)存儲(chǔ)方式ReportXml.xmlFilePosition.defult_1=localhost:d:/eclipse/workspace/abas/xmlreport/ReportXml.xslFilePosition.defult_1=localhost:d:/eclipse/workspace/abas/xmlreportxsl/#ftp存儲(chǔ)方式ReportXml.xmlFilePosition.defult_2=ftp://jobsch:jobsch@1/jobsch/xml/ReportXml.xslFilePosition.defult_2=ftp://jobsch:jobsch@1/jobsch/xsl/ 約定每個(gè)關(guān)鍵要素的默認(rèn)配置以.defaut%結(jié)尾。 xmlFilePosition和xslFilePosition在存儲(chǔ)策略定義上使用的方式如下:本地:localhost://具體的路徑ftp:ftp://用戶(hù)名:密碼@具體的路徑具體交易配置#儲(chǔ)蓄存款變動(dòng)情況分析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以后,利用類(lèi)abas.util.file.xlm輸出html到指定的介質(zhì),該類(lèi)的接口定義如下:publicclassxml{publicstaticvoidtransform(StringsXmlFile,StringsXslFile,OutputStreamout)throwsException;publicstaticvoidtransform(StringsXmlFile,StringsXslFile,PrintWriterout)throwsException;privatestaticvoidtransform(StringsXmlFile,StringsXslFile,ResultoutResult)throwsException;publicstaticvoidtransform(StringsXmlFile,StringsXslFile,StringoutFileName)throwsException;}數(shù)據(jù)下載Excelxml定式報(bào)表利用Excel實(shí)現(xiàn)報(bào)表的打印。用戶(hù)首先需要通過(guò)公共控制系統(tǒng)提供的相關(guān)功能實(shí)現(xiàn)報(bào)表的下載,在下載的數(shù)據(jù)包中,包括一個(gè)Excel文件和一個(gè)Excel同名的目錄,在這個(gè)目錄下就是用戶(hù)的目標(biāo)報(bào)表(html格式)。 目錄結(jié)構(gòu)如下: 模板.xls 模板.files filelist.xml Demo報(bào)表.htm 用戶(hù)選擇的目標(biāo)報(bào)表的生成過(guò)程同數(shù)據(jù)展示部分的處理流和是相同的。Excel模板<htmlxmlns:o="urn:schemas-microsoft-com:o

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論