專利名稱:自述商務對象的制作方法
技術領域:
本發(fā)明涉及數字計算機的數據處理,特別涉及自述商務對象。
后端的數據能夠使用關系數據庫術語(relational database terminology)來表示。在關系數據庫術語中,實體(entity)是記錄,并且實體類型(entitytype)是一組具有共同屬性的實體,而一個唯一的名稱和一個唯一的描述被指派給所述實體類型。典型地,數據庫具有多個二維表,其中每個表表示一種實體類型,而每個表的每一行表示一個實體。屬性(attribute)是對實體或實體類型的特性的描述。典型地,屬性被規(guī)定在數據庫的字段(rield)或列中。實體類型還可以具有能夠鏈接(link)一個實體類型的一個或多個實體和另一個實體類型的其它實體的關系。這個鏈接可以使用外來關鍵字(foreignkey)、通過將一個表中的一個或多個字段指向(pointing to)第二個表的主關鍵字來建立(done)。這使得從一個表中的一組實體遍歷(traversing)到另一個表中的相關實體。
發(fā)明內容
在一個方面,本發(fā)明的特征在于一種方法,其包括在儲存庫(repository)中表示來自服務器的服務,所述服務包括使用一組對集合中的數據元素的操作來與一個或多個集合的數據元素交互,所述儲存庫包括集合的描述和每個集合的共同屬性,所述儲存庫根據元模型來組織。所述方法還包括使軟件實體請求在儲存庫中表示的服務,所述服務表示對來自多個集合的第一集合中的一個或多個數據元素的第一操作,并執(zhí)行對第一集合中的一個或多個數據元素的第一操作。
實施例可以包括一個或多個以下特征。儲存庫還包括對來自多個集合的一個集合的數據元素的特殊動作的描述。特殊動作的描述包括特殊動作的名稱、特殊動作的輸入數據的數據結構的名稱、以及數據元素的集合的名稱。該組操作(the set ofoperations)對應服務供應商類別的方法,在一些情況下,該組操作包括選擇、刪除、按照關系選擇、以及更新操作。儲存庫還包括在數據元素的集合對之間的關系的描述。第一集合具有與數據元素的第二集合的關系,關系的描述被存儲在儲存庫中,并且所述關系使得軟件實體通過指定第一集合的數據元素來請求檢索第二集合的數據元素。所述儲存庫是數據庫。
執(zhí)行第一操作包括從記憶裝置(memory storage)讀取第一集合的數據元素的一個或多個屬性,并發(fā)送屬性到軟件實體。在一些情況下,執(zhí)行第一操作還包括計算數據元素集合的一個或多個屬性,并發(fā)送屬性到軟件實體。集合的描述和集合的共同屬性包括集合的名稱和定義屬性的數據結構的描述。
第一操作是查詢,并且執(zhí)行第一操作還包括在第一集合內搜索單個(individual)數據元素,并返回表示單個數據元素的關鍵字。在一些情況下,儲存庫包括查詢的定義,包括查詢的搜索參數結構和定義用于從數據集合中過濾一個或多個數據的關鍵字的輸入名稱。
實施例還可以包括使得軟件實體請求表示在儲存庫中的服務,所述服務表示對來自多個集合的第二集合中的一個或多個數據元素的第一操作,并執(zhí)行對第二集合中的一個或多個數據元素的第一操作。
在另一個方面,本發(fā)明的特征在于一種系統(tǒng),其包括第一計算機,配置來執(zhí)行客戶程序;第二計算機,配置來執(zhí)行服務器程序;和網絡,鏈接第一和第二計算機,以致服務器程序被配置來執(zhí)行以下操作。在儲存庫中表示來自服務器的程序,所述服務包括使用一組對集合中的數據元素的操作來與一個或多個集合的數據元素交互,所述儲存庫包括集合的描述和每個集合的共同屬性,所述儲存庫根據元模型來組織。使得客戶程序請求表示在儲存庫中的服務,所述服務表示對來自多個集合的第一集合中的一個或多個數據元素的第一操作,并執(zhí)行對第一集合中的一個或多個數據元素的第一操作。
實施例可以包括一個或多個以下特征。儲存庫還包括對來自多個集合的一個集合的數據元素的特殊動作的描述。在一些情況下,特殊動作的描述包括特殊動作的名稱、特殊動作的輸入數據的數據結構的名稱、以及數據元素的集合的名稱。該組操作對應服務供應商類別的方法。在一些情況下,該組操作包括選擇、刪除、按照關系選擇、以及更新操作。
實施例可以包括一個或多個以下特征。儲存庫還包括在數據元素的集合對之間的關系的描述。第一集合具有與數據元素的第二集合的關系,該關系的描述被存儲在儲存庫中,并且所述關系使得客戶程序通過指定第一集合的數據元素來請求檢索第二集合的數據元素。所述儲存庫是數據庫。執(zhí)行第一操作包括從記憶裝置讀取第一集合的數據元素的一個或多個屬性,并發(fā)送屬性到客戶程序。在一些情況下,執(zhí)行第一操作還包括計算數據元素集合的一個或多個屬性,并發(fā)送屬性到軟件實體。
實施例可以包括一個或多個以下特征。集合的描述和集合的共同屬性包括集合的名稱和定義屬性的數據結構的描述。第一操作是查詢,并且執(zhí)行第一操作還包括在第一集合內搜索單個數據元素,并返回表示單個數據元素的關鍵字。在一些情況下,儲存庫包括查詢的定義,其包括查詢的搜索參數結構和定義用于從數據集合中過濾一個或多個數據的關鍵字的輸入名稱。所述系統(tǒng)還包括使得客戶程序請求表示在儲存庫中的服務,所述服務表示對來自多個集合的第二集合中的一個或多個數據元素的第一操作,并執(zhí)行對第二集合中的一個或多個數據元素的第一操作。
這些以及其它實施例具有一個或多個以下優(yōu)點。服務供應商和服務客戶具有獨立的軟件生命周期。由基于服務的軟件體系結構提供的服務可以被重新用于不同的情形。軟件體系結構中的普通引擎可以為新的應用組合服務本發(fā)明的一個或多個實施方式的細節(jié)將在下面附圖和說明書中描述。通過說明書、附圖和權利要求書,本發(fā)明的其它特征和優(yōu)點將更加清楚。
圖1是商務軟件應用的示例邏輯表示的框圖。
圖2是商務軟件應用的網絡配置的視圖。
圖3是圖1的商務軟件應用的框圖。
圖4是元模型儲存庫的結構的統(tǒng)一建模語言(Unified ModelingLanguage,UML)表示。
圖5是商務處理的流程圖。
圖6是表示在商務軟件應用的不同方面之間的關系的圖。
具體實施例方式
圖1說明了商務軟件體系結構2的概覽的邏輯表示,其包括客戶3、分離層(separation layer)5、儲存庫7和后端數據9和9′??蛻?提供用戶界面(UI),其使得用戶能夠與后端數據9和/或9′交互(interact)。后端數據9和9′可以與不同的后端應用相關聯(lián),和/或具有相互不同的安排和格式。分離層5將客戶3提供的前端用戶界面與后端數據9和9′分離開。這種分離使得客戶3能夠以一致和相似的方式與后端數據9和9′交互,而不管在后端數據9和9′之間的與格式或與應用相關聯(lián)的不同。換句話說,分離層5給后端數據9和9′提供了一個規(guī)范的接口,所以客戶3被配置與分離層5交互,并且只有在分離層5改變時才需要進行更新。對后端數據9和9′的改變并不會必然地導致對客戶3的更新。而且,分離層5是可以伸縮的(scalable),并被配置成處理后端數據9和9′、任何其它異類的(disparate)后端數據、以及同樣連接到分離層5的后端服務的改變和增長。
如在下面更具體描述的,分離層5基于一種元模型(meta model),其定義了后端數據(例如,9和9′)如何被表示在分離層5中。元數據被存儲在儲存庫7中,其描述了后端數據9和9′如何適應于元模型表示。客戶3利用由分離層5定義的普通命令集(generic command set)與后端數據9和9′交互。如下面更具體地描述的,分離層5使用儲存庫7中的元數據訪問服務供應商,以便實現(effect)所請求的對后端數據9和9′的處理(manipulation),其中所述服務供應商執(zhí)行來自客戶3的普通命令。服務供應商是可配置的,以便對不同的后端數據9和9′可以使用不同的服務供應商。分離層5包括一個接口(例如,服務管理器),其隱藏了相應的后端數據9和9′的特性以及實施(即,服務供應商)的均勻度(granularity)和分布。
圖2說明了商務軟件體系結構2的示例實施。如圖2所示,商務軟件體系結構2包括第一計算機4和第二計算機6。計算機4和6的每一個都包括處理器、隨機存取存儲器(RAM)、程序存儲器(例如,如閃速只讀存儲器(ROM)的可寫ROM)、硬盤驅動器控制器、視頻控制器、以及由處理器(CPU)總線耦合的輸入/輸出(I/O)控制器。例如,計算機4和6可以在ROM中被預編程,或者計算機4和6可以通過將程序從另一個來源(例如,從軟盤、CD-ROM、或另一臺計算機)載入到RAM中用于被處理器執(zhí)行來進行編程(以及重新編程)。硬盤驅動控制器被耦合到硬盤,所述硬盤適于存儲可執(zhí)行的計算機程序,包括具體實現本發(fā)明的程序以及數據。I/O控制器被I/O總線耦合到I/O接口。I/O接口通過通信鏈路以模擬或數字形式接收和傳輸數據,例如,通過串行鏈路、局域網、無線鏈路、或并行鏈路。I/O總線還耦合了顯示器和鍵盤?;蛘撸蛛x的連接(分離的總線)可以被用于I/O接口、顯示器和鍵盤。
網絡20連接計算機4和6。網絡20是任何形式或介質的數字數據通信,例如,通信網絡。通信網絡20的例子包括局域網(“LAN”)和廣域網(“WAN”),例如,因特網。
計算機4執(zhí)行前端應用程序12的指令。應用程序12表示商務軟件體系結構2的前端構件。在計算機6上運行的服務管理器16是在前端應用程序12和一組后端服務供應商26之間的服務層。服務管理器16給前端應用程序12提供服務接口,以啟動與在計算機6上運行的后端服務供應商26集的間接交互。這個服務接口允許對于前端應用程序12和后端服務供應商26集的軟件開發(fā)的部分分離。
計算機6包括數據存儲設備22,其存儲后端數據庫24,而后端數據庫24包含能夠被后端服務供應商26集使用的數據。計算機6還包括數據存儲設備8,其包含信息儲存庫18,其定義和描述了由后端服務供應商26集提供的服務。儲存庫18中的元數據根據元模型來進行組織。
一般,元模型是作為用來描述特定領域(domain)的詞匯(vocabulary)的“概念(concept)”的集合。典型的,元模型根據嚴格規(guī)則集(rule set)來建立,所述嚴格規(guī)則集在大多數情況下是從實體關系屬性或面向對象的建模導出的。前端應用程序12可以經由服務管理器16訪問(以及根據該嚴格規(guī)則集來解釋)儲存庫18的內容。這些服務支持應用程序12的功能,并且除了修改所存儲的數據以外還包括檢索和讀取數據。服務供應商26能夠訪問或修改在后端數據庫24中存儲的數據,以便向前端應用程序12提供服務。當接收到來自前端應用程序12的請求時,為了提供服務,后端服務供應商26集或者訪問或修改在后端數據庫24中存儲的數據,或者計算新的數據。
儲存庫18定義用于請求由后端服務供應商26集提供的服務的句法,在語義上描述所述服務。前端應用程序12執(zhí)行時,前端應用程序12可以使用來自儲存庫18的這種句法和語義說明(通過服務管理器16訪問)來確定什么服務前端應用程序12能夠使用以滿足其需要。用于存儲的或計算的后端數據的這種句法和語義說明可以被稱為“元數據”。這種存儲的或計算的后端數據概念上使用面向對象的術語按照商務對象(business object)來組織,其中每個商務對象是類別或數據實體類型的一個實例。在一個例子中,一個類別的商務對象參考(refer to)關系數據庫表,其中表中的每行數據表示一個特定商務對象的數據。在這個例子中,表中的每個字段表示商務對象類別的一個屬性。在另一個例子中,存在一種類別的商務對象,其部分地參考關系數據庫表,這樣表中的一些字段表示商務對象的屬性,而其它字段在請求時計算。
在商務軟件體系結構2中,提供給前端應用程序12的服務焦點在于(focus on)在于數據(即,以數據為中心(data-centric)),所以儲存庫18中的這些服務的描述也是以數據為中心的。因此,儲存庫18中的元數據圍繞著對這些商務對象的類別的表現來構建。這種元數據包括方面(aspects)、或這些商務對象類別表現的描述、以及對這些方面的可能操作的描述,諸如選擇、插入、更新、刪除、按照關系選擇、以及更新服務供應商26提供的字段。這些方面的每個描述包括數據屬性,以及可以請求的、由服務供應商26集對這些方面的實例執(zhí)行的動作(actions)。
數據的分類、數據類別之間的關系、訪問數據的預建查詢(pre-builtqueries)、以及其它由后端服務供應商26集提供的數據的描述都由儲存庫18來表現。這種由后端服務供應商26集提供的數據(例如,存儲在后端數據庫24中)的表現或元數據描述了后端數據庫24中的不同的抽象類型或類別的數據,以及這些同步數據類別如何相互關聯(lián)。對象是這些不同抽象類型的實例。元數據是關于數據而不是數據內容的信息。元數據還定義了可以對數據庫24中的數據執(zhí)行的一組預建查詢。
儲存庫18中的語義說明能夠使前端應用程序12確定從服務管理器16請求哪些服務。這些服務通常采用請求數據的形式來顯示。前端應用程序12讀取儲存庫18中的元數據,并且能夠靈活地請求以元數據所指定的不同方式組織的數據。例如,具有兩個不同儲存庫18的兩個服務管理器16處理確定公司A和B的書價的服務。對于A和B,書價用具有不同數據字段的不同方面來表現。前端應用程序12讀取A的儲存庫18,以獲得關于對來自A的服務供應商26的特定書籍的數據描述(包括價格)。前端應用程序12讀取B的儲存器18,以獲得關于對來自B的服務供應商26的特定書籍的數據描述(包括價格)。前端應用程序12能夠請求和顯示來自A的服務供應商26的信息,并且該信息是與來自B的服務供應商26的信息不同的方式組織的,以展示書價信息給用戶。
對于請求儲存庫18中的語義說明所描述的服務,服務管理器16給后端商務對象的服務提供了規(guī)范接口。這種規(guī)范接口包括一組對商務對象的標準操作。這樣的對商務對象的標準操作包括選擇、插入、更新、刪除、按照關系選擇、以及更新字段。這些標準操作是為了容易理解和使用。這些標準操作的使用通過儲存庫18的元模型的嚴格規(guī)則集來理解。而且,儲存庫18還包括對操作使用的副作用的有記錄的建模(documented modeling)。存儲商務對象的操作模型的副作用受到執(zhí)行所述方法的影響。例如,“刪除”通常對與被刪除對象有關的其它存儲的商務對象有副作用。其它標準操作執(zhí)行更多特殊任務,并支持在前端應用程序12和服務管理器16之間的交易功能(例如,鎖定操作)。
服務管理器16提供的規(guī)范接口還包括為特定類別的商務對象定義的特殊動作,以及針對商務對象類別群集定義的查詢。所述群集被作為元數據中的服務模塊(以下將更具體地描述)建模。這些動作和查詢也被定義在儲存庫18的元數據中。
在執(zhí)行期間,前端應用程序12發(fā)出服務請求給服務管理器16,服務管理器16檢查所述請求與儲存庫18中元數據的一致性,然后服務管理器16根據儲存庫數據庫18中的元數據將所述請求傳給后端服務供應商26。由于后端服務供應商26和數據庫24符合儲存庫18中的元數據的定義和描述,后端服務供應商26集以及數據庫24中的數據的實施方式獨立于應用12。數據庫24可以是關系數據庫。然而,數據庫24可以被修改以使用除關系數據庫以外的不同形式的數據組織(data organization),并且如果后端服務供應商26和數據庫24仍然符合儲存庫18中的元數據,則前端應用程序12就不需要被修改。一個這樣的不同模式的數據庫24的數據結構可以是面向對象的數據庫。
前端應用程序12提供顯示在監(jiān)視器10上的用戶界面。前端應用程序12提供應用代碼以顯示和集合從后端服務供應商26集接收的數據。前端應用程序12經由服務管理器16產生請求給后端服務供應商26集,用于除了更多的特殊操作以外的標準操作,諸如選擇、插入、更新、刪除、和執(zhí)行,。前端應用程序12是以交互為中心的,焦點在于集合后端服務供應商26的數據以及將交互(interactive)步驟組合為屏幕和聯(lián)合企業(yè)的屏幕元素(syndicated screenelements)的流程。
前端應用程序12包含面向用戶界面(UI)的應用的屏幕流程(screen-flow)邏輯,并且前端應用程序12將UI綁定到儲存庫18的元數據。前端應用程序12可以通過儲存庫18中的元數據的服務描述被后端服務供應商26間接綁定到特定后端服務集。前端應用程序12還可以由各種普通的以交互為中心的前端層(front-end layers)來形成,這些前端層只通過配置被服務管理器16綁定到到高度標準化的服務層,所述服務管理器16擔當到后端服務供應商26的中介。
在一些實施方式中,服務管理器代理14為前端應用程序12給出了對由服務管理器16提供的服務接口的緩沖的訪問。服務管理器代理14是計算機4上的服務器,其作為在前端應用程序12和服務管理器16之間的中介,以便商務軟件體系結構2能夠保證安全性、管理控制、和高速緩存服務。服務管理器16提供隊列功能,這被前端應用程序12用來將若干服務請求或命令(導致服務方法)捆扎(bundle)為單一的服務方法隊列,以便節(jié)省往返周期(round trip)。服務管理器代理14允許前端應用程序12和服務管理器16分開在不同的計算機4和6上。而且,服務管理器代理14的使用可以允許服務管理器16和后端服務供應商26集分布在多臺計算機上。
在一個例子中,服務管理器代理14利用SOAP(簡單對象訪問協(xié)議,Simple ObjectAccess Protocol)通過網絡20與服務管理器16進行通信。SOAP是一種用于使運行在一種類型的操作系統(tǒng)(諸如可從華盛頓州雷蒙德的微軟公司得到的WindowsXP操作系統(tǒng))中的程序與相同或其它類型的操作系統(tǒng)(諸如Linux)中的程序進行通信的方式,其利用了萬維網的超文本傳輸協(xié)議(HTTP)和可擴展標記語言(XML)作為信息交換的機制。由于安裝了網絡協(xié)議,并且它們可以被所有主要操作系統(tǒng)平臺使用,HTTP和XML就為針對網絡中運行在不同操作系統(tǒng)上的程序如何進行相互通信的問題提供了一個解決方案。SOAP準確地規(guī)定了如何編碼HTTP消息頭和XML文件,以便在一臺計算機中的程序能夠調用(call)和傳送信息給另一臺計算機中的程序。SOAP還規(guī)定了被調用的程序如何返回一個響應。
如圖3所示,服務管理器16為前端應用程序12提供了一個接口(由儲存庫18中的元數據定義),其隱藏了來自后端服務供應商26集的相應后端服務供應商和數據庫24中的數據的特性。前端應用程序12利用這個接口從后端數據庫24檢索數據以顯示在圖形用戶界面(GUI)28中用于與用戶交互。
服務管理器16通過接收和執(zhí)行來自前端應用程序12的對后端服務供應商26的請求來為前端應用程序12提供所述接口。在每次服務管理器16接收到請求之后,服務管理器16將該請求委派給服務供應商30、32、34、40、42、44和46。服務供應商30是軟件類別儲存庫服務供應商的一個實例。服務供應商32、34、40、42、44和46表示軟件類別的實例,諸如查詢服務供應商類別(32)、方面(aspect)服務供應商類別(34)、交易服務供應商類別(40)、鎖定服務供應商類別(42)、動作服務供應商類別(44)、和查詢關系服務供應商類別(46)。服務供應商32、34、40、42、44和46的軟件類別可被實施成由ABAP類別庫維護的ABAP全局類別(global class),所述類別庫使用可從德國Walldorf的SAP公司得到的ABAP開發(fā)環(huán)境。它們也可以由在任何其它平臺上的任何其它編程語言來實現,例如,Linux平臺的Java或Windows平臺的C#。
儲存庫服務供應商30處理請求以取得(get)或修改來自儲存庫18的元數據。查詢服務供應商32處理來自前端應用程序12的、對于后端數據庫24中的數據的查詢。方面服務供應商34處理訪問和修改數據、根據關系導航、以及調用動作。方面服務供應商34具有對應可以從服務管理者16請求的方面的標準操作的標準方法集。這些標準操作包括選擇、插入、更新、刪除、按照關系選擇、以及更新字段。交易服務供應商40允許商務邏輯(businesslogic)作用在前端應用程序12和服務供應商26之間的交易的不同狀態(tài)。鎖定服務供應商42使能后端數據庫24中的數據類型的并行訪問的分離。動作服務供應商44使能對方面的動作的執(zhí)行。查詢關系服務供應商46是關系的目標方面的接口。在一些例子中,服務管理器16可以具有用于表現服務的儲存庫18中的不同元素的多個不同的服務供應商實例32、34、40、42、44和46。當接收到對于由儲存庫18中的元素所表示的服務的請求時,服務管理器16可以在儲存庫18中元素的元數據中查找服務供應商的名稱(例如,32、34、40、42、44和46)。例如,描述儲存庫18中的方面的元數據定義了哪個方面服務供應商34被指派來處理用于所述方面的服務。服務管理器16使用元數據中的這個信息將請求從前端應用程序12指向適當的方面服務供應商34。類似地,描述儲存庫18中的查詢的元數據定義了哪個查詢服務供應商32被指派來處理用于所述查詢的服務。
服務管理器16提供的接口向前端應用程序12提供請求或命令。如前所述,標準命令的選擇、插入、更新、刪除、按照關系選擇、以及更新字段是對于儲存庫18中方面的標準操作。這些標準操作由方面服務供應商34提供,并對應一些前端應用程序12可用的請求或命令?!斑x擇”命令提供了一種能力,以便如果知道了由方面服務供應商34提供的數據類型(例如,存儲在數據庫24中)的實例的標識符(或關鍵字),前端應用程序12可以選擇并讀取這些實例的屬性。“插入”命令允許前端應用程序12添加方面服務供應商34提供的數據類型(例如,存儲器數據庫24中)的新的實例。“按照關系選擇”命令提供了一種能力,以便如果知道數據類型,前端應用程序12可以如儲存庫18中所定義的、找出與這個數據類型有關的其它數據類型?!案隆泵钐峁┝艘环N能力,以便修改由方面服務供應商34提供的數據類型(例如,存儲在后端數據庫24中)的實例?!皠h除”命令提供了一種功能,以便刪除由方面服務供應商34提供的一種或多種數據類型(例如,存儲在后端數據庫24中)的一個或多個選擇的實例。
“執(zhí)行”動作命令提供了一種功能,以便對由方面服務供應商34提供的一種或多種數據類型(例如,存儲在數據庫24中)的一個或多個實例執(zhí)行語義定義的動作。或者所述方面服務供應商34,或者所述動作服務供應商44執(zhí)行所述執(zhí)行動作命令?!安樵?query)”命令提供一種能力,以便搜索和找到感興趣的特定數據。查詢命令是一種方法,具有固定的搜索參數集以及具有定義的結構的結果集合。查詢是針對特定服務模塊、或儲存庫18的元數據中的方面群集來定義的。查詢服務供應商32執(zhí)行查詢命令。
儲存庫18中的元數據被分類為數據類型或類別。表現儲存庫18中的數據類型分類的元模型類別的名稱具有后綴“描述符”,以表達它們屬于所述元模型,以及將它們與服務管理器16使用的運行時間類別相區(qū)分。儲存庫18的元數據類別的描述符以及它們的類別關系在圖4中使用統(tǒng)一建模語言(UML)類圖50來說明。
比較元數據與由關系數據庫術語所描述的數據,儲存庫18中的方面可以表現完全或部分地存儲在后端數據庫24中的類別或實體類型,并且方面描述符56除了關于實體類型的其它信息以外還包括實體類型的屬性。儲存庫18中的元數據還可以包括關系描述符84,其將可以在數據庫24中實施的方面之間的關系定義為利用關系數據庫中的外鍵碼的關系。元數據還可以包括服務模塊描述符54,其表示方面集合的服務模塊和具有預先確定的查詢用于訪問數據庫24中的數據。
儲存庫18中定義的服務模塊是用于特定應用領域或產業(yè)的商務軟件體系結構的應用集的構建塊(例如前端應用程序12)。服務模塊對實施和商務邏輯進行封裝并用一種統(tǒng)一的規(guī)范方法來提供對數據和功能性的訪問。用于儲存庫18中的服務模塊的例子是“商務伙伴”、“雇員”、“銷售訂單”或“商務活動”。服務模塊描述54描述存儲庫18中的元數據的數據模型中的服務模塊以及如何通過來自應用程序12的查詢來訪問服務模塊。
在儲存庫18中,每個定義的查詢都是一個入口點,以經由服務管理器16搜索由服務供應商26提供的數據類型實例(由方面來表示)?!瓣P鍵字(key)”是服務供應商26提供的數據類型的實例的標識符?!皠幼?action)”是關于方面的一個或多個實例的特殊方法?!敖Y構(structure)”是表現方面的數據的屬性的集合?!瓣P系”是源和目標方面的對象之間的關系。服務模塊組與服務模塊相關聯(lián),并且是方面、關系、和查詢的集合。方面組與方面相關聯(lián),并且是關系、方面動作、和字段描述符86的集合。儲存庫18中的元數據還包括對每個包括在可用后端(例如,后端數據庫24)中的方面、查詢、關鍵字、動作、結構、關系、服務模塊組、以及方面組的文字描述。所以,儲存庫18中的元數據的組織可以用那些數據類型(例如,方面、查詢、關鍵字、動作、結構、關系、服務模塊組、以及方面組)來描述。
方面、查詢、關鍵字、以及動作的屬性的數據模型是基于結構描述符74的。在一個例子中,每個方面具有一個結構描述符74,其定義了方面的數據屬性。結構描述符74參考儲存庫18中的數據字典。數據字典是為了程序員以及其他需要參考數據字典的人的利益,對于數據模型中數據對象或項目的描述的收集。結構描述符74可以用XML模式,或者儲存庫18中的一個或多個數據庫表來定義。
在一個例子中,定義在儲存庫18中的結構描述符74包括數據庫表中的扁平(flat)結構。扁平結構為一序列屬性名稱和簡單數值類型的字段描述符86對,所述簡單數值類型諸如實型、整型、字符串、以及布爾(Boolean)。例如,定義二維點的結構描述符74可以為列表{X,real,Y,real},其中X和Y是具有實數值的屬性名稱。
在儲存庫18的另一個例子中,結構描述符74可以包括其它結構描述符74的嵌套和收集。當使用定義較小方面的子結構(sub-structure)的關鍵字不再有意義時,其它結構描述符74或子結構的嵌套使得產生較大的方面是有用的。
對于前端應用程序12通過服務管理器16訪問來自服務供應商26的數據(例如,存儲在后端數據庫24中的數據),商務對象類別的實例被由服務模塊中唯一的關鍵字來識別,例如訂單的數量或產品的ID。為了為服務模塊中的不同方面區(qū)分不同的關鍵字類型,關鍵字描述符64定義了不同類型的關鍵字。關鍵字描述符64與可以包括多于一個數據屬性的結構描述符74相關聯(lián)。在一個例子中,每個關鍵字具有一個字符串屬性。服務模塊可以與不同方面的不同關鍵字描述符64相關聯(lián),例如,一個訂單關鍵字可以具有另一個關鍵字描述符64作為訂單項目關鍵字。
服務模塊描述符54包括對方面描述符56的收集。方面描述符56指的是一個結構描述符74和一個關鍵字描述符64。結構描述符74包括相應關鍵字描述符64的所有關鍵字屬性。關鍵字描述符64是特殊的方面描述符56。關鍵字的關鍵字描述符64屬性參考自身為自引用。在簡單銷售訂單服務模塊中的方面描述符56的例子可以包括訂單、訂單細節(jié)、發(fā)貨地址、收費地址、以及諸如OrderId和訂單項目關鍵字的關鍵字方面的描述符的訂單項目。服務模塊描述符54規(guī)定支持的方面描述符56的收集。多個服務模塊描述符54可以與相同的方面描述符56相關聯(lián)。
方面描述符56相互相關,其由關系描述符84來規(guī)定。關系描述符84有一個源方面描述符56和一個目標方面描述符56。從這個意義上來講,關系描述符84被定向。關系描述符84還具有可選基數(cardinality)(例如,1...n)和范疇(category)。例如,支持的范疇為父輩-子輩或子輩-父輩。
關系描述符84定義在源方面A和目標方面B之間的關系,其意味著能夠從方面A的實例遍歷到方面B的實例。例如,給出方面A和B被在后端數據庫24中實施為關系數據庫表,其意味著從對應方面A的表中的一個或多個字段指向對應方面B的表中的主關鍵字(primary key)。關系描述符84定義了來自源方面A和目標方面B的父輩-子輩關系,這意味著方面B依賴于方面A的存在。例如,給出方面A和B被在后端數據庫24中實施為關系數據庫表,這意味著對應方面B的表中的主關鍵字是從對應方面A的表中導出的。關系描述符84被提出來描述從相同服務模塊中的一個方面到另一個的內部導航,例如,在銷售訂單服務模塊中從訂單到發(fā)貨地址(基數1...1)或到訂單項目(基數1...n)。關系描述符84獨立于服務模塊,并且能夠被不同服務模塊重新使用。對于內部導航或在后端數據庫24中從一個數據類型到另一個的遍歷(traversal),源方面描述符56的可見的(可用的)關系描述符由服務模塊描述符54來定義,其具有一個支持的關系描述符84的列表。對于那些具有目標方面描述符56的關系描述符84可以允許導航,并且所述目標方面描述符56也由服務模塊描述符54支持。
用于訪問以及用于作用于后端數據庫24中的數據類型的操作在操作描述符70中描述。結構描述符74定義了操作描述符70的輸入參數。這個結構描述符70還包括使能海量操作和過濾操作的輸入關鍵字描述符64。海量操作(mass operation)是由前端應用程序12指定的、對后端數據庫24中的數據類型的多個實例的操作。過濾操作利用由輸入關鍵字描述符定義的關鍵字對例如查詢的操作的結果進行過濾。用于操作描述符70的輸入參數是可選的。
這里有三種類型的操作描述符70,即查詢描述符104、方面動作描述符92、和動作描述符96。前述命令查詢和執(zhí)行動作由操作描述符70定義。
查詢描述符104描述了允許對服務模塊中的方面的實例進行搜索的查詢方法。查詢描述符104包括輸入參數、輸入關鍵字描述符64、和結果方面描述符56。輸入參數是定義了查詢的搜索參數結構的結構描述符74。輸入關鍵字描述符64定義了哪些關鍵字可以被用于過濾。例如,執(zhí)行由具有過濾關鍵字的查詢描述符104定義的查詢,得到滿足第一輸入的標準的關鍵字列表。這個關鍵字的列表被輸入關鍵字描述符64的過濾關鍵字集過濾,以便返回一個關鍵字列表的一個子集。查詢描述符104的結果方面描述符56規(guī)定了查詢結果的類型,其可以是與服務模塊相關聯(lián)的任何方面描述符56。
每個服務模塊描述符54具有一組支持的查詢描述符104。服務模塊描述符54不能使用定義在其它服務模塊描述符54中的查詢描述符104,因為查詢描述符104屬于一個服務模塊描述符。
方面以動作的形式提供附加的操作(在選擇、插入、更新、刪除、按照關系選擇、以及更新字段的標準操作以外),其用方面動作描述符92來描述。方面動作描述符92是關于方面的特殊操作描述符70。方面描述符56可以具有一組支持的方面動作描述符92。方面描述符96的輸入參數定義了動作的參數結構。輸入關鍵字描述符64規(guī)定了哪個關鍵字用于海量操作,例如,電子郵件動作可以具有作為輸入的表示多個電子郵件的關鍵字的列表。
動作描述符96能夠定義多個動作的動作,如打印、電子郵件、傳真、批準、清除、剪切、復制、粘貼和取消。但是更多的只能夠用于一個或少數方面的方面特定的動作。動作描述符96被引入以強制執(zhí)行(enforce)重新使用。每個方面動作描述符92都與動作描述符96相關聯(lián),其中定義了名稱和意義(meaning)(原文描述,textual description)。
動作描述符96規(guī)定了動作的名稱和意義(原文描述)。它們不規(guī)定參數,并且不用于描述操作的多形態(tài)行為(polymorphic behavior)。它們可以被用于分類(taxonomies)。
服務模塊組描述符58可以與方面描述符56、關系描述符84、和查詢描述符104相關聯(lián)。方面組描述符78可以與關系描述符84、方面動作描述符92、和字段描述符86相關聯(lián)。
圖50包括在服務模塊描述符54和方面描述符56之間的零或多對零或多的關系52,因為多個方面的實例可以與多個服務模塊的實例相關聯(lián)。服務模塊組描述符58具有對方面描述符56的零或多對零或多的指向關系60,因為方面可以集合(grouped together in)在服務模塊組中。服務模塊組描述符58還具有與服務模塊描述符54的零或多對一的復合集合關系62,因為服務模塊組可以被集合在服務模塊中。作為方面描述符56的特殊化的關鍵字描述符64具有與方面描述符56的繼承關系66。關鍵字描述符64也具有與方面描述符56的一對零或多的關系68,因為每個方面都具有與該方面相關聯(lián)的關鍵字,以唯一地識別所述方面的實例。操作描述符70具有與關鍵字描述符64指向的零或多對零或多的關系72,因為操作可以包括輸入關鍵字。方面描述符56具有與結構描述符74的零或多對一的關系76,因為每個方面描述符56都具有定義其屬性的結構描述符74。方面組描述符78具有與方面描述符56的零或多對一的復合集合(composite aggregation)關系80,因為方面可以是方面組的集合。方面組描述符78還具有與關系描述符84指向的零或多對零或多關系82,因為方面組還具有關系。結構描述符74具有與字段描述符86的一對零或一對多的所有權關系90,因為結構可以使用許多數據字段來定義其自身。方面組描述符78還具有與字段描述符86的零或多對零或多關系88。
方面動作描述符92具有與方面描述符56的零或多對一的集合關系100,因為方面可以提供能夠對方面執(zhí)行的動作。方面動作描述符92具有與其上級類別操作描述符70的繼承關系102。查詢描述符104也具有與其上級類別操作描述符70的繼承關系106。服務模塊描述符54具有與查詢描述符104的一對零或一對多關系108。因為服務模塊可以包括零或多個查詢。服務模塊組描述符58具有與查詢描述符104的零或多對零或多的指向關系110,因為查詢還可以集合在服務模塊組中。
操作描述符70具有與結構描述符74的零或多對零或一關系112,因為每個操作包括結構形式的輸入參數。查詢描述符104具有與方面描述符56的零或多對零或一關系114,因為查詢包括結果(resulting)方面。關系描述符84具有與方面描述符56的零或多對一的關系116和118,因為關系具有源和目標方面。
為了說明定義儲存庫18中的元數據的組織的這些描述符,下面例子使用了一組固定的關系數據庫表。其它持續(xù)機制(例如,XML)也可以被使用。關系數據庫表被定義在表1-6中,其中表1-6中的每一行定義了關系數據庫表的一個字段或列。儲存庫18的主數據類型是方面。描述方面的數據庫表是表1,SCOL_ASPECT和表2,SCOL_ASP_ACTION。表1包括方面的性質描述。表1,SCOL_ASPECT的關鍵字字段是ASPECT_NAME字段,因為方面的名稱對于方面是唯一的。ASPECT_CATEGORY字段指示方面是非關鍵字(non-key)方面還是關鍵字方面。STRUCTURE字段指示方面的數據屬性的數據結構名稱。通過將關鍵字的名稱放在KEY_ASPECT字段將關鍵字與方面相關聯(lián)。SERVICE_PROVIDER字段定義了方面的方面服務供應商34。TRANSAC_PROVIDER字段定義了方面的交易服務供應商40。LOCKING_PROVIDER字段定義了方面的鎖定服務供應商42。儲存器18還可以具有相應的用于方面描述的表。
表1,SCOL_ASPECT定義
方面可以提供能夠對方面執(zhí)行的動作。動作的描述存儲在表2,SCOL_ASP_ACTION中。動作被用方面名稱和動作名稱來唯一地表示,因此ASPECT_NAME和ACTION_NAME字段是SCOL_ASP_ACTION表的關鍵字字段。字段PARAM_STRUCTURE指的是保存動作的輸入數據參數的數據結構。字段INPUT_KEY_ASPECT指的是定義了關鍵字類型的關鍵字方面的名稱,所述關鍵字類型用于指派在動作時儲存庫18中的哪些數據類型實例被作用。字段PROVIDER_CLASS指的是動作服務供應商的名稱,其從實施在ASPECT_NAME字段命名的方面的服務供應商提供動作。
表2,SCOL_ASP_ACTION定義
方面可以互相相關。方面之間的關系的描述被存儲在表3,SCOL_RELATION中。關系用其名稱來唯一地定義,所以關系表的關鍵字是規(guī)定在字段RELATION_NAME中的關系名稱。對于每個關系,字段SOURCE_ASPECT定義了指向關系的源的方面,字段TARGET_ASPECT定義了指向關系的目標的方面,字段TARGET_PROVIDER定義了目標方面的查詢關系服務供應商,字段REL_PARAM_TYPE定義了關系的類型(父輩-子輩或者子輩-父輩),而字段REL_PARAMETER定義了關系的基數。儲存庫18還具有用于關系的描述的相應的表。
表3,SCOL_RELATION定義
服務模塊的屬性(properties)被存儲在表4,SCOL_SVC_MODULE中。每個服務模塊用其名稱來唯一地定義,所以SVC_MODULE_NAME字段是SCOL_SVC_MODULE表的關鍵字字段。對于每個服務模塊,字段TRANSAC_PROVIDER規(guī)定了服務模塊的交易供應商40的名稱。儲存庫18還具有用于服務模塊的描述的相應的表。
表4,SCOL_SVC_MODULE定義
每個服務模塊都與可以在服務模塊中使用的方面相關聯(lián)。可以在每個服務模塊中使用的方面的名稱被存儲在表5,SCOL_ASPECT_USE中。由于每個方面服務模塊的使用(usage)是唯一地由服務模塊的名稱和方面的名稱來描述的,因此字段SVC_MODULE_NAME和ASPECT_NAME是SCOL_ASPECT_USE表的關鍵字。
表5,SCOL_ASPECT_USE定義
服務模塊可以提供查詢來檢索數據。服務模塊查詢的描述被存儲在下面表6的SCOL_QUERY表中。數據庫表的結構被定義在表6中。由于每個查詢都由服務模塊和查詢名稱來唯一地定義,所以字段SVC_MODUE_NAME和QUERY_NAME是SCOL_QUERY表的關鍵字段。其它字段包括規(guī)定了定義由查詢返回的數據類型的方面名稱的RESULT_ASPECT,和規(guī)定了包含查詢的輸入參數的數據結構的PARAM_STRUCTURE。例如,對與服務模塊相關聯(lián)的特定方面(例如,規(guī)定在RESUT_ASPECT中)進行的查詢包括與特定方面的實例屬性相匹配的輸入參數,并且所述匹配的實例被作為參考那些實例的關鍵字的數據集而返回。字段INPUT_KEY_ASPECT被用于定義描述可以被用作查詢的過濾(filter)關鍵字的關鍵字方面。PROVIDER_CLASS規(guī)定了與每個查詢相關聯(lián)的查詢服務供應商32的名稱。儲存庫18還具有用于查詢的描述的相應的表。
表6,SCOL_QUERY定義
如前所述,體系結構38包括六個服務供應商類別(即,交易40、查詢32、方面34、動作44、查詢關系46、和鎖定42),用于處理來自前端應用程序12的請求,而不是從儲存庫18請求元數據,而這是由儲存庫服務供應商類別30處理的。為了在前端應用程序12請求時提供服務,服務管理器16直接調用服務供應商類別的實例。這些服務供應商的實例可以位于如服務管理器16的同一計算機(例如,6),或位于不同的計算機。
鎖定服務供應商42可以被用于實施普通鎖定管理器,其用于單個方面或一組方面。每個鎖定服務供應商42需要被登記一個方面。鎖定服務供應商42的名稱被設置在SCOL_ASPECT表中每個方面的LOCKING_PROVIDER字段。鎖定服務供應商類別具有可以被服務管理器16調用的兩種方法。這些方法是LOCK和UNLOCK。LOCK將表示要被鎖定的商務對象的關鍵字的集合、表示商務對象的類別的方面的名稱、以及鎖定模式作為輸入。取決于目標系統(tǒng)的鎖定能力可以有各種鎖定模式。鎖定模式可以有“E”、“S”或“SP”?!癊”是指排他的鎖定,或者只有一個客戶能夠獲得該鎖定。“S”是指共享鎖定,任何客戶都能夠鎖定,并且不能由針對一個客戶的排他性鎖定?!癝P”是指與“S”相同,但是能夠隨后升級到排他鎖定。
LOCK方法輸出指示請求是否被拒絕的布爾值,并輸出一個返回代碼。UNLOCK將表示要被解鎖的商務對象的關鍵字的集合,以及表示要被解鎖的商務對象的類別的方面的名稱作為輸入。UNLOCK方法也輸出指示請求是否被拒絕的布爾值,并輸出一個返回代碼。如果交易緩沖器已經處在“骯臟(dirty)”狀態(tài)則拒絕對UNLOCK的調用,即自從上一個CLEANUP調用之后已經發(fā)出了任何更新、插入、刪除操作或者沒有被標記為COL_AFFECTS_NOTHING的動作。如果交易服務供應商類別的CLEANUP方法(下面描述)被以原因“END”調用,則去除所有的鎖定。
交易是一序列信息交換和相關工作(諸如數據庫更新),其被作為為了滿足從前端應用程序12到服務管理器16的請求的目的、以及保證后端數據庫24的完整性的單元來對待。對于要完成的交易以及將要對數據庫24進行的永久改變,交易必須被完整地完成。在交易成功之前,完成交易的所有的步驟,而數據庫實際上被改變來反映所有被請求的變化。如果在交易成功完成之前發(fā)生了什么事情,對后端數據庫24的任何改變都必須被記錄(keep trackof)以便可以撤銷所述改變。
為了處理交易,交易服務供應商40接收對服務管理器16、另一個非交易服務供應商(例如,32、34、44、46)以及前端應用程序12(或者在某些情況下服務管理器代理14)之間的交易的各種狀態(tài)的通知。這些通知是交易服務供應商40的方法BEFORE_SAVE、CLEANUP和SAVE,它們在交易期間被服務管理器16調用。
服務管理器16調用交易服務供應商40的方法BEFORE_SAVE來檢查交易緩沖器是否能被保存。這允許檢查非交易服務供應商的內部狀態(tài)是否準備好被保存。如果不能保存交易緩沖器,則方法BEFORE_SAVE返回假(false),然后交易結束被中斷。因此,BEFORE_SAVE方法具有BOOLEAN返回參數。BEFORE_SAVE將布爾作為輸入參數REJECTED。交易服務供應商16通過將REJECTED參數設置為非初始值(non-initial value),即設置為“真”,來防止隨后的保存和提交操作。方法BEFORE_SAVE在由前端應用程序12的SAVE方法觸發(fā)的服務管理器16的序列操作中被調用。
SAVE方法最后觸發(fā)應用來將交易緩沖器保存到數據庫24。通過調用SAVE,非交易服務供應商的所有內部狀態(tài)都被永久保留,或者通過直接更新,或者通過創(chuàng)建對更新任務的適當調用。如果體系結構38中的所有服務供應商都接收到SAVE請求,則服務管理器16提交所述交易。
CLEANUP方法告知所有非交易服務供應商釋放它們所有的交易緩沖器和基于隊列的(enqueue-based)鎖定。調用CLEANUP方法通知體系結構38中的所有服務供應商都需要清除它們的內部狀態(tài)。CLEANUP將REASON字符串作為輸入參數。REASON字段指示清除操作的原因。這或者可以是由于SAVE操作的“COMMIT”,或者可以是由于系統(tǒng)自動關閉交易的交易“END”。這并不保證在故障情況下清除被調用。
動作服務供應商44被服務管理器16調用以執(zhí)行用于方面的動作。動作服務供應商44的名稱被設置在SCOL_ASP_ACTION表的PROVIDER_CLASS字段對應動作的一行。動作服務供應商44具有一個方法EXECUTE。EXECUTE方法將方面名稱(ASPECT)、指定動作作用于哪個方面的實例的一組關鍵字(INKEYS)、普通輸入參數(INPARAM)、要被執(zhí)行的動作的名稱(ACTION)、作用于關系的動作的一組關鍵字(RELATION_INKEY)、以及關系的名稱(RELATION)作為輸入參數。EXECUTE方法作為輸出參數返回改變的或新創(chuàng)建的對象(OUTRECORDS),其已經被動作改變。OUTRECORDS參數返回的對象被傳輸到應用程序12。
方面服務供應商34被服務管理器16調用以提供讀取和修改一個或多個方面的內容的功能。如前所述,方面用其名稱(該名稱在儲存庫中為全局唯一)、相關聯(lián)的數據結構、相關聯(lián)的關鍵字(即標識符)結構、一組實施的動作、一組輸出(outgoing)的關系、以及一組輸入(incoming)的關系來描述。方面服務供應商34具有方法EXECUTE、SELECT、INSERT、UPDATE、DELETE、SELECT_BY_RELATION、以及UPDATE_FIELDS。
方法EXECUTE被從動作服務供應商44導出,并且允許執(zhí)行動作。EXECUTE將要對其執(zhí)行動作的方面的名稱(ASPECT)、要對其執(zhí)行動作的對象的關鍵字(INKEYS)、動作的參數(INPARAM)、動作的名稱(ACTION)作為輸入參數。返回的參數包括修改或者創(chuàng)建的方面行(aspect rows)(OUTRECORDS)、指示對方法的請求是否被拒絕的布爾標志(REJECTED)、以及返回代碼(RETURN_CODES)。
方法SELECT讀取與給定方面的輸入關鍵字相關聯(lián)的方面數據。SELECT將編碼在相關聯(lián)的關鍵字結構中以描述要讀取的方面行的關鍵字列表(INKEYS)和方面的名稱(ASPECT)作為輸入參數。SELECT將編碼在方面數據結構中的結果(OUTRECORDS)、表示對方法的請求是否被拒絕的布爾標志(REJECTED)、以及返回代碼(RETURN_CODES)作為輸出參數。
方法INSERT將新的數據插入到方面。INSERT包括含有要插入的記錄的表作為輸入參數,如果方面被設計為用于按行(row wise)寫入操作(INRECORDS)。該方法可以允許插入的記錄根據方面描述(例如,參數ExternalKeys=真或假(true or false))也定義關鍵字字段。輸入參數還包括方面的名稱(ASPECT)、用于作用于關系的動作的一組關鍵字(RELATION_INKEY)、以及關系的名稱(RELATION)。方法INSERT返回表示插入的記錄的一組記錄(OUTRECORDS),以及它們的關鍵字和其它可能的方面服務供應商34希望對所插入的記錄進行的修改。例如,一個修改可以填入用于所述記錄集計算的字段。OUTRECORDS行的次序必須對應于INRECORDS行的次序,其它輸出參數包括指示對SELECT方法的請求是否被拒絕的布爾標志(REJECTED)以及返回代碼(RETURN_CODES)。
UPDATE方法或者按記錄(record wise)或者按字段(field wise)更新現有方面的實例。UPDATE方法的輸入參數包括含有要更新的實例關鍵字的表(INRECORDS),如果方面被設計為按行進行寫入操作。輸入參數還包括方面的名稱(ASPECT)。UPDATE方法返回的參數包括更新的紀錄(OUTRECORDS)以及它們的關鍵字和其它可能的服務供應商想要進行的修改。OUTRECORDS行的次序可以對應于INRECORDS行的次序。其它輸出參數包括指示對SELECT方法的請求是否被拒絕的布爾標志(REJECTED)以及返回代碼(RETURN_CODES)。
DELETE方法刪除后端(例如,后端數據庫24)中的方面的行或實例。DELETE方法的輸入參數被編碼在相關聯(lián)的關鍵字結構中用于描述要被刪除的方面行的關鍵字列表(INKEYS),和方面的名稱(ASPECT)。DELETE方法返回的參數包括指示對DELETE方法的請求是否被拒絕的布爾標志(REJECTED)以及返回代碼(RETURN_CODES)。
SELECT_BY_RELATION方法取決于關系參數描述返回或者依照關系的屬性或另一個方面,其中源方面具有指向那個其它方面的關系。SELECT_BY_RELATION的輸入參數是所按照(follow)的關系的名稱(ASPECT)、源方面的記錄(INRECORDS)、源方面的名稱(ASPECT)和描述用于分頁(paging)的查詢的各種選項的結構(OPTIONS)等。SELECT_BY_RELATION返回的輸出參數包括編碼在目標方面數據結構中的結果(OUTRECORDS)、表示OUTRECORDS參數的哪行屬于哪個INRECORDS行的索引表(INDEX)、結果描述(DESCRIPTION)、指示對SELECT_BY_RELATION方法的請求是否被拒絕的布爾標志(REJECTED)、以及返回代碼(RETURN_CODES)。
UPDATE_FIELDS方法更新方面的實例的字段。輸入參數包括編碼在相關聯(lián)的關鍵字結構中以描述要更新的方面的實例的關鍵字列表(INRECORDS)。輸入參數還包括含有一對字段名稱和要在一組記錄中更新的相應值的表(INFIELDS),如果方面被設計為按字段進行寫入操作。如果多于一個方面的實例要被更新,附加的字段索引INKEY指向相關聯(lián)的關鍵字記錄。輸入參數還包括方面的名稱(ASPECT)。UPDATE_FIELDS返回的參數包括創(chuàng)建或改變的方法的實例(OUTRECORDS)以及它們的關鍵字和其它可能的由方面服務供應商34執(zhí)行的修改。各個OUTRECORDS行的索引必須要與INFIELDS表中的行索引相關聯(lián)。其它返回的參數包括指示對UPDATE_FIELD方法的請求是否被拒絕的布爾標志(REJECTED)以及返回代碼(RETURN_CODES)。
查詢服務供應商32執(zhí)行查詢。儲存庫18中的查詢通過字段QUERY_NAME中的查詢名稱、字段PARAM_STRUCTURE中的相關聯(lián)的參數結構、字段RESULT_ASPECT中的相關聯(lián)的結果方面、以及可選的字段INPUT_KEY_ASPECT中具有唯一的數據結構的相關聯(lián)的方面關鍵字而描述在表SCOL_QUERY中。查詢服務供應商32具有一個EXECUTE方法,執(zhí)行對一個或多個方面的查詢。輸入參數包括查詢名稱(QUERY)、含有查詢參數的數據結構(INPARAM)、以及可選的含有應當用來限制查詢的方面行的關鍵字的表類型參數(INKEYS)。INKEYS可以但不是必須包括由EXECUTE方法返回的OUTRECORDS的關鍵字。INKEYS可以是任何關鍵字方面結構。哪種關鍵字結構與查詢相關聯(lián)被規(guī)定在儲存庫18中表SCOL_QUERY的字段INPUT_KEY_ASPECT中??蛇x的,其它可以被規(guī)定的輸入參數包括描述查詢(例如,用于分頁)的各種選項的結構(OPTIONS)和SELECTIONS。
EXECUTE方法返回的參數包括查詢描述(DESCRIPTION)、查詢結果(OUTRECORDS)、以及指示對EXECUTE方法的請求是否被拒絕的布爾標志(REJECTED)。
EXECUTE方法返回由查詢參數規(guī)定的結果。如果INKEYS表參數不是空的,則結果被限制為滿足查詢參數的對象。INKEYS和INPARAM兩者都限制查詢,但是被以不同的方式使用。例如,查詢可以被定義為返回還未被發(fā)送的訂單的列表。在這樣一個例子中,結構INPARAM可以規(guī)定只有姓氏從A到D的客戶的訂單才被返回。INKEYS是所有還沒有被發(fā)送的訂單的表。OUTRECORDS含有所有來自還沒有被發(fā)送的相關客戶(在這種情況下為姓氏為A到D的客戶)的訂單。在一個例子中,OUTRECORDS查詢的結果是一個不連接的(disconnected)方面,也就是所述方面總是只讀的。對這個方面不可以進一步執(zhí)行后端操作。在這個例子中,接收的關鍵字可以被用作選擇使用方面服務供應商34及其例如SELECT方法的其它方面行的參數。
查詢關系服務供應商46對于作為關系目標的方面在服務供應商(例如,方面服務供應商34)中實施一個程序(routine)。查詢關系服務供應商46的方法被從源方面的方面服務供應商34間接地調用,如果關系被標記為SOURCE_KEYS或ATTRIBUTES。
查詢關系服務供應商46具有SELECT_TARGET方法。方法SELECT_TARGET具有以下輸入參數。輸入參數包括源方面的名稱(SOURCE_ASPECT)??蛇x地,該方法還包括定義了到目標方面的SELECT方法的代理接口(TARGET)的輸入參數。規(guī)定TARGET參數允許在不直接知道目標方面的方面服務供應商34的情況下調用目標方面的方面服務供應商34的SELECT方法。這使得查詢關系服務供應商46被添加到服務模塊,而不需要知道目標方面的方面服務供應商34。
SELECT_TARGET方法的另一個輸入參數是關系(RELATION)。另一個輸入參數是描述關系的字段(INPARAMS)的表。為了允許海量選擇,INPARAMS是個每行都描述了單一選擇的表。INDEX參數被用于將INPARAMS結構的各行與OUTRECORDS行相關聯(lián)。另一個可選的輸入參數是描述查詢(例如,用于分頁)的各種選項的結構(OPTIONS)。
SELECT_TARGET方法返回參數,包括以目標方面的結構編碼的結果(OUTRECORDS)、查詢結果描述(DESCRIPTION)、以及到目標方面SELECT方法的代理接口。其它輸出參數包括描述INPARAMS記錄和OUTRECORDS參數之間的關系的索引(INDEX)、指示對SELECT_TARGET方法的請求是否被拒絕的布爾標志(REJECTED)和返回代碼(RETURN_CODES)。
服務供應商32、34、40、42、44和46如上所述使能下列用于體系結構38的交易模式。執(zhí)行方面服務供應商34的方法SELECT,從后端數據庫24讀取或從存儲在后端的交易緩沖器讀取。方面服務供應商34以一致(consistent)方式合并來自數據庫及其交易緩沖器的兩個源的數據,以致合并數據反映了迄今為止在這個交易中的更新。接下來,執(zhí)行方面服務供應商34的UPDATE、INSERT、MODIFY、或DELETE方法建立交易緩沖器。在實際改變交易緩沖器中的數據前,服務管理器16必須獲得對數據的交易鎖定并在鎖定的保護下讀取數據。如前所述,可以用排他、共享、以及共享升級鎖定模式來使用鎖定服務供應商42。鎖定必須伴隨選擇在鎖定保護下的鎖定的功能數據。應用可以通過提供有時戳的或者有版本的數據,并在發(fā)生沖突的情況下在前端合并實際和修改的數據來支持最佳的(optimistic)鎖定。
交易服務供應商40的BEFORE_SAVE方法使得所有參與的服務供應商都宣布了它們是否準備好保存交易緩沖器。交易服務供應商40的SAVE方法最后觸發(fā)服務管理器16來保存交易緩沖器到后端數據庫24。
交易服務供應商40的CLEANUP方法通知所有服務供應商(例如,方面服務供應商34)釋放所有它們的交易緩沖器和基于隊列的鎖定。如果CLEANUP被以原因“END”調用,則所有的鎖定都必須被釋放。如果原因被設為“COMMIT”,則各個服務供應商可以選擇保留其鎖定。方面服務供應商34不得自己內部調用COMMIT_WORK或者ROLLBACK_WORK。服務管理器16通過如果方面服務供應商34試圖提交交易就自動中斷交易來強制執(zhí)行這點。
支持的鎖定方法和鎖定策略如下。使用策略S,許多參與者能獲得共享的鎖定。如果對一個對象獲得的共享的鎖定,則不能獲得排他鎖定或SP鎖定。共享鎖定只能被用于在讀取操作期間達成對較大數據集的一致看法(consistent view)。使用策略E,只能有單個參與者獲得鎖定。使用策略SP(共享升級),許多參與者能夠獲得鎖定。如果存在SP鎖定,排他鎖定只能夠被已經具有對對象的SP鎖定的參與者獲得。只有一個參與者能夠將鎖定升級為排他鎖定。沒有其它在升級之前獲得鎖定的參與者能夠升級到排他,即使第一個參與者釋放了其鎖定。
例子體系結構38(圖3)實施創(chuàng)建新的客戶、經由GUI 28接收一個或多個產品的客戶訂單以及提交訂單給商務處理的簡單的任務。為了支持這個例子,后端數據庫24可以使用根據上述表1-6中的定義設計的關系數據庫來實施,以定義客戶、地址、產品類型、貨籃(basket)、每個訂單產品在貨籃中的位置、以及每個訂單的列表。在表7-12中,關鍵字字段標題被標有一個星號??蛻舯?定義了客戶,并且每個客戶被唯一地用CustomerId字段來識別??蛻舯?還包括名稱(NAME)字段和外鍵碼字段AddressId,其將地址表中的地址鏈接到客戶。
表7,客戶
地址表8定義了地址,包括城鎮(zhèn)和街道。AddressId本身是地址的一個有效的唯一關鍵字,而地址和客戶之間的聯(lián)系通過客戶表7來定義(AddressId字段)。
表8,地址
表9定義了產品,包括名稱和關鍵字ProductId。
表9,產品
表10定義了購物籃,包括客戶和關鍵字BasketId。
表10,貨籃
表11定義了訂單在貨籃中的位置和具有的產品。位置依賴于貨籃和訂單的存在,因此位置的主關鍵字就是PositionId、BasketId和OrderId的組合。
表11,位置
表12定義了具有客戶的訂單,并指示每個訂單是否以主關鍵字OrderId來提交。
表12,訂單
如圖5所示,處理150使用這些表7-12來定義這個簡單任務所需要的對后端數據庫22的數據庫操作。處理150包括前端應用程序12接收客戶名稱(152)。處理150包括商務軟件應用查詢具有客戶表(表7)的數據庫NAME字段中的名稱(154)。處理150包括檢查客戶名稱與客戶表(表7)中的一行是否相匹配(156)。如果沒有匹配,處理150包括商務軟件應用獲得客戶地址(158)、在具有新的AddressId和地址的地址表(表8)中插入新的行(160)、在具有新的CustomerId和AddressId的客戶表(表7)中插入新的行(162)。如果存在匹配,處理150包括商務軟件獲得含有客戶的訂單的產品名稱(164)。處理150包括商務軟件在產品表中查詢產品名稱(表9)(166)。
處理150包括檢查產品名稱與產品表(表9)中的行是否相匹配(168)。如果存在匹配,則處理150包括商務軟件在具有客戶的CustomerId的訂單表(表12)中插入新的訂單以及設定提交字段為“假”。否則,處理150返回到獲得訂單的產品名稱(164)。處理150包括商務軟件在具有客戶的CustomerId的貨籃表(表10)中插入新的貨籃。
處理150包括商務軟件在具有CustomerId、BasketId、和ProductId的位置表(表11)中插入新的位置(174)。處理150包括商務軟件接收請求以提交訂單(176)。處理150包括商務軟件以客戶的CustomerId查詢訂單表(表12)(178),而這個查詢返回匹配客戶的CustomerId的訂單。處理150包括在訂單表(表12)中選擇匹配客戶的CustomerId的訂單(180)的商務軟件。處理150包括商務軟件將訂單表(表12)中選擇的行的提交的字段設置為“真”(182)。處理150包括通過商務軟件在客戶表7中查詢AddressId以及然后在地址表8中查詢匹配的AddressId,來從地址表8中取得用于訂單發(fā)送的客戶地址(184)。
表13-19示出儲存庫18的一個實施中的表,所述儲存庫18表示由表7-12說明的示例數據庫的元數據。表13-19按照上述表1-6的定義,所以表1-6的行中的定義與表13-19的列或字段相對應。與表7-12的情況一樣,表13-19的關鍵字字段也被標注了星號。
表13按照SCOL_ASPECT表(定義在表1中)中的定義,定義了方面A_Customer、A_Address、A_Product、A_Basket、A_Position、和A_OrderHeader。每個方面具有為每個實例定義唯一的關鍵字的相應關鍵字方面。例如,方面A_Customer具有關鍵字方面Customer_Key。這個元數據儲存庫18中的關鍵字方面可以對應后端數據庫24中的關系數據庫表的關鍵字。例如,客戶表(表7)的關鍵字是CustomerId字段。STRUCTURE字段中的行對應下面表19中的數據字典。例如,表19可以定義Customer_Structure,以便具有指示字符串的CHAR類型的NAME字段。SERVICE_PROVIDER字段的行對應處理方面的服務的特定方面服務供應商。在表13中,所有方面被指派給S_provider方面服務供應商(例如,參考圖3的34)。TRANSAC_PROVIDER字段的行對應處理方面的交易的特定交易服務供應商40。在表13中,所有方面被指派給T_provider交易服務供應商(例如,參考圖3的40)。LOCKING_PROVIDER字段中的行對應處理方面的鎖定的特定鎖定服務供應商。在表13中,所有方面被指派給L_provider鎖定服務供應商(例如,參考圖3的42)。
表13,示例的SCOL_ASPECT表
表14按照SCOL_ASP_ASPECT表(定義在表2中)中的定義,來定義方面A_OrderHeader的動作提交。字段INPUT_KEY_ASPECT用規(guī)定A_OrderHeader的哪個實例應當被動作作用來規(guī)定應用14發(fā)送的關鍵字方面。動作提交將提交的后端數據庫24的那些實例的字段改變?yōu)檎?True)。對這個動作提交不需要額外的參數,所以表14中的PARAM_STRUCTURE字段為空白。字段PROVIDER_CLASS規(guī)定指派給每個動作的方面服務供應商34(參考圖3)。在表14中,動作提交被指派給方面服務供應商S_provider(例如,參考圖3的34)。
表14,示例的SCOL_ASP_ACTION表
表15按照SCOL_RELATION表(定義在表3中)中的定義,來定義在表13中定義的方面之間的關系。這些關系反映在由示例表7-12說明的后端數據庫24中的數據表之間的關系。方面之間的這些關系也說明在圖6中,對于方面A_Customer 202、方面A_Address 204、方面A_Product 206、方面A_Basket 208、方面A_Position 210、以及方面A_OrderHeader 112。這些關系包括R_Customer_To_Address 212、R_Basket_To_Customer 214、R_OrderHeader_To_Customer 216、R_Position_To_Product 218、R_Position_To_OrderHeader 220、以及R_Position_To_Basket 222。
表15,示例的SCOL_RELATION表
表16按照SCOL_SVC_MODULE表(定義在表4中)的定義,來定義用于在表7-12中給出的后端數據庫24的示例定義的示例服務模塊。表16定義了服務模塊S_Customer、S_Product、S_Basket、以及S_Order。字段TRANSAC_PROVIDER為每個服務模塊規(guī)定交易服務供應商40(參考圖3)。在表16中,交易服務供應商T_provider(例如,參考圖3的40)被指派給服務模塊。
表16,示例的SCOL_SVC_MODULE表
表17按照SCOL_ASPECT_USE表(定義在表5中)中的定義,來將服務模塊(由表16提供)與方面(由表13提供)相關聯(lián)。
表17,示例的PECT_USESCOL_ASP表
表18按照SCOL_QUERY表(定義在表6中)中的定義,來定義指派給便利圖5的商務處理150的查詢。例如,與S_Customer服務模塊相關聯(lián)的QueryByName查詢采用Customer_Structure作為查詢的輸入,以及一組定義哪些關鍵字可以被用于過濾的客戶關鍵字(Customer_Key)。字段PROVIDER_CLASS規(guī)定哪個查詢服務供應商32(參考圖3)與每個服務模塊相關聯(lián)。在表18中,查詢服務供應商Q_provider(例如,32)與每個服務模塊相關聯(lián)。
表18,示例的SCOL_QUERY表
表19定義了在表13-18中定義的儲存庫18的實施的數據字典。每行定義了具有名稱和多個數據項目和它們的類型的結構。例如,結構Customer_Structure具有一個指示字符串的CHAR類型的標題為“NAME(名稱)”的數據項目。Customer_Key_Table結構定義了每個客戶的CustomerId關鍵字,并且也是CHAR類型。
表19,示例的SCOL_STRUCT表
上述處理150的數據庫操作被如下定義在儲存庫18的這個實施中。包括在處理150中的客戶數據庫表(表7)的查詢(154)由與表18中的方面服務模塊S_Customer相關聯(lián)的QueryByName查詢在元數據儲存庫18中來描述。由于前端應用程序12已經獲得客戶名稱,并且服務模塊S_Customer含有具有客戶名稱的方面,因此選擇與方面服務模塊S_Customer相關聯(lián)的QueryByName查詢。例如,前端應用程序12可以向服務管理器16提交與服務模塊S_Customer相關聯(lián)的查詢QueryByName NAME=“John Smith”,而不規(guī)定Customer_Key的過濾。服務管理器16檢查儲存庫18以保證定義了查詢。然后,服務管理器16提交查詢給在數據庫24中查詢客戶數據庫表(表7)的Q_provider(例如,32),并且被發(fā)送回前端應用程序12的輸出是含有CurtomerId={1}的記錄集。
分別用元數據儲存庫18中對方面A_Aspect和A_Customer的標準插入操作(前述)來描述包括在處理150中的、在地址數據表(表8)上的插入(160)和包括在處理150中的、在客戶數據庫表(表7)上的插入(162)。
用與定義在表18中的服務模塊S_Product相關聯(lián)的QueryByName查詢描述包括在處理150中的、在產品數據庫表(表9)中對產品名稱的查詢(166)。例如,應用12可以向服務管理器16提交與服務模塊S_Product相關聯(lián)的查詢QueryByName NAME=“Wrench”,而不規(guī)定Product_Key的過濾。服務管理器16檢查儲存庫18以保證定義了查詢。然后,服務管理器16提交查詢給查詢數據庫24的Q_provider(例如,32),并且發(fā)送回應用12的輸出是含有ProductId={3}的記錄集。
分別用對方面A_OrderHeader、A_Basket、和A_Position的插入操作定義包括在處理150中的插入(170、172和174)。
用與定義在圖18中的服務模塊S_Order相關聯(lián)的QueryByCustomer查詢描述包括在處理150中的對訂單數據庫表(表12)按照客戶的查詢(178)。例如,前端應用程序12可以提交與服務模塊S_Order相關聯(lián)的查詢QueryByCustomer Customer_Key(CustomerId)={2},而不過濾OrderHeader_Key。服務管理器16檢查儲存庫18以保證定義了查詢。然后,服務管理器16提交查詢給查詢數據庫24的Q_provider(例如,32),并且被發(fā)送回應用12的輸出是含有OrderHeader_Key={2,3}的記錄集。
用儲存庫18中對方面A_OrderHeader的執(zhí)行提交動作(定義在表14中)定義包括在處理150中的選擇對訂單數據庫表(表12)的訂單操作(180)和將選擇的訂單的提交的字段設置為真(182)。例如,前端應用程序12可以以OrderHeader-Key={2,3}將對方面A_OrderHeader的提交動作發(fā)送給服務管理器16。然后,服務管理器16發(fā)送提交操作給S_provider(例如,34),S_provider對于所選擇的對應OrderId={2,3}的行將訂單數據庫表(表12)中提交的字段改變?yōu)椤罢妗薄?br>
用對A_Customer方面的標準按照關系選擇動作定義包括在處理150中的從地址數據庫表(表8)取得客戶地址(184)。例如,前端應用程序12將對規(guī)定關系R_Customer_To_Addres和Customer_Key={2}的A_Customer方面的按照關系選擇動作發(fā)送給服務管理器16。服務管理器16檢查對儲存庫18的請求,并將請求傳遞給服務供應商S_provider(例如,34),其查詢匹配CustomerId={2}的外鍵碼AddressId,并導航到地址表8。S_provider(例如,34)經由服務管理器16將含有{Louisville,Willow Avenue}的記錄集從地址數據庫表(表8)返回到應用12。
上述技術可以在數字電子電路或計算機硬件、固件、軟件以及它們的組合中實施。該技術還可以作為計算機程序產品實施,即有形地具體化在信息載體中的計算機程序,例如在機器可讀的存儲設備或傳播信號中,并且由例如可編程處理器、計算機、或多臺計算機的數據處理裝置執(zhí)行或控制這些數據處理裝置的操作,。計算機程序可以以各種編程語言的形式來編寫,包括編譯語言或解釋語言,并且它也可以以各種形式來配備(deploy),包括作為獨立程序或模塊、構件、子程序、或其它適于用在計算環(huán)境中的單元。計算機程序可以被配備來在一臺計算機上或在一個地點或分布在多個地點而通過通信網絡相互連接的多臺計算機上執(zhí)行。
所述技術的方法步驟可以由一個或多個可編程處理器來執(zhí)行,所述可編程處理器運行計算機程序并通過對輸入數據進行操作和產生輸出來執(zhí)行本發(fā)明的功能。方法步驟可以由專用邏輯電路來執(zhí)行,并且本發(fā)明的裝置也可以被實施為該專用邏輯電路,例如,FPGA(場可編程門陣列)或ASIC(專用集成電路)。所述方法步驟還可以用除上述次序以外的次序來執(zhí)行。
適于執(zhí)行計算機程序的處理器包括例如通用和專用微處理器、以及任何種類的數字計算機的任意一個或多個處理器。通常,處理器將從只讀存儲器或隨機存取存儲器或兩者接收指令和數據。計算機的主要元件是執(zhí)行指令的處理器和存儲指令和數據的一個或多個存儲器。通常,計算機還將包括或操作地耦合到一個或多個用于存儲數據的海量存儲設備,以便從其接收數據或向其傳輸數據,例如,磁盤、磁光盤、或光盤。適于具體化計算機程序指令和數據的信息載體包括各種形式的非易失性存儲器,包括例如半導體存儲器設備,例如EPROM、EEPROM和閃速存儲器設備;磁盤,例如內部硬盤或可移動盤;磁光盤;以及CD-ROM和DVD-ROM盤。處理器和存儲器可以補充有專用邏輯電路或結合在專用邏輯電路中。
本發(fā)明可以實施在一種計算系統(tǒng)中,其包括后端構件,例如數據服務器,或者包括中間件構件,例如應用服務器,或者包括前端構件,例如具有圖形用戶界面或網絡瀏覽器的客戶計算機,通過其用戶能夠與本發(fā)明的實施來交互,或者任何這樣的后端、中間件、或前端構件的組合。
本發(fā)明已經通過特定的實施例進行了描述。其它的實施例也在所附權利要求書的保護范圍之內。
權利要求
1.一種方法,包括在儲存庫中表示來自服務器的服務,所述服務包括使用一組對集合中的數據元素的操作來與一個或多個數據元素的集合交互,所述儲存庫包括集合的描述和每個集合的共同屬性,所述儲存庫根據元模型來組織;使軟件實體請求表示在儲存庫中的服務,所述服務表示對來自多個集合的第一集合中的一個或多個數據元素的第一操作;以及執(zhí)行對第一集合中的一個或多個數據元素的第一操作。
2.如權利要求1所述的方法,其中所述儲存庫還包括對來自多個集合的一個集合的數據元素的特殊動作的描述。
3.如權利要求2所述的方法,其中所述特殊動作的描述包括特殊動作的名稱;特殊動作的輸入數據的數據結構的名稱;數據元素的集合的名稱。
4.如前述權利要求之一所述的方法,其中該組操作對應服務供應商類別的方法。
5.如權利要求4所述的方法,其中該組操作包括選擇、刪除、按照關系選擇、以及更新操作。
6.如前述權利要求之一所述的方法,其中所述儲存庫還包括在數據元素的集合對之間的關系的描述。
7.如前述權利要求之一所述的方法,其中所述第一集合具有與數據元素的第二集合的關系,所述關系的描述被存儲在儲存庫中,并且所述關系使得軟件實體通過指定第一集合的數據元素來請求檢索第二集合的數據元素。
8.如前述權利要求之一所述的方法,其中所述儲存庫是數據庫。
9.如前述權利要求之一所述的方法,其中執(zhí)行第一操作包括從記憶裝置讀取第一集合的數據元素的一個或多個屬性,并發(fā)送屬性到軟件實體。
10.如權利要求9所述的方法,其中執(zhí)行第一操作還包括計算數據元素的集合的一個或多個屬性,并發(fā)送屬性到軟件實體。
11.如前述權利要求之一所述的方法,其中集合的描述和集合的共同屬性包括集合的名稱;和定義屬性的數據結構的描述。
12.如前述權利要求之一所述的方法,其中所述第一操作是查詢,并且執(zhí)行第一操作還包括在第一集合內搜索單個數據元素,并返回表示所述單個數據元素的關鍵字。
13.如權利要求12所述的方法,其中所述儲存庫包括查詢的定義,包括查詢的搜索參數結構;和定義用于從數據集合中過濾一個或多個數據的關鍵字的輸入名稱。
14.如前述權利要求之一所述的方法,還包括使得軟件實體請求表示在儲存庫中的服務,所述服務表示對來自多個集合的第二集合中的一個或多個數據元素的第一操作;以及執(zhí)行對第二集合中的一個或多個數據元素的第一操作。
15.一種系統(tǒng),包括第一計算機,配置來執(zhí)行客戶程序;第二計算機,配置來執(zhí)行服務器程序;網絡,鏈接第一和第二計算機,以致服務器程序被配置來執(zhí)行以下操作在儲存庫中表示來自服務器程序的服務,所述服務包括使用一組對集合中的數據元素的操作來與一個或多個數據元素的集合交互,所述儲存庫包括集合的描述和每個集合的共同屬性,所述儲存庫根據元模型來組織;使得客戶程序請求表示在儲存庫中的服務,所述服務表示對來自多個集合的第一集合中的一個或多個數據元素的第一操作;以及執(zhí)行對第一集合中的一個或多個數據元素的第一操作。
16.如權利要求15所述的系統(tǒng),其中所述儲存庫還包括對來自多個集合的一個集合的數據元素的特殊動作的描述。
17.如權利要求16所述的系統(tǒng),其中特殊動作的描述包括特殊動作的名稱;特殊動作的輸入數據的數據結構的名稱;數據元素的集合的名稱。
18.如權利要求15、16或17所述的系統(tǒng),其中該組操作對應服務供應商類別的方法。
19.如權利要求18所述的系統(tǒng),其中該組操作包括選擇、刪除、按照關系選擇、以及更新操作。
20.如權利要求15、16、17、18或19所述的系統(tǒng),其中所述儲存庫還包括在數據元素的集合對之間的關系的描述。
21.如權利要求15、16、17、18、19或20所述的系統(tǒng),其中第一集合具有與數據元素的第二集合的關系,所述關系的描述被存儲在儲存庫中,并且所述關系使得客戶程序通過指定第一集合的數據元素來請求檢索第二集合的數據元素。
22.如權利要求15、16、17、18、19、20或21所述的系統(tǒng),其中所述儲存庫是數據庫。
23.如權利要求15、16、17、18、19、20、21或22所述的系統(tǒng),其中執(zhí)行第一操作包括從記憶裝置讀取數據元素的第一集合的一個或多個屬性,并發(fā)送屬性到客戶程序。
24.如權利要求23所述的系統(tǒng),其中執(zhí)行第一操作還包括計算數據元素集合的一個或多個屬性,并發(fā)送屬性到軟件實體。
25.如前述權利要求15到24之一所述的系統(tǒng),其中集合的描述和集合的共同屬性包括集合的名稱;和定義屬性的數據結構的描述。
26.如前述權利要求15到25之一所述的系統(tǒng),其中第一操作是查詢,并且執(zhí)行第一操作還包括在第一集合內搜索單個數據元素,并返回表示所述單個數據元素的關鍵字。
27.如權利要求26所述的系統(tǒng),其中所述儲存庫包括查詢的定義,包括查詢的搜索參數結構;和定義用于從數據集合中過濾一個或多個數據的關鍵字的輸入名稱。
28.如前述權利要求15到27之一所述的系統(tǒng),還包括使得客戶程序請求表示在儲存庫中的服務,所述服務表示對來自多個集合的第二集合中的一個或多個數據元素的第一操作;以及執(zhí)行對第二集合中的一個或多個數據元素的第一操作。
全文摘要
本發(fā)明涉及一種方法和裝置,包括計算機程序產品,其包括在儲存庫中表示來自服務器的服務,所述服務包括使用一組對集合中的數據元素的操作來與一個或多個數據元素的集合交互,所述儲存庫包括集合的描述和每個集合的共同屬性,所述儲存庫根據元模型來組織。所述方法還包括使軟件實體請求表示在儲存庫中的服務,所述服務表示對來自多個集合的第一集合中的一個或多個數據元素的第一操作,并執(zhí)行對第一集合中的一個或多個數據元素的第一操作。
文檔編號G06Q10/00GK1826599SQ200480021134
公開日2006年8月30日 申請日期2004年7月6日 優(yōu)先權日2003年7月22日
發(fā)明者雷納·布倫德爾, 弗蘭克·布倫斯維格, 約瑟夫·迪特爾, 羅爾夫·克蘭, 于爾根·雷梅爾, 斯蒂芬·里特, 約翰尼斯·維格納 申請人:Sap股份公司