報表引擎

報表引擎

報表引擎起源於流行的工作流引擎的原理、報表格式的定義、報表內容的各種演演算法,產生報表引擎的思想。

它主要是引用工作流引擎的流程運轉原理,在原始數據的基礎上,定義報表的格式、報表的演演算法,根據定義的演演算法自動執行計算,並輸出計算后的結果,再根據定義的報表格式顯示報表的內容。

報表引擎根據定義的報表主題及它的演演算法,在人工或日程安排的觸發下,自動運行。報表引擎根據報表主題,從資料庫的原始數據的基礎上,提取原始的數據,依據定義的報表演演算法,進行自動計算;在提取報表主題及演演算法運算的過程中,報表引擎依據定義各種參數,實現所需的運算。

報表引擎輸出的數據信息,經報表解釋介面實現它的解釋。並生成相應的報表展示給用戶。用戶也可以根據實際需求,隨時調整報表主題及演演算法的定義語言,再重新運行報表引擎時,報表引擎立即根據定義后的內容進行處理,產生經過改變后的報表數據。這樣,報表引擎可以跟隨用戶的需求變化,而所需求的維護量非常少,也非常簡單,靈活。

對於報表的輸出格式,在報表引擎的輸出介面中,定義要求的報表格式;當用戶列印報表時,報表引擎根據定義的格式列印所需的報表;同時,如果用戶需要改變報表的樣式時,可以非常即時、靈活的重新定義,以滿足用戶的各種需求。

結構


報表引擎從整體上劃分為:報表請求部分、格式定義部分、引擎定義部分、引擎運行部分、策略引擎部分、引擎監控部分、引擎輸出部分,下面對各個部分進行簡單的介紹。
報表引擎的總體結構分為七個部分進行介紹,每一部分都是獨立運行的一個模塊。它們之間經過相互協調工作,共同完成整個報表從定義、請求、執行、監控、分派、顯示功能。
整個報表引擎的核心的部分是報表引擎運行器、策略引擎器以及報表生成器。其它幾是報表引擎的輔助部分,協調報表引擎的運作。
(1)報表請求器:主要是實現對報表請求參數的封裝,實現統一的入口。並負責對請求及響應的集中控制、分配。
(2)報表格式定義器:在這一部分中,主要的功能是實現報表的輸出格式的定義、報表欄位中輸出的格式(包括字體、顏色、框線、顯示樣式等),輸出的內容(主要是從輸出的對象、輸出對象的比較簡單的計算、頁頭、分組、頁尾等)。
(3)引擎定義器:主要是指當報表引擎運行時,它的每個演演算法、演演算法執行次序、是否循環或分解、引用的外部應用介面、路由等信息。演演算法包括從資料庫中讀取原始的數據信息、對各種參數進行的計算的演演算法,演演算法的形式參數、實際參數、數據類型。
(4)引擎運行器:這也是報表引擎中比較重要的部分,這一部分的性能影響到整個報表引擎的性能。它根據在報表引擎定義部分定義的報表主題、各種演演算法、次序等信息,進行計算,並返回計算后的結果。對於分散式的報表引擎,路由信息比較重要;當定義了路由信息之後,引擎運行到該處后,將定義在路由表中的引擎起動,並從相應的步驟處開始運行,並返回運行的結果。
(5)策略引擎器:主要是針對用戶的定義的演演算法,根據所需的參數進行計算,並生成計算后的結果返回給調用者。這也是報表引擎比較重要的部分。它也可以適用於業務系統,在策略引擎的協同下,滿足業務需求的變動要求,靈活配置業務處理中的業務邏輯。這一部分,對整個引擎的性能也是有巨大的影響,包括從資料庫中提取數據信息、各種信息的計算。
(6)引擎監控器:這一部分是輔助功能,主要是監控報表引擎的運行過程,如有些地方需求用戶處理的,引擎會等待著用戶的處理后,再執行后一個演演算法。也可以監控引擎在運行過程中的出錯信息,以便對引擎的錯誤進行跟蹤;這些錯誤有可能是系統的、引擎本身的、演演算法定義的錯誤等。在監視中,可以查看已在運行的報表,也可以對運行的報表進行暫停、中止、恢復、保存、載入等操作。
(7)引擎輸出器:主要是根據報表格式定義的內容,以及引擎運行部分運行的結果,生成輸出界面,以比較直觀的形式展示給用戶瀏覽。在生成的輸出界面中,應該支持常用的幾種:HTMLEXCEL,WORD等。

工作流程


(1)在報表引擎定義器中,定義報表引擎的主題信息、計算策略,並根據定義的內容,生成報表引擎的定義文件(XML文件)。
(2)在報表引擎運行器運行時,自動根據系統的配置信息,導入定義好的格式文件,並解釋成報表引擎能操作的對象。
(3)當用戶請求報表引擎執行報表計算時,傳入起動參數及報表的ID,報表引擎在配置文件中查找要計算的報表。找到報表定義文件后,實例化報表的定義對象,並根據演演算法的執行次序,起動整個報表的執行過程。在報表的每一個演演算法中,根據定義的形式參數從系統環境中讀取實際參數值。
如果演演算法是一個表達式,系統起動策略引擎器進行計算,再返回運算的結果;
如果演演算法是調用外部的應用程序或過程,系統會自動根據定義的內容及參數,調用相應的應用程序或過程進行運算,並保存運行的結果。
(4)在整個報表引擎運行過程中,報表引擎監控器可以跟蹤報表的執行過程,並記錄它的執行過程;也可以對運行的報表執行暫停、中止、恢復、保存、載入等操作。用戶可以根據報表的運行情況,分析報表的各種性能及調整報表的執行過程,優化報表引擎的性能。
(5)當報表引擎運行結束后,返回運算結果,報表生成器根據用戶在報表格式定義器中定義的報表格式,生成相應的報表,再展示給用戶瀏覽。

介面


報表引擎的介面部分是描述整個報表引擎運行時,各個部分之間的相互關係及與外部應用的調用關係的體現。
在整個報表引擎的體系結構中,存在著幾個主要的介面信息:客戶應用介面、應用程序介面、管理監視介面、報表引擎定義介面、報表格式定義介面、報表引擎協同介面、策略引擎介面。
(1)客戶應用介面
客戶應用介面是客戶參與運算的一處介面信息,當運算過程中要求客戶輸入一些相關資料參與運算時或客戶決定下一個過程轉向時,引擎起動這一演演算法后,就處於等狀態,等候客戶對它進行處理;客戶處理之後,運算過程才繼續執行。
為了減少系統的複雜度,所有與客戶有關的操作,提供統一的介面進行管理。當客戶進行系統后,引擎根據客戶的帳號及角色情況,返回客戶所有的工作列表;客戶可以直接選擇要處理的工作列表,直接執行要處理的工作。
當客戶處理完工作之後,再次觸發引擎繼續執行下一步運算。
在處理過程中,可能存在調用外部應用程序一起解決要處理的問題。客戶也可以運算過程執行中斷、暫停、恢復等操作。
(2)應用程序介面
應用程序介面是引擎與應用程序之間進行交互的介面。當定義報表演演算法時,有部分功能不能在策略引擎實現或已經存在的系統,引擎通過調用外部的應用程序執行演演算法的實現,從而集成企業的外部應用程序。
引擎調用外部應用程序時,首先建立與外部應用程序的連接,在保持連接的狀態下,通過實際的參數傳入應用程序API中,由外部應用程序實現演演算法,並返回計算的結果信息。在運算結束后,引擎再斷開與外部應用程序的連接。
它分為本地過程調用、SHELL腳本的調用、遠程執行調用、消息傳遞、事務處理。
本地過程調用:引擎根據定義的介面信息,創建本地連接器並傳入調用的過程名稱及它的實際參數。在本地連接器中,執行本地過程計算並返回計算結果。
SHELL腳本的調用:引擎根據定義的腳本(可以是本地文件或在定義格式中直接寫入的腳本信息,起動腳本運行器;並根據返回的結果再執行下一步驟的運算。
遠程執行調用:引擎根據路由信息,創建遠程連接器並起動遠程連接,再根據遠程連接的參數信息,調用遠程過程計算;遠程過程計算后,返回計算結果信息;再斷開遠程的連接。
消息傳遞:主要是指通過消息伺服器,起動消息運算,可以是同步方式或非同步方式進行運算。如果同步,創建消息連接后,發送參數信息后,等待消息另一消息的觸發后,再處理返回的結果,再繼續運算;如是非同步方式,引擎等待消息返回,就直接執行下一步運算。
事務處理:主要是對整個計算過程中,起動事務管理。在起動事務后,暫存相關參數;當調用結束后,如發生錯誤,恢復被改變的參數;如沒有發生錯誤,繼續執行下一步運算。
(3)管理監視介面
這一部分主要是對用戶許可權、引擎日誌、運行情況進行監視,並可以隨時調整引擎的執行步驟、更改用戶的實際許可權。同時,在系統日誌的記錄下,分析引擎的執行情況、性能瓶頸等;並根據分析的結果,調整引擎的執行步驟,優化引擎的執行過程。
同時,也包括對引擎的運算過程進行中斷、暫停、恢復等操作。
(4)報表引擎定義介面
報表引擎定義介面,是對報表的整個演演算法及演演算法過程的定義。定義之後,可以輸出報表引擎定義的描述文檔。引擎的執行完全是依據這份文檔的內容。
(5)報表格式定義介面
報表格式定義介面,是定義報表的輸出界面的樣式、報表輸出界面與運算最終結果的相互關係。它是一種描述性的語言,只要符合規範,就可以在各個報表生成器中被解釋。
在格式語言中,也規範了輸出參數的描述方式。輸入參數只要符合規範,就可以被報表生成器解釋,並依據報表格式定義中的內容,生成輸入報表頁面。
(6)報表引擎協同介面
報表引擎的協同介面,是對多個報表引擎的一起工作,才能完成的報表運算。如跨地區的報表計算、分散式的報表計算等。這時,報表引擎分佈在多個地點上,通過Internet連接起來,在定義引擎執行步驟時,設置它的路由信息、進入的報表演演算法節點信息。
當報表引擎運行時,引擎本身會起動對其他引擎的連接,並保持連接,通過報表引擎的介面,傳入調用的參數,起動外部引擎進行運算;當外部引擎運行完畢后,返回運算結果,再斷開引擎的連接。報表引擎根據返回的結果再繼續運算其他的演演算法。
在啟動外部的報表引擎時,有兩種起動方式:非同步與同步。
非同步:是指啟動外部引擎后,不等外部引擎運行完畢,就繼續執行下一個報表演演算法的運算。
同步:是指啟動外部引擎后,暫停報表引擎的運行,一直到外部引擎執行完畢並返回后,再執行下一步驟的運算。
(7)策略引擎介面
策略引擎的介面,也是比較重要的一個環節,它分離了運行與計算之間的耦合關係;從而可以彼此獨立的進行設計與實現。只要根據規範的定義,就可以透明的相互協作。
當引擎執行運行時,由引擎起動策略引擎並保持它的連接;然後傳入計算的演演算法及相應的參數信息。策略引擎根據輸入的演演算法表達式及參數進行運算,再返回運算后的結果信息。

定義語言


報表引擎定義語言是整個系統的基礎,它負責定義整個報表演演算法的報表過程,相關數據、被調用的應用程序等。只有定義了報表演演算法的報表過程后,報表引擎才能根據它的內容起動運算。
每一個報表定義格式中由包組成,在包中包括了報表的過程、應用程序或過程、語句描述、相關數據。它包容了整個報表引擎的元素定義、引用參數、實現方法、運算策略等。
它分為包結構、報表過程、應用程序、相關數據、轉移信息、演演算法、演演算法集、數據操作集等。
下面首先介紹定義格式的通用結構,它包括擴展屬性、形式參數、外部參考。

通用結構

5.1.1 擴展屬性(extended attribute)
元素名基本類型描述
NameString標識擴展
ValueString擴展屬性值
5.1.2 形式參數(format parameter)
元素名基本類型描述
DataTypeString形式參數的數據類型
DescriptionString形式參數的文本描述
IdString形式參數的標識ID
IndexString形式參數的索引號
ModeString形式參數的輸入/輸出模式(IN、OUT、INOUT)
5.1.3 外部參考(external reference)
元素名基本類型描述
LocationString指明類型文檔的URI
NamespaceString實體定義的有效範圍
XrefString對在外部文檔中的實體進行標識
5.1.4 例子
針對上述的結構,下面用幾個例子來進行更清晰的說明。
擴展屬性:
形式參數
外部參考
xref="orderType"
namespace="orderschema/Order"/>

包結構

包結構是報表引擎定義格式的容器,它包括了報表過程、引用的包、應用程序、相關數據、語句集等。
在包的結構中,存在著對其他包的引用,當一個演演算法要起動另一個包中的報表過程時,使用命名空間指定相應的包中的報表過程;包對包的引用是相互的,也就是存在相互的參照。
在包的結構中,包含著應用程序的定義、報表過程的定義、語句集的定義、相關數據的定義,以及報表頭結構的定義。這些定義是全局性的定義,在過程定義中的演演算法定義中可以引用它的ID進行引用。
下面對各個元素的元素進行描述,使讀者更清晰地了解報表引擎的過程定義語言的格式及內容。
報表包(report package)
元素名基本類型描述
ApplicationsApplication應用程序聲明列表
DataFieldsDataField報表引擎相關數據定義
ExtendedAttributesExtendedAttribute報表包自定義的屬性,由開發者定義並解釋。
ExternalReferencesExternalReference包的外部參考定義
IdString包的標識ID
NameString包的名字
PackageHeaderPackageHeader包頭的詳細信息
RedefineHeaderRedefineHeader包和演演算法過程的相關信息
Type DeclarationsTypeDeclaration數據類型定義說明
ReportProcessesReportProcess演演算法過程的定義列表
ParticipantsParticipant工作流參與者的資源列表
StatementsStatement定義報表的運算策略,可以定義SQL語句(使用JDBC)、HSQL語句(使用Hibernate)或面向對象的SQL語句(如資料庫支持,直接使用。否則實現解釋)
報表包頭(package header
元素名基本類型描述
VersionString報表的規範版本信息
VendorString報定義的由來,包括開發者名稱、產品名稱以及產品的發布版本號等
CreatedString報表定義的創建日期
DescriptionString報表的文本描述
DocumentationString操作系統的路徑,幫助文件以及描述文件的文件名
PriorityUnitString用戶自定義語義的字元串
Cost UnitString模擬數據使用單元
可重定義包頭(redefindable header)
元素名基本類型描述
AuthorString包定義的作者
VersionString包定義的版本
Code pageString正文部分的頁碼
CountryKeyString國家代碼
包外部思考(external package)
素名基本類型描述
hrefString包的ID,對外部包的引用
Extended AttributesExtendedAttribute用戶擴展的屬性,定義用戶自己對外部包的引用原則,以滿足用戶的特殊要求。
例子
針對上述的結構,下面用幾個例子來進行更清晰的說明。
報表包頭
0.09
XYZ, Inc
6/18/2002 5:27:17 PM
This is a reportpackage header example.
可重定義包頭
kevin
1.0
1
china
包外部參考
報表控制項
報表引擎處於每種 Business Objects 報表解決方案的核心。它處理所有用戶請求,並輸出報表信息。
各個解決方案同時處理用戶請求的最大吞吐量各不相同。在某些解決方案中,它是由結構設計或授許可權制設置的。
報表引擎使用報表定義文件 (.rpt) 作為模板。然後,它從數據源獲取數據並使用報表定義呈現當前請求的報表,之後該報表將傳遞給報表查看器。從查看器接收到的信息或使用介面 SDK 編寫的代碼會觸發報表引擎執行進一步的處理,即對報表執行進一步的操作。
報表控制項就是這樣利用報表引擎工作的。
  • 目錄