報表引擎原理

收藏

查看我的收藏

22有用+1已投票0

  •  
  •  
  •  
  •  

報表引擎

編輯 鎖定討論

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

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

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

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

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

中文名

報表引擎

外文名

The report engine

運行方式

自動運行

行    業

計算機

目錄

  1. 1 結構
  2. 2 工作流程
  3. 3 接口
  4. 4 定義語言
  5. 通用結構
  6. 包結構

報表引擎結構

編輯

報表引擎從整體上劃分爲:報表請求部分、格式定義部分、引擎定義部分、引擎運行部分、策略引擎部分、引擎監控部分、引擎輸出部分,下面對各個部分進行簡單的介紹。

報表引擎的總體結構分爲七個部分進行介紹,每一部分都是獨立運行的一個模塊。它們之間經過相互協調工作,共同完成整個報表從定義、請求、執行、監控、分派、顯示功能。

整個報表引擎的核心的部分是報表引擎運行器、策略引擎器以及報表生成器。其它幾是報表引擎的輔助部分,協調報表引擎的運作。

(1)報表請求器:主要是實現對報表請求參數的封裝,實現統一的入口。並負責對請求及響應的集中控制、分配。

(2)報表格式定義器:在這一部分中,主要的功能是實現報表的輸出格式的定義、報表欄位中輸出的格式(包括字體、顏色、框線、顯示樣式等),輸出的內容(主要是從輸出的對象、輸出對象的比較簡單的計算、頁頭、分組、頁尾等)。

(3)引擎定義器:主要是指當報表引擎運行時,它的每個算法、算法執行次序、是否循環或分解、引用的外部應用接口、路由等信息。算法包括從數據庫中讀取原始的數據信息、對各種參數進行的計算的算法,算法的形式參數實際參數數據類型

(4)引擎運行器:這也是報表引擎中比較重要的部分,這一部分的性能影響到整個報表引擎的性能。它根據在報表引擎定義部分定義的報表主題、各種算法、次序等信息,進行計算,並返回計算後的結果。對於分佈式的報表引擎,路由信息比較重要;當定義了路由信息之後,引擎運行到該處後,將定義在路由表中的引擎起動,並從相應的步驟處開始運行,並返回運行的結果。

(5)策略引擎器:主要是針對用戶的定義的算法,根據所需的參數進行計算,並生成計算後的結果返回給調用者。這也是報表引擎比較重要的部分。它也可以適用於業務系統,在策略引擎的協同下,滿足業務需求的變動要求,靈活配置業務處理中的業務邏輯。這一部分,對整個引擎的性能也是有巨大的影響,包括從數據庫中提取數據信息、各種信息的計算。

(6)引擎監控器:這一部分是輔助功能,主要是監控報表引擎的運行過程,如有些地方需求用戶處理的,引擎會等待着用戶的處理後,再執行後一個算法。也可以監控引擎在運行過程中的出錯信息,以便對引擎的錯誤進行跟蹤;這些錯誤有可能是系統的、引擎本身的、算法定義的錯誤等。在監視中,可以查看已在運行的報表,也可以對運行的報表進行暫停、中止、恢復、保存、載入等操作。

(7)引擎輸出器:主要是根據報表格式定義的內容,以及引擎運行部分運行的結果,生成輸出界面,以比較直觀的形式展示給用戶瀏覽。在生成的輸出界面中,應該支持常用的幾種:HTML,EXCEL,WORD等。

報表引擎工作流程

編輯

(1)在報表引擎定義器中,定義報表引擎的主題信息、計算策略,並根據定義的內容,生成報表引擎的定義文件(XML文件)。

(2)在報表引擎運行器運行時,自動根據系統的配置信息,導入定義好的格式文件,並解釋成報表引擎能操作的對象。

(3)當用戶請求報表引擎執行報表計算時,傳入起動參數及報表的ID,報表引擎在配置文件中查找要計算的報表。找到報表定義文件後,實例化報表的定義對象,並根據算法的執行次序,起動整個報表的執行過程。在報表的每一個算法中,根據定義的形式參數從系統環境中讀取實際參數值。

如果算法是一個表達式,系統起動策略引擎器進行計算,再返回運算的結果;

如果算法是調用外部的應用程序或過程,系統會自動根據定義的內容及參數,調用相應的應用程序或過程進行運算,並保存運行的結果。

(4)在整個報表引擎運行過程中,報表引擎監控器可以跟蹤報表的執行過程,並記錄它的執行過程;也可以對運行的報表執行暫停、中止、恢復、保存、載入等操作。用戶可以根據報表的運行情況,分析報表的各種性能及調整報表的執行過程,優化報表引擎的性能。

(5)當報表引擎運行結束後,返回運算結果,報表生成器根據用戶在報表格式定義器中定義的報表格式,生成相應的報表,再展示給用戶瀏覽。

報表引擎接口

編輯

報表引擎的接口部分是描述整個報表引擎運行時,各個部分之間的相互關係及與外部應用的調用關係的體現。

在整個報表引擎的體系結構中,存在着幾個主要的接口信息:客戶應用接口、應用程序接口、管理監視接口、報表引擎定義接口、報表格式定義接口、報表引擎協同接口、策略引擎接口。

(1)客戶應用接口

客戶應用接口是客戶參與運算的一處接口信息,當運算過程中要求客戶輸入一些相關資料參與運算時或客戶決定下一個過程轉向時,引擎起動這一算法後,就處於等狀態,等候客戶對它進行處理;客戶處理之後,運算過程才繼續執行。

爲了減少系統的複雜度,所有與客戶有關的操作,提供統一的接口進行管理。當客戶進行系統後,引擎根據客戶的帳號及角色情況,返回客戶所有的工作列表;客戶可以直接選擇要處理的工作列表,直接執行要處理的工作。

當客戶處理完工作之後,再次觸發引擎繼續執行下一步運算。

在處理過程中,可能存在調用外部應用程序一起解決要處理的問題。客戶也可以運算過程執行中斷、暫停、恢復等操作。

(2)應用程序接口

應用程序接口是引擎與應用程序之間進行交互的接口。當定義報表算法時,有部分功能不能在策略引擎實現或已經存在的系統,引擎通過調用外部的應用程序執行算法的實現,從而集成企業的外部應用程序。

引擎調用外部應用程序時,首先建立與外部應用程序的連接,在保持連接的狀態下,通過實際的參數傳入應用程序API中,由外部應用程序實現算法,並返回計算的結果信息。在運算結束後,引擎再斷開與外部應用程序的連接。

它分爲本地過程調用、SHELL腳本的調用、遠程執行調用、消息傳遞、事務處理。

本地過程調用:引擎根據定義的接口信息,創建本地連接器並傳入調用的過程名稱及它的實際參數。在本地連接器中,執行本地過程計算並返回計算結果。

SHELL腳本的調用:引擎根據定義的腳本(可以是本地文件或在定義格式中直接寫入的腳本信息,起動腳本運行器;並根據返回的結果再執行下一步驟的運算。

遠程執行調用:引擎根據路由信息,創建遠程連接器並起動遠程連接,再根據遠程連接的參數信息,調用遠程過程計算;遠程過程計算後,返回計算結果信息;再斷開遠程的連接。

消息傳遞:主要是指通過消息服務器,起動消息運算,可以是同步方式或異步方式進行運算。如果同步,創建消息連接後,發送參數信息後,等待消息另一消息的觸發後,再處理返回的結果,再繼續運算;如是異步方式,引擎等待消息返回,就直接執行下一步運算。

事務處理:主要是對整個計算過程中,起動事務管理。在起動事務後,暫存相關參數;當調用結束後,如發生錯誤,恢復被改變的參數;如沒有發生錯誤,繼續執行下一步運算。

(3)管理監視接口

這一部分主要是對用戶權限、引擎日誌、運行情況進行監視,並可以隨時調整引擎的執行步驟、更改用戶的實際權限。同時,在系統日誌的記錄下,分析引擎的執行情況、性能瓶頸等;並根據分析的結果,調整引擎的執行步驟,優化引擎的執行過程。

同時,也包括對引擎的運算過程進行中斷、暫停、恢復等操作。

(4)報表引擎定義接口

報表引擎定義接口,是對報表的整個算法及算法過程的定義。定義之後,可以輸出報表引擎定義的描述文檔。引擎的執行完全是依據這份文檔的內容。

(5)報表格式定義接口

報表格式定義接口,是定義報表的輸出界面的樣式、報表輸出界面與運算最終結果的相互關係。它是一種描述性的語言,只要符合規範,就可以在各個報表生成器中被解釋。

在格式語言中,也規範了輸出參數的描述方式。輸入參數只要符合規範,就可以被報表生成器解釋,並依據報表格式定義中的內容,生成輸入報表頁面。

(6)報表引擎協同接口

報表引擎的協同接口,是對多個報表引擎的一起工作,才能完成的報表運算。如跨地區的報表計算、分佈式的報表計算等。這時,報表引擎分佈在多個地點上,通過Internet連接起來,在定義引擎執行步驟時,設置它的路由信息、進入的報表算法節點信息。

當報表引擎運行時,引擎本身會起動對其他引擎的連接,並保持連接,通過報表引擎的接口,傳入調用的參數,起動外部引擎進行運算;當外部引擎運行完畢後,返回運算結果,再斷開引擎的連接。報表引擎根據返回的結果再繼續運算其他的算法。

在啓動外部的報表引擎時,有兩種起動方式:異步與同步。

異步:是指啓動外部引擎後,不等外部引擎運行完畢,就繼續執行下一個報表算法的運算。

同步:是指啓動外部引擎後,暫停報表引擎的運行,一直到外部引擎執行完畢並返回後,再執行下一步驟的運算。

(7)策略引擎接口

策略引擎的接口,也是比較重要的一個環節,它分離了運行與計算之間的耦合關係;從而可以彼此獨立的進行設計與實現。只要根據規範的定義,就可以透明的相互協作。

當引擎執行運行時,由引擎起動策略引擎並保持它的連接;然後傳入計算的算法及相應的參數信息。策略引擎根據輸入的算法表達式及參數進行運算,再返回運算後的結果信息。

報表引擎定義語言

編輯

報表引擎定義語言是整個系統的基礎,它負責定義整個報表算法的報表過程,相關數據、被調用的應用程序等。只有定義了報表算法的報表過程後,報表引擎才能根據它的內容起動運算。

每一個報表定義格式中由包組成,在包中包括了報表的過程、應用程序或過程、語句描述、相關數據。 它包容了整個報表引擎的元素定義、引用參數、實現方法、運算策略等。

它分爲包結構、報表過程、應用程序、相關數據、轉移信息、算法、算法集、數據操作集等。

下面首先介紹定義格式的通用結構,它包括擴展屬性、形式參數、外部參考。

報表引擎通用結構

5.1.1 擴展屬性(extended attribute)

元素名

基本類型

描述

Name

String

標識擴展

Value

String

擴展屬性值

5.1.2 形式參數(format parameter)

元素名

基本類型

描述

DataType

String

形式參數的數據類型

Description

String

形式參數的文本描述

Id

String

形式參數的標識ID

Index

String

形式參數的索引號

Mode

String

形式參數的輸入/輸出模式(IN、OUT、INOUT)

5.1.3 外部參考(external reference)

元素名

基本類型

描述

Location

String

指明類型文檔的URI

Namespace

String

實體定義的有效範圍

Xref

String

對在外部文檔中的實體進行標識

5.1.4 例子

針對上述的結構,下面用幾個例子來進行更清晰的說明。

擴展屬性:

<ExternalAttributes>

<ExtendedAttribute Name="SystemActivity" Value="WebService"/>

<ExtendedAttribute Name="System" Value="Service"/>

</ExternalAttributes>

形式參數

<FormalParameters>

<FormalParameter Id="creditStatus" Index="1" Mode="IN">

<DataType>

<BasicType Type="STRING"/>

</DataType>

</FormalParameter>

<FormalParameter Id="orderStatus" Index="2" Mode="OUT">

<DataType>

<DeclaredType Id="OrderStatus"/>

</DataType>

</FormalParameter>

</FormalParameters>

外部參考

<FormalParameter Id="orderType" Index="1" Mode="IN">

<DataType>

<ExternalReference location="http://orderschema.xsd"

xref="orderType"

namespace="orderschema/Order"/>

</DataType>

</FormalParameter>

報表引擎包結構

包結構是報表引擎定義格式的容器,它包括了報表過程、引用的包、應用程序、相關數據、語句集等。

在包的結構中,存在着對其他包的引用,當一個算法要起動另一個包中的報表過程時,使用命名空間指定相應的包中的報表過程;包對包的引用是相互的,也就是存在相互的參照。

在包的結構中,包含着應用程序的定義、報表過程的定義、語句集的定義、相關數據的定義,以及報表頭結構的定義。這些定義是全局性的定義,在過程定義中的算法定義中可以引用它的ID進行引用。

下面對各個元素的元素進行描述,使讀者更清晰地瞭解報表引擎的過程定義語言的格式及內容。

報表包(report package)

元素名

基本類型

描述

Applications

Application

應用程序聲明列表

DataFields

DataField

報表引擎相關數據定義

ExtendedAttributes

ExtendedAttribute

報表包自定義的屬性,由開發者定義並解釋。

ExternalReferences

ExternalReference

包的外部參考定義

Id

String

包的標識ID

Name

String

包的名字

PackageHeader

PackageHeader

包頭的詳細信息

RedefineHeader

RedefineHeader

包和算法過程的相關信息

Type Declarations

TypeDeclaration

數據類型定義說明

ReportProcesses

ReportProcess

算法過程的定義列表

Participants

Participant

工作流參與者的資源列表

Statements

Statement

定義報表的運算策略,可以定義SQL語句(使用JDBC)、HSQL語句(使用Hibernate)或面向對象的SQL語句(如數據庫支持,直接使用。否則實現解釋)

報表包頭(package header)

元素名

基本類型

描述

Version

String

報表的規範版本信息

Vendor

String

報定義的由來,包括開發者名稱、產品名稱以及產品的發佈版本號等

Created

String

報表定義的創建日期

Description

String

報表的文本描述

Documentation

String

操作系統的路徑,幫助文件以及描述文件的文件名

PriorityUnit

String

用戶自定義語義的字符串

Cost Unit

String

模擬數據使用單元

可重定義包頭(redefindable header)

元素名

基本類型

描述

Author

String

包定義的作者

Version

String

包定義的版本

Code page

String

正文部分的頁碼

CountryKey

String

國家代碼

包外部思考(external package)

素名

基本類型

描述

href

String

包的ID,對外部包的引用

Extended Attributes

ExtendedAttribute

用戶擴展的屬性,定義用戶自己對外部包的引用原則,以滿足用戶的特殊要求。

例子

針對上述的結構,下面用幾個例子來進行更清晰的說明。

報表包頭

<PackageHeader>

<Version>0.09</Version>

<Vendor>XYZ, Inc</Vendor>

<Created>6/18/2002 5:27:17 PM</Created>

<Description>This is a reportpackage header example.</Description>

</PackageHeader>

可重定義包頭

<RedefinableHeader PublicationStatus="UNDER_TEST">

<Author>kevin</Author>

<Version>1.0</Version>

<Codepage>1</Codepage>

<Countrykey>china</Countrykey>

</RedefinableHeader>

包外部參考

<ExternalPackages>

<ExternalPackage href="ss.xml"/>

</ExternalPackages>

報表控件

報表引擎處於每種 Business Objects 報表解決方案的核心。它處理所有用戶請求,並輸出報表信息。

各個解決方案同時處理用戶請求的最大吞吐量各不相同。在某些解決方案中,它是由結構設計或授權限制設置的。

報表引擎使用報表定義文件 (.rpt) 作爲模板。然後,它從數據源獲取數據並使用報表定義呈現當前請求的報表,之後該報表將傳遞給報表查看器。從查看器接收到的信息或使用接口 SDK 編寫的代碼會觸發報表引擎執行進一步的處理,即對報表執行進一步的操作。

報表控件就是這樣利用報表引擎工作的。

收藏

查看我的收藏

22有用+1已投票0

  •  
  •  
  •  
  •  

報表引擎

編輯 鎖定討論

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

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

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

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

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

中文名

報表引擎

外文名

The report engine

運行方式

自動運行

行    業

計算機

目錄

  1. 1 結構
  2. 2 工作流程
  3. 3 接口
  4. 4 定義語言
  5. 通用結構
  6. 包結構

報表引擎結構

編輯

報表引擎從整體上劃分爲:報表請求部分、格式定義部分、引擎定義部分、引擎運行部分、策略引擎部分、引擎監控部分、引擎輸出部分,下面對各個部分進行簡單的介紹。

報表引擎的總體結構分爲七個部分進行介紹,每一部分都是獨立運行的一個模塊。它們之間經過相互協調工作,共同完成整個報表從定義、請求、執行、監控、分派、顯示功能。

整個報表引擎的核心的部分是報表引擎運行器、策略引擎器以及報表生成器。其它幾是報表引擎的輔助部分,協調報表引擎的運作。

(1)報表請求器:主要是實現對報表請求參數的封裝,實現統一的入口。並負責對請求及響應的集中控制、分配。

(2)報表格式定義器:在這一部分中,主要的功能是實現報表的輸出格式的定義、報表欄位中輸出的格式(包括字體、顏色、框線、顯示樣式等),輸出的內容(主要是從輸出的對象、輸出對象的比較簡單的計算、頁頭、分組、頁尾等)。

(3)引擎定義器:主要是指當報表引擎運行時,它的每個算法、算法執行次序、是否循環或分解、引用的外部應用接口、路由等信息。算法包括從數據庫中讀取原始的數據信息、對各種參數進行的計算的算法,算法的形式參數實際參數數據類型

(4)引擎運行器:這也是報表引擎中比較重要的部分,這一部分的性能影響到整個報表引擎的性能。它根據在報表引擎定義部分定義的報表主題、各種算法、次序等信息,進行計算,並返回計算後的結果。對於分佈式的報表引擎,路由信息比較重要;當定義了路由信息之後,引擎運行到該處後,將定義在路由表中的引擎起動,並從相應的步驟處開始運行,並返回運行的結果。

(5)策略引擎器:主要是針對用戶的定義的算法,根據所需的參數進行計算,並生成計算後的結果返回給調用者。這也是報表引擎比較重要的部分。它也可以適用於業務系統,在策略引擎的協同下,滿足業務需求的變動要求,靈活配置業務處理中的業務邏輯。這一部分,對整個引擎的性能也是有巨大的影響,包括從數據庫中提取數據信息、各種信息的計算。

(6)引擎監控器:這一部分是輔助功能,主要是監控報表引擎的運行過程,如有些地方需求用戶處理的,引擎會等待着用戶的處理後,再執行後一個算法。也可以監控引擎在運行過程中的出錯信息,以便對引擎的錯誤進行跟蹤;這些錯誤有可能是系統的、引擎本身的、算法定義的錯誤等。在監視中,可以查看已在運行的報表,也可以對運行的報表進行暫停、中止、恢復、保存、載入等操作。

(7)引擎輸出器:主要是根據報表格式定義的內容,以及引擎運行部分運行的結果,生成輸出界面,以比較直觀的形式展示給用戶瀏覽。在生成的輸出界面中,應該支持常用的幾種:HTML,EXCEL,WORD等。

報表引擎工作流程

編輯

(1)在報表引擎定義器中,定義報表引擎的主題信息、計算策略,並根據定義的內容,生成報表引擎的定義文件(XML文件)。

(2)在報表引擎運行器運行時,自動根據系統的配置信息,導入定義好的格式文件,並解釋成報表引擎能操作的對象。

(3)當用戶請求報表引擎執行報表計算時,傳入起動參數及報表的ID,報表引擎在配置文件中查找要計算的報表。找到報表定義文件後,實例化報表的定義對象,並根據算法的執行次序,起動整個報表的執行過程。在報表的每一個算法中,根據定義的形式參數從系統環境中讀取實際參數值。

如果算法是一個表達式,系統起動策略引擎器進行計算,再返回運算的結果;

如果算法是調用外部的應用程序或過程,系統會自動根據定義的內容及參數,調用相應的應用程序或過程進行運算,並保存運行的結果。

(4)在整個報表引擎運行過程中,報表引擎監控器可以跟蹤報表的執行過程,並記錄它的執行過程;也可以對運行的報表執行暫停、中止、恢復、保存、載入等操作。用戶可以根據報表的運行情況,分析報表的各種性能及調整報表的執行過程,優化報表引擎的性能。

(5)當報表引擎運行結束後,返回運算結果,報表生成器根據用戶在報表格式定義器中定義的報表格式,生成相應的報表,再展示給用戶瀏覽。

報表引擎接口

編輯

報表引擎的接口部分是描述整個報表引擎運行時,各個部分之間的相互關係及與外部應用的調用關係的體現。

在整個報表引擎的體系結構中,存在着幾個主要的接口信息:客戶應用接口、應用程序接口、管理監視接口、報表引擎定義接口、報表格式定義接口、報表引擎協同接口、策略引擎接口。

(1)客戶應用接口

客戶應用接口是客戶參與運算的一處接口信息,當運算過程中要求客戶輸入一些相關資料參與運算時或客戶決定下一個過程轉向時,引擎起動這一算法後,就處於等狀態,等候客戶對它進行處理;客戶處理之後,運算過程才繼續執行。

爲了減少系統的複雜度,所有與客戶有關的操作,提供統一的接口進行管理。當客戶進行系統後,引擎根據客戶的帳號及角色情況,返回客戶所有的工作列表;客戶可以直接選擇要處理的工作列表,直接執行要處理的工作。

當客戶處理完工作之後,再次觸發引擎繼續執行下一步運算。

在處理過程中,可能存在調用外部應用程序一起解決要處理的問題。客戶也可以運算過程執行中斷、暫停、恢復等操作。

(2)應用程序接口

應用程序接口是引擎與應用程序之間進行交互的接口。當定義報表算法時,有部分功能不能在策略引擎實現或已經存在的系統,引擎通過調用外部的應用程序執行算法的實現,從而集成企業的外部應用程序。

引擎調用外部應用程序時,首先建立與外部應用程序的連接,在保持連接的狀態下,通過實際的參數傳入應用程序API中,由外部應用程序實現算法,並返回計算的結果信息。在運算結束後,引擎再斷開與外部應用程序的連接。

它分爲本地過程調用、SHELL腳本的調用、遠程執行調用、消息傳遞、事務處理。

本地過程調用:引擎根據定義的接口信息,創建本地連接器並傳入調用的過程名稱及它的實際參數。在本地連接器中,執行本地過程計算並返回計算結果。

SHELL腳本的調用:引擎根據定義的腳本(可以是本地文件或在定義格式中直接寫入的腳本信息,起動腳本運行器;並根據返回的結果再執行下一步驟的運算。

遠程執行調用:引擎根據路由信息,創建遠程連接器並起動遠程連接,再根據遠程連接的參數信息,調用遠程過程計算;遠程過程計算後,返回計算結果信息;再斷開遠程的連接。

消息傳遞:主要是指通過消息服務器,起動消息運算,可以是同步方式或異步方式進行運算。如果同步,創建消息連接後,發送參數信息後,等待消息另一消息的觸發後,再處理返回的結果,再繼續運算;如是異步方式,引擎等待消息返回,就直接執行下一步運算。

事務處理:主要是對整個計算過程中,起動事務管理。在起動事務後,暫存相關參數;當調用結束後,如發生錯誤,恢復被改變的參數;如沒有發生錯誤,繼續執行下一步運算。

(3)管理監視接口

這一部分主要是對用戶權限、引擎日誌、運行情況進行監視,並可以隨時調整引擎的執行步驟、更改用戶的實際權限。同時,在系統日誌的記錄下,分析引擎的執行情況、性能瓶頸等;並根據分析的結果,調整引擎的執行步驟,優化引擎的執行過程。

同時,也包括對引擎的運算過程進行中斷、暫停、恢復等操作。

(4)報表引擎定義接口

報表引擎定義接口,是對報表的整個算法及算法過程的定義。定義之後,可以輸出報表引擎定義的描述文檔。引擎的執行完全是依據這份文檔的內容。

(5)報表格式定義接口

報表格式定義接口,是定義報表的輸出界面的樣式、報表輸出界面與運算最終結果的相互關係。它是一種描述性的語言,只要符合規範,就可以在各個報表生成器中被解釋。

在格式語言中,也規範了輸出參數的描述方式。輸入參數只要符合規範,就可以被報表生成器解釋,並依據報表格式定義中的內容,生成輸入報表頁面。

(6)報表引擎協同接口

報表引擎的協同接口,是對多個報表引擎的一起工作,才能完成的報表運算。如跨地區的報表計算、分佈式的報表計算等。這時,報表引擎分佈在多個地點上,通過Internet連接起來,在定義引擎執行步驟時,設置它的路由信息、進入的報表算法節點信息。

當報表引擎運行時,引擎本身會起動對其他引擎的連接,並保持連接,通過報表引擎的接口,傳入調用的參數,起動外部引擎進行運算;當外部引擎運行完畢後,返回運算結果,再斷開引擎的連接。報表引擎根據返回的結果再繼續運算其他的算法。

在啓動外部的報表引擎時,有兩種起動方式:異步與同步。

異步:是指啓動外部引擎後,不等外部引擎運行完畢,就繼續執行下一個報表算法的運算。

同步:是指啓動外部引擎後,暫停報表引擎的運行,一直到外部引擎執行完畢並返回後,再執行下一步驟的運算。

(7)策略引擎接口

策略引擎的接口,也是比較重要的一個環節,它分離了運行與計算之間的耦合關係;從而可以彼此獨立的進行設計與實現。只要根據規範的定義,就可以透明的相互協作。

當引擎執行運行時,由引擎起動策略引擎並保持它的連接;然後傳入計算的算法及相應的參數信息。策略引擎根據輸入的算法表達式及參數進行運算,再返回運算後的結果信息。

報表引擎定義語言

編輯

報表引擎定義語言是整個系統的基礎,它負責定義整個報表算法的報表過程,相關數據、被調用的應用程序等。只有定義了報表算法的報表過程後,報表引擎才能根據它的內容起動運算。

每一個報表定義格式中由包組成,在包中包括了報表的過程、應用程序或過程、語句描述、相關數據。 它包容了整個報表引擎的元素定義、引用參數、實現方法、運算策略等。

它分爲包結構、報表過程、應用程序、相關數據、轉移信息、算法、算法集、數據操作集等。

下面首先介紹定義格式的通用結構,它包括擴展屬性、形式參數、外部參考。

報表引擎通用結構

5.1.1 擴展屬性(extended attribute)

元素名

基本類型

描述

Name

String

標識擴展

Value

String

擴展屬性值

5.1.2 形式參數(format parameter)

元素名

基本類型

描述

DataType

String

形式參數的數據類型

Description

String

形式參數的文本描述

Id

String

形式參數的標識ID

Index

String

形式參數的索引號

Mode

String

形式參數的輸入/輸出模式(IN、OUT、INOUT)

5.1.3 外部參考(external reference)

元素名

基本類型

描述

Location

String

指明類型文檔的URI

Namespace

String

實體定義的有效範圍

Xref

String

對在外部文檔中的實體進行標識

5.1.4 例子

針對上述的結構,下面用幾個例子來進行更清晰的說明。

擴展屬性:

<ExternalAttributes>

<ExtendedAttribute Name="SystemActivity" Value="WebService"/>

<ExtendedAttribute Name="System" Value="Service"/>

</ExternalAttributes>

形式參數

<FormalParameters>

<FormalParameter Id="creditStatus" Index="1" Mode="IN">

<DataType>

<BasicType Type="STRING"/>

</DataType>

</FormalParameter>

<FormalParameter Id="orderStatus" Index="2" Mode="OUT">

<DataType>

<DeclaredType Id="OrderStatus"/>

</DataType>

</FormalParameter>

</FormalParameters>

外部參考

<FormalParameter Id="orderType" Index="1" Mode="IN">

<DataType>

<ExternalReference location="http://orderschema.xsd"

xref="orderType"

namespace="orderschema/Order"/>

</DataType>

</FormalParameter>

報表引擎包結構

包結構是報表引擎定義格式的容器,它包括了報表過程、引用的包、應用程序、相關數據、語句集等。

在包的結構中,存在着對其他包的引用,當一個算法要起動另一個包中的報表過程時,使用命名空間指定相應的包中的報表過程;包對包的引用是相互的,也就是存在相互的參照。

在包的結構中,包含着應用程序的定義、報表過程的定義、語句集的定義、相關數據的定義,以及報表頭結構的定義。這些定義是全局性的定義,在過程定義中的算法定義中可以引用它的ID進行引用。

下面對各個元素的元素進行描述,使讀者更清晰地瞭解報表引擎的過程定義語言的格式及內容。

報表包(report package)

元素名

基本類型

描述

Applications

Application

應用程序聲明列表

DataFields

DataField

報表引擎相關數據定義

ExtendedAttributes

ExtendedAttribute

報表包自定義的屬性,由開發者定義並解釋。

ExternalReferences

ExternalReference

包的外部參考定義

Id

String

包的標識ID

Name

String

包的名字

PackageHeader

PackageHeader

包頭的詳細信息

RedefineHeader

RedefineHeader

包和算法過程的相關信息

Type Declarations

TypeDeclaration

數據類型定義說明

ReportProcesses

ReportProcess

算法過程的定義列表

Participants

Participant

工作流參與者的資源列表

Statements

Statement

定義報表的運算策略,可以定義SQL語句(使用JDBC)、HSQL語句(使用Hibernate)或面向對象的SQL語句(如數據庫支持,直接使用。否則實現解釋)

報表包頭(package header)

元素名

基本類型

描述

Version

String

報表的規範版本信息

Vendor

String

報定義的由來,包括開發者名稱、產品名稱以及產品的發佈版本號等

Created

String

報表定義的創建日期

Description

String

報表的文本描述

Documentation

String

操作系統的路徑,幫助文件以及描述文件的文件名

PriorityUnit

String

用戶自定義語義的字符串

Cost Unit

String

模擬數據使用單元

可重定義包頭(redefindable header)

元素名

基本類型

描述

Author

String

包定義的作者

Version

String

包定義的版本

Code page

String

正文部分的頁碼

CountryKey

String

國家代碼

包外部思考(external package)

素名

基本類型

描述

href

String

包的ID,對外部包的引用

Extended Attributes

ExtendedAttribute

用戶擴展的屬性,定義用戶自己對外部包的引用原則,以滿足用戶的特殊要求。

例子

針對上述的結構,下面用幾個例子來進行更清晰的說明。

報表包頭

<PackageHeader>

<Version>0.09</Version>

<Vendor>XYZ, Inc</Vendor>

<Created>6/18/2002 5:27:17 PM</Created>

<Description>This is a reportpackage header example.</Description>

</PackageHeader>

可重定義包頭

<RedefinableHeader PublicationStatus="UNDER_TEST">

<Author>kevin</Author>

<Version>1.0</Version>

<Codepage>1</Codepage>

<Countrykey>china</Countrykey>

</RedefinableHeader>

包外部參考

<ExternalPackages>

<ExternalPackage href="ss.xml"/>

</ExternalPackages>

報表控件

報表引擎處於每種 Business Objects 報表解決方案的核心。它處理所有用戶請求,並輸出報表信息。

各個解決方案同時處理用戶請求的最大吞吐量各不相同。在某些解決方案中,它是由結構設計或授權限制設置的。

報表引擎使用報表定義文件 (.rpt) 作爲模板。然後,它從數據源獲取數據並使用報表定義呈現當前請求的報表,之後該報表將傳遞給報表查看器。從查看器接收到的信息或使用接口 SDK 編寫的代碼會觸發報表引擎執行進一步的處理,即對報表執行進一步的操作。

報表控件就是這樣利用報表引擎工作的。

發佈了19 篇原創文章 · 獲贊 43 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章