專利名稱:擴展軟件應(yīng)用的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件應(yīng)用的公開與擴展,具體而言,涉及一種擴展軟件應(yīng)用的方法和裝置.
背景技術(shù):
當(dāng)今全球化時代,企業(yè)面臨著新的挑戰(zhàn)社會化大生產(chǎn)的分工越來越細(xì),企業(yè)的生 產(chǎn)方式由大而全的自主式生產(chǎn)轉(zhuǎn)變?yōu)閷I(yè)化協(xié)作生產(chǎn)。企業(yè)面臨越來越激烈的外部競爭環(huán) 境帶來的挑戰(zhàn),以及內(nèi)部管理和運營成本上升帶來的壓力。企業(yè)迫切需要與供應(yīng)商、合作伙伴、客戶建立更緊密的協(xié)作關(guān)系,以共同應(yīng)對風(fēng)險 和挑戰(zhàn),實現(xiàn)互惠共贏。同時也需要能整合優(yōu)化內(nèi)部資源和業(yè)務(wù)流程,降低運營成本,提高 運營效率和客戶服務(wù)水平。為應(yīng)對全球化帶來的挑戰(zhàn),企業(yè)需要有效整合內(nèi)外資源,這要求企業(yè)的IT系統(tǒng)要 具備足夠的開放性和擴展能力,這種開放性和擴展能力首先體現(xiàn)在IT系統(tǒng)要具備能與外 部系統(tǒng)進(jìn)行信息交流的豐富的對外服務(wù)接口。然而,在以往的獨立應(yīng)用軟件中,往往受當(dāng)時應(yīng)用領(lǐng)域、用戶需求或交付時間的限 制,系統(tǒng)設(shè)計的一般較為封閉,沒有考慮對外提供開放的服務(wù)接口和擴展的余地。這樣造成 的后果是企業(yè)里運行的IT系統(tǒng)成為一個個的“信息孤島”,各系統(tǒng)之間以及企業(yè)內(nèi)部系統(tǒng) 與外部系統(tǒng)之間很難進(jìn)行交流和協(xié)作,更難以在原有的系統(tǒng)功能上進(jìn)行個性化的擴展。即 便具備一定開放性的軟件系統(tǒng),也可能難以支持在原有的功能上進(jìn)行定制開發(fā),從而滿足 不斷變化的企業(yè)業(yè)務(wù)需求。因此,迫切需要打通當(dāng)前企業(yè)IT系統(tǒng)之間的“信息壁壘”,使現(xiàn)有的企業(yè)應(yīng)用系統(tǒng) 自動具備SOA (面向服務(wù)的體系結(jié)構(gòu))化集成和擴展的能力。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于,提供一種方式,能夠開放應(yīng)用軟件的功能,同時 能夠?qū)浖δ茏鲞M(jìn)一步的擴展。有鑒于此,本發(fā)明公開了一種擴展軟件應(yīng)用的方法,包括步驟102,注冊軟件的 功能函數(shù)的服務(wù)接口 ;步驟104,為所述服務(wù)接口注冊插件;步驟106,發(fā)布所述服務(wù)接口, 使外界通過所述插件調(diào)用所述功能函數(shù)。在注冊完服務(wù)接口之后的任何時間,都可以發(fā)布 服務(wù)接口,注冊插件也可以在發(fā)布服務(wù)接口之后進(jìn)行。本技術(shù)方案中,實現(xiàn)了軟件內(nèi)部功能 函數(shù)的功能的公開,并提供插件以對其擴展。在上述技術(shù)方案中,優(yōu)選地,所述步驟102包括解析出所述功能函數(shù)的接口信 息,在數(shù)據(jù)庫中存儲所述接口信息,以注冊所述服務(wù)接口。在上述技術(shù)方案中,優(yōu)選地,所述在數(shù)據(jù)庫中存儲所述接口信息包括根據(jù)所述軟 件的功能層次結(jié)構(gòu),在所述數(shù)據(jù)庫中以對應(yīng)的目錄結(jié)構(gòu)存儲所述接口信息,其中,所述接口 信息以可擴展標(biāo)記語言文檔存儲,并分配有唯一的注冊標(biāo)識。
在上述技術(shù)方案中,優(yōu)選地,所述步驟104包括根據(jù)所述服務(wù)接口,將所述插件 的相關(guān)信息存儲在所述數(shù)據(jù)庫中。在上述技術(shù)方案中,優(yōu)選地,所述相關(guān)信息包括所述插件的類型、實時性、執(zhí)行順 序、執(zhí)行事務(wù)類型和物理綁定信息。在上述技術(shù)方案中,優(yōu)選地,所述步驟106包括注冊所述功能函數(shù)的調(diào)用方式, 根據(jù)所述接口信息生成訪問接口,再根據(jù)所述訪問接口和所述功能函數(shù)的訪問綁定信息生 成調(diào)用代理,最后根據(jù)所述調(diào)用方式發(fā)布所述服務(wù)接口,其中,所述調(diào)用代理攔截對所述功 能函數(shù)的訪問,并使用所述訪問接口觸發(fā)所述插件來連接所述服務(wù)接口,以調(diào)用所述功能 函數(shù),所述訪問綁定信息位于所述接口信息中。外界通過調(diào)用代理來間接調(diào)用功能函數(shù)的 功能,而無需關(guān)心調(diào)用功能的細(xì)節(jié),并且外界對內(nèi)部軟件的依賴。 本發(fā)明還公開了一種擴展軟件應(yīng)用的裝置,包括服務(wù)接口注冊模塊,用于注冊軟 件的功能函數(shù)的服務(wù)接口 ;插件注冊模塊,用于為所述服務(wù)接口注冊插件;發(fā)布模塊,用于 發(fā)布所述服務(wù)接口,使外界通過所述插件調(diào)用所述功能函數(shù)。在服務(wù)接口注冊模塊注冊完 服務(wù)接口之后的任何時間,發(fā)布模塊都可以發(fā)布服務(wù)接口,插件注冊模塊注冊插件也可以 在發(fā)布服務(wù)接口之后進(jìn)行。本技術(shù)方案中,實現(xiàn)了軟件內(nèi)部功能函數(shù)的功能的公開,并提供 插件以對其擴展。在上述技術(shù)方案中,優(yōu)選地,所述服務(wù)接口注冊模塊通過解析出所述功能函數(shù)的 接口信息,在數(shù)據(jù)庫中存儲所述接口信息,以注冊所述服務(wù)接口。在上述技術(shù)方案中,優(yōu)選地,所述服務(wù)接口注冊軟件模塊根據(jù)所述軟件的功能層 次結(jié)構(gòu),在所述數(shù)據(jù)庫中以對應(yīng)的目錄結(jié)構(gòu)存儲所述接口信息,其中,所述接口信息以可擴 展標(biāo)記語言文檔存儲,并分配有唯一的注冊標(biāo)識。在上述技術(shù)方案中,優(yōu)選地,所述插件注冊模塊根據(jù)所述服務(wù)接口,將所述插件的 相關(guān)信息存儲在所述數(shù)據(jù)庫中。在上述技術(shù)方案中,優(yōu)選地,所述相關(guān)信息包括所述插件的類型、實時性、執(zhí)行順 序、執(zhí)行事務(wù)類型和物理綁定信息。在上述技術(shù)方案中,優(yōu)選地,所述發(fā)布模塊注冊所述功能函數(shù)的調(diào)用方式,根據(jù)所 述接口信息生成訪問接口,再根據(jù)所述訪問接口和所述功能函數(shù)的訪問綁定信息生成調(diào)用 代理,最后根據(jù)所述調(diào)用方式發(fā)布所述服務(wù)接口,其中,所述調(diào)用代理攔截對所述功能函數(shù) 的訪問,并使用所述訪問接口觸發(fā)所述插件來連接所述服務(wù)接口,以調(diào)用所述功能函數(shù),所 述訪問綁定信息位于所述接口信息中。外界通過調(diào)用代理來間接調(diào)用功能函數(shù)的功能,而 無需關(guān)心調(diào)用功能的細(xì)節(jié),并且外界對內(nèi)部軟件的依賴。在上述技術(shù)方案中,優(yōu)選地,還包括自動生成模塊,用于自動生成代碼以完成使 用所述代理對所述功能函數(shù)的調(diào)用。在上述技術(shù)方案中,優(yōu)選地,所述自動生成模塊根據(jù)所述接口信息生成創(chuàng)建所述 代理的代碼,并根據(jù)所述接口信息中的參數(shù)信息生成所述功能函數(shù)的參數(shù)賦值代碼,以及 生成使用所述代理調(diào)用所述功能函數(shù)的代碼,生成調(diào)用所述代理獲得調(diào)用所述功能函數(shù)的 結(jié)果的代碼。通過上述技術(shù)方案,可以使軟件如何在不修改源代碼的情況下,能夠自動提取軟 件自身的功能作為對外開放的服務(wù)接口,以便與第三方軟件系統(tǒng)進(jìn)行協(xié)作與集成;也可以使原有的軟件功能具備可擴展的能力,以便對原有的軟件進(jìn)行個性化的插件擴展。
圖1是根據(jù)本發(fā)明的擴展軟件應(yīng)用的方法的流程圖;圖2是根據(jù)本發(fā)明的擴展軟件應(yīng)用的裝置的框圖;圖3是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的服務(wù)接口注冊模塊進(jìn) 行注冊服務(wù)接口的示意圖;圖4是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的插件注冊模塊進(jìn)行注 冊插件的示意圖;圖5是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的發(fā)布模塊進(jìn)行發(fā)布服 務(wù)接口的示意圖;圖6是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的發(fā)布模塊生成的調(diào)用 代理的功能示意圖;圖7是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的自動生成模塊進(jìn)行生 成代碼的示意圖;圖8至圖27是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的截屏示意圖。
具體實施例方式下面將結(jié)合附圖詳細(xì)描述根據(jù)本發(fā)明的實施例。圖1是根據(jù)本發(fā)明的擴展軟件應(yīng)用的方法的流程圖。如圖1所示,本發(fā)明提供了一種擴展軟件應(yīng)用的方法,包括步驟102,注冊軟件的 功能函數(shù)的服務(wù)接口 ;步驟104,為所述服務(wù)接口注冊插件;步驟106,發(fā)布所述服務(wù)接口, 使外界通過所述插件調(diào)用所述功能函數(shù)。在注冊完服務(wù)接口之后的任何時間,都可以發(fā)布 服務(wù)接口,注冊插件也可以在發(fā)布服務(wù)接口之后進(jìn)行。本技術(shù)方案中,實現(xiàn)了軟件內(nèi)部功能 函數(shù)的功能的公開,并提供插件以對其擴展。在上述技術(shù)方案中,所述步驟102包括解析出所述功能函數(shù)的接口信息,在數(shù)據(jù) 庫中存儲所述接口信息,以注冊所述服務(wù)接口。在上述技術(shù)方案中,所述在數(shù)據(jù)庫中存儲所述接口信息包括根據(jù)所述軟件的功 能層次結(jié)構(gòu),在所述數(shù)據(jù)庫中以對應(yīng)的目錄結(jié)構(gòu)存儲所述接口信息,其中,所述接口信息以 可擴展標(biāo)記語言文檔存儲,并分配有唯一的注冊標(biāo)識。在上述技術(shù)方案中,所述步驟104包括根據(jù)所述服務(wù)接口,將所述插件的相關(guān)信 息存儲在所述數(shù)據(jù)庫中。在上述技術(shù)方案中,所述相關(guān)信息包括所述插件的類型、實時性、執(zhí)行順序、執(zhí)行 事務(wù)類型和物理綁定信息。在上述技術(shù)方案中,所述步驟106包括注冊所述功能函數(shù)的調(diào)用方式,根據(jù)所述 接口信息生成訪問接口,再根據(jù)所述訪問接口和所述功能函數(shù)的訪問綁定信息生成調(diào)用代 理,最后根據(jù)所述調(diào)用方式發(fā)布所述服務(wù)接口,其中,所述調(diào)用代理攔截對所述功能函數(shù)的 訪問,并使用所述訪問接口觸發(fā)所述插件來連接所述服務(wù)接口,以調(diào)用所述功能函數(shù),所述 訪問綁定信息位于所述接口信息中。
圖2是根據(jù)本發(fā)明的擴展軟件應(yīng)用的裝置的框圖。如圖2所示,本發(fā)明提供了一種擴展軟件應(yīng)用的裝置200,包括服務(wù)接口注冊模 塊202,用于注冊軟件的功能函數(shù)的服務(wù)接口 ;插件注冊模塊204,用于為所述服務(wù)接口注 冊插件;發(fā)布模塊206,用于發(fā)布所述服務(wù)接口,使外界通過所述插件調(diào)用所述功能函數(shù)。 在服務(wù)接口注冊模塊注冊完服務(wù)接口之后的任何時間,發(fā)布模塊都可以發(fā)布服務(wù)接口,插 件注冊模塊注冊插件也可以在發(fā)布服務(wù)接口之后進(jìn)行。本技術(shù)方案中,實現(xiàn)了軟件內(nèi)部功 能函數(shù)的功能的公開,并提供插件以對其擴展。 在上述技術(shù)方案中,所述服務(wù)接口注冊模塊202通過解析出所述功能函數(shù)的接口 信息,在數(shù)據(jù)庫中存儲所述接口信息,以注冊所述服務(wù)接口。在上述技術(shù)方案中,所述服務(wù)接口注冊軟件模塊根據(jù)所述軟件的功能層次結(jié)構(gòu), 在所述數(shù)據(jù)庫中以對應(yīng)的目錄結(jié)構(gòu)存儲所述接口信息,其中,所述接口信息以可擴展標(biāo)記 語言文檔存儲,并分配有唯一的注冊標(biāo)識。在上述技術(shù)方案中,所述插件注冊模塊204根據(jù)所述服務(wù)接口,將所述插件的相 關(guān)信息存儲在所述數(shù)據(jù)庫中。在上述技術(shù)方案中,所述相關(guān)信息包括所述插件的類型、實時性、執(zhí)行順序、執(zhí)行 事務(wù)類型和物理綁定信息。在上述技術(shù)方案中,所述發(fā)布模塊206注冊所述功能函數(shù)的調(diào)用方式,根據(jù)所述 接口信息生成訪問接口,再根據(jù)所述訪問接口和所述功能函數(shù)的訪問綁定信息生成調(diào)用代 理,最后根據(jù)所述調(diào)用方式發(fā)布所述服務(wù)接口,其中,所述調(diào)用代理攔截對所述功能函數(shù)的 訪問,并使用所述訪問接口觸發(fā)所述插件來連接所述服務(wù)接口,以調(diào)用所述功能函數(shù),所述 訪問綁定信息位于所述接口信息中。外界通過調(diào)用代理來間接調(diào)用功能函數(shù)的功能,而無 需關(guān)心調(diào)用功能的細(xì)節(jié),并且外界對內(nèi)部軟件的依賴。在上述技術(shù)方案中,還包括自動生成模塊,用于自動生成代碼以完成使用所述代 理對所述功能函數(shù)的調(diào)用。在上述技術(shù)方案中,所述自動生成模塊根據(jù)所述接口信息生成創(chuàng)建所述代理的代 碼,并根據(jù)所述接口信息中的參數(shù)信息生成所述功能函數(shù)的參數(shù)賦值代碼,以及生成使用 所述代理調(diào)用所述功能函數(shù)的代碼,生成調(diào)用所述代理獲得調(diào)用所述功能函數(shù)的結(jié)果的代碼。圖3是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的服務(wù)接口注冊模塊進(jìn) 行注冊服務(wù)接口的示意圖。如圖3所示,服務(wù)接口注冊模塊202進(jìn)行注冊服務(wù)接口的步驟包括解析想要發(fā)布 服務(wù)接口的功能函數(shù)的接口信息,將其作為服務(wù)元數(shù)據(jù)(Metadata),然后按照一定的標(biāo)準(zhǔn) 規(guī)范(轉(zhuǎn)換為XML文檔格式)和功能組織結(jié)構(gòu)存儲到數(shù)據(jù)庫中,從而實現(xiàn)服務(wù)接口的注冊。其中,服務(wù)接口注冊模塊202解析功能函數(shù)的接口信息的步驟具體為首先加載 軟件中功能函數(shù)所在DLL (Dynamic Link Library,動態(tài)鏈接庫)文件,隨后讀取該DLL文 件的類型庫信息。通過檢索類型庫信息,便可以獲取DLL文件中的類成員(Class)以及類 成員的具體信息,在類成員中可以進(jìn)一步取得功能函數(shù)的詳細(xì)的接口信息,包括參數(shù)名 (Parameter Name)、參數(shù)類型(Type)、參數(shù)傳遞方向(Direction),以及返回類型(Return Type)等信息。通過將這些信息讀取出來,并進(jìn)行存儲以注冊服務(wù)接口,然后發(fā)布服務(wù)接口后,外界或第三方軟件系統(tǒng)在調(diào)用此服務(wù)接口時便知道如何進(jìn)行調(diào)用。
存儲服務(wù)元數(shù)據(jù)的標(biāo)準(zhǔn)規(guī)范包括采用可讀性好并且與平臺無關(guān)的結(jié)構(gòu)化 XML (Extensible Markup Language,可擴展標(biāo)記語言),描述服務(wù)元數(shù)據(jù)的信息,并給每個 服務(wù)元數(shù)據(jù)分配一個唯一的注冊標(biāo)識(Registration ID);而功能組織結(jié)構(gòu)包括按照軟 件的功能層次關(guān)系對服務(wù)元數(shù)據(jù)進(jìn)行規(guī)范的目錄分類,比如ERP\供應(yīng)鏈子系統(tǒng)\采購模 塊\采購訂單\新增功能,代表ERP供應(yīng)鏈子系統(tǒng)采購模塊中采購訂單的新增功能。服務(wù)接口注冊模塊202注冊服務(wù)接口的目的是為了以標(biāo)準(zhǔn)和一致的方式對外發(fā) 布軟件功能函數(shù)的服務(wù)接口,便于外部或第三方軟件系統(tǒng)快速檢索和使用該服務(wù)接口以調(diào) 用功能函數(shù)。同時,將服務(wù)接口進(jìn)行集中注冊便于軟件開發(fā)商對服務(wù)接口進(jìn)行統(tǒng)一管理和 維護。圖4是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的插件注冊模塊進(jìn)行注 冊插件的示意圖。根據(jù)本發(fā)明的技術(shù)方案,采用插件(Plug-in)的形式為軟件原有的功能服務(wù)提供 可擴展的機制。依據(jù)已存儲的服務(wù)元數(shù)據(jù)注冊的服務(wù)接口,形成統(tǒng)一規(guī)范的插件接口規(guī)范, 可以開發(fā)能擴展原有功能服務(wù)的自定義插件。如圖4所示,注冊擴展插件(Plug-in)的步驟包括插件注冊模塊204首先選擇需 要擴展的服務(wù)接口,根據(jù)服務(wù)接口選擇將要擴展的插件類型,即前置插件或后置插件,然后 根據(jù)實際需求注冊同步或異步插件,同時指定插件執(zhí)行的先后順序以及插件執(zhí)行的事務(wù)類 型,以及插件的物理綁定信息,最后將注冊的插件的信息存儲到本裝置的數(shù)據(jù)庫中。為了使得在不同的應(yīng)用場景和模式下都能自由靈活的進(jìn)行功能擴展,需要提供 不同的插件注冊類型,并支持多種事務(wù)類型。注冊的自定義插件分可為兩類前置插件 (Pre-Plugin)和后置插件(Post-Plugin)。前置插件是在調(diào)用原有的功能服務(wù)之前觸發(fā)的 插件事件,而后置插件是在調(diào)用原有功能服務(wù)之后所觸發(fā)的插件事件。在前置插件或后置插件中按照實時性又分為同步插件(Sync-Plugin)和異步插 件(Async-Plugin)。同步插件,即實時插件,在插件調(diào)用后必須等待操作的結(jié)果返回;而異 步插件,在操作發(fā)起后不用等待操作結(jié)果的返回,可以繼續(xù)做后續(xù)的其它事情,等操作結(jié)果 出來后會接受到通知并作相應(yīng)的處理。擴展插件支持前臺UI插件和后臺無界面的服務(wù)插 件。插件事務(wù)類型總體上可簡單分為兩類內(nèi)部事務(wù)(Internal Transaction)和外部事務(wù) (External Transaction)。內(nèi)部事務(wù)只保證單個注冊插件內(nèi)部處于一個事務(wù)范圍內(nèi),而不 參與到其他前置插件或后置插件的整體事務(wù)中,插件執(zhí)行失敗與否不會影響其他插件的執(zhí) 行。而同一個擴展接口的所有注冊為外部事務(wù)的前置插件或后置插件則會保證處于同一個 整體事務(wù)當(dāng)中,一旦一個插件執(zhí)行失敗則所有后續(xù)插件將不會執(zhí)行,并且前續(xù)已執(zhí)行的插 件將會回滾。圖5是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的發(fā)布模塊進(jìn)行發(fā)布服 務(wù)接口的示意圖。在注冊完服務(wù)接口以后,就可以對外發(fā)布服務(wù)接口。注冊插件信息的步驟可在注 冊服務(wù)接口之后的任意時刻進(jìn)行。將功能函數(shù)以服務(wù)接口的形式發(fā)布的目的是使功能函數(shù)升級為統(tǒng)一的、標(biāo)準(zhǔn)化 的、可跨平臺訪問的服務(wù)接口,支持與第三方軟件系統(tǒng)進(jìn)行SOA化集成。
如圖5所示,對外發(fā)布服務(wù)接口的步驟包括發(fā)布模塊206首先注冊功能函數(shù) 的調(diào)用方式,根據(jù)注冊服務(wù)接口的接口信息,發(fā)布模塊206可生成訪問接口 ;根據(jù)功能函 數(shù)的訪問綁定信息,并繼承已生成的訪問接口,發(fā)布模塊206可生成功能函數(shù)的調(diào)用代理 (Proxy),即服務(wù)實現(xiàn)并,最終發(fā)布軟件功能函數(shù)的服務(wù)接口為本地或網(wǎng)絡(luò)(Web)服務(wù)。在調(diào)用功能函數(shù)時,需要知道外界將采用何種方式進(jìn)行調(diào)用,因此需要對功能函 數(shù)的調(diào)用方式進(jìn)行注冊。調(diào)用方式可分為兩種本地或遠(yuǎn)程。對于本地方式,功能函數(shù)的服 務(wù)接口將只會發(fā)布為本機服務(wù),功能函數(shù)僅限于本機調(diào)用,該種方式主要用于對 封閉軟件 已有功能進(jìn)行滿足個性化需求的二次開發(fā);對于遠(yuǎn)程方式,功能函數(shù)的服務(wù)接口可以按照 不同的分布式通信技術(shù)發(fā)布為不同的網(wǎng)絡(luò)(Web)服務(wù),如通過.NET Remoting訪問的局域 網(wǎng)內(nèi)的Web服務(wù)、通過ASP. NET Web Service訪問的Internet內(nèi)Web服務(wù),以及通過WCF 統(tǒng)一訪問的Web服務(wù)等。服務(wù)接口發(fā)布為網(wǎng)絡(luò)服務(wù)后,即可以與第三方軟件系統(tǒng)進(jìn)行通信 與協(xié)作,實現(xiàn)SOA集成。注冊功能函數(shù)調(diào)用方式的目的是為了對調(diào)用方(外部)屏蔽調(diào)用的技術(shù)細(xì)節(jié),即 注冊的調(diào)用方式的信息僅由本裝置內(nèi)部使用,外部不用關(guān)心此信息。當(dāng)外部系統(tǒng)通過本裝 置訪問發(fā)布的服務(wù)時,不用知道服務(wù)的功能所在程序集的物理部署位置,也不用知道此服 務(wù)是基于COM還是基于.NET平臺的,也不用關(guān)心實現(xiàn)此服務(wù)的類對象(Class)等細(xì)節(jié)信 息;同時,更為重要的是外部也能自由選擇適合自身的訪問方式與軟件系統(tǒng)進(jìn)行通信,調(diào)用 需要的功能,相互傳遞數(shù)據(jù)和信息,達(dá)到高度集成和一體化的目的。這種處理方式不僅降低 了系統(tǒng)之間的耦合性,減少了外部系統(tǒng)對內(nèi)部接口的技術(shù)依賴程度,同時也使得軟件內(nèi)部 功能變化不會影響到外部使用者的調(diào)用。其中,調(diào)用代理所起的主要作用就是如圖6所示,攔截對功能函數(shù)的調(diào)用,觸發(fā)前 置插件和后置插件事件,并接受返回結(jié)果。依據(jù)調(diào)用方式,可決定發(fā)布的服務(wù)類型本地或網(wǎng)絡(luò)(Web)服務(wù)。對具體發(fā)布的服 務(wù)信息而言,如前所述可指定發(fā)布時所采用的分布式通信技術(shù),如.NET Remoting.ASP. NET Web Service或WCF等。同時也可指定發(fā)布服務(wù)的事務(wù)類型.NET TransactionScope.COM+ 或WCF分布式事務(wù)。根據(jù)具體的服務(wù)信息,就可以將服務(wù)接口發(fā)布為服務(wù),以發(fā)布.NET Remoting方式 通信的Web服務(wù)為例,其流程為首先通過功能函數(shù)的接口信息,生成訪問接口,接著生成 服務(wù)端接口(ServerInterface)代理和客戶端接口(Client Interface)代理,最后生成客 戶端和服務(wù)端配置文件。在服務(wù)端代理中服務(wù)代理類繼承訪問接口并引用功能函數(shù)的類對 象,通過訪問接口按照預(yù)定義的事務(wù)邏輯先觸發(fā)前置插件,然后調(diào)用功能函數(shù),接著按照預(yù) 定義的事務(wù)邏輯觸發(fā)后置插件。在客戶端代理中,實現(xiàn)對遠(yuǎn)程服務(wù)端代理的.NET Remoting 方式調(diào)用。通過將服務(wù)接口發(fā)布為服務(wù),不僅屏蔽了客戶端與服務(wù)端進(jìn)行通信的技術(shù)細(xì)節(jié), 降低了外部調(diào)用服務(wù)的難度,同時也提高了與第三方系統(tǒng)集成的效率。發(fā)布服務(wù)接口完成以后,在本裝置中就能查看到已對外發(fā)布的服務(wù)接口,外部或 調(diào)用方還可以通過IE瀏覽器查詢到應(yīng)用軟件對外發(fā)布的網(wǎng)絡(luò)(Web)服務(wù)。圖7是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的自動生成模塊進(jìn)行生 成代碼的示意圖。由于服務(wù)元數(shù)據(jù)信息描述了服務(wù)接口的模型,而調(diào)用方式則描述了功能函數(shù)的訪問方式,基于這兩類信息,本軟件裝置提供一個能自動生成調(diào)用代碼(Code)的工具。自動 代碼免除了手工編碼的枯燥繁雜,同時也減少了人工編寫的出錯率,提高了易用性。如圖7所示,自動代碼的生成步驟包括首先,自動生成模塊208根據(jù)要調(diào)用的服務(wù)名在服務(wù)元數(shù)據(jù)庫中查找服務(wù)接口的 定義。隨后,自動生成模塊208根據(jù)服務(wù)接口的定義中的參數(shù)信息自動生成參數(shù)賦值代碼。 然后生成通過調(diào)用代理間接調(diào)用功能函數(shù)的代碼,代碼中包含調(diào)用代理的對象的創(chuàng) 建以及 調(diào)用代理調(diào)用功能函數(shù)的Invoke方法和參數(shù)傳遞代碼,最后自動生成模塊生成通過代理 對象獲取返回結(jié)果的代碼。圖8至圖27是根據(jù)本發(fā)明的一個實施例的擴展軟件應(yīng)用的裝置的截屏示意圖。本軟件裝置不僅可以將功能函數(shù)的服務(wù)接口發(fā)布為可跨平臺訪問的SOA服務(wù),還 可以對功能函數(shù)以插件的形式進(jìn)行自定義擴展。使用本發(fā)明裝置的應(yīng)用過程如下首先要將軟件系統(tǒng)中的UAP. Services. BF. dll中的BillServerBF類成員中的 BillService的接口信息抽取出來對外發(fā)布成為標(biāo)準(zhǔn)的服務(wù)接口。如圖8所示,首先在本裝置的管理界面中根據(jù)實際的分類需要按照層次結(jié)構(gòu)添加 服務(wù)接口的類別目錄。;如圖9所示,其次,在管理界面注冊BillService服務(wù)接口 ;如圖10所示,選擇“服務(wù)接口定義/描述”頁簽,選擇 DotNetAssemblyForRPC (Windows 平臺的.NET 程序集);如圖11所示,選擇UAP. Services. BF. dll文件路徑,選擇需要對外公布的類成員 BillServerBF,并選擇功能 BillService ;如圖12,點擊“自動生成”,將功能BillService的接口信息按照統(tǒng)一的規(guī)范生成 服務(wù)元數(shù)據(jù)信息,如圖13所示,是生成后的服務(wù)接口信息,包括接口的參數(shù)(Parameter)、參數(shù)名、 參數(shù)類型、參數(shù)順序、參數(shù)傳遞方向等;如圖14,生成服務(wù)元數(shù)據(jù)后,為服務(wù)接口選擇事務(wù)發(fā)起類型和部署方式,然后點擊 “確定”,自此BillService服務(wù)接口注冊完畢;接下來為BillService服務(wù)接口進(jìn)行功能擴展,注冊擴展插件(Plug-in)如圖15所示,在插件事件下為BillService服務(wù)注冊同步插件;如圖16所示,為同步插件錄入基本信息,包括編碼、名稱,以及執(zhí)行順序等;如圖17所示,通過同步插件的物理綁定信息與已公布的插件事件接口定義進(jìn)行 “自動匹配”;如圖18所示,為BillService服務(wù)接口注冊異步插件;如圖19所示,為異步插件錄入基本信息,包括編碼、名稱,并選擇執(zhí)行的事務(wù)類 型;如圖20所示,通過異步插件的物理綁定信息與已公布的插件事件接口定義進(jìn)行 “自動匹配”;如圖21所示,注冊完BillService服務(wù)接口的擴展同步和異步插件后,在集成管 理工具中,“啟用插件服務(wù)”后,就可以自動對原有功能服務(wù)進(jìn)行個性化擴展;如圖22所示,將BillService服務(wù)接口發(fā)布為本地(Local)或網(wǎng)絡(luò)(Web)服務(wù);
如圖23所示,發(fā)布完畢后即標(biāo)志著軟件系統(tǒng)的內(nèi)部功能BillService已經(jīng)對外 公布,外界可以通過統(tǒng)一的集成瀏覽器中查看這些已經(jīng)發(fā)布的服務(wù)接口以及其接口定義信 息;而無需關(guān)心這些功能的實現(xiàn)和物理部署;如圖24所示,本裝置提供一個能自動生成調(diào)用代碼(Code)的工具,可以通過“代 碼示例”功能自動生成調(diào)用BillService功能的代碼;如圖25至圖27所示,本裝置提供了統(tǒng)一訪問和調(diào)用服務(wù)接口的調(diào)用代理 ServiceBroker,外部調(diào)用方要訪問BillService功能,只需要通過ServiceBroker進(jìn)行統(tǒng) 一訪問,而不需要直接與軟件UAP. Services. BF. dll組件中的BillServerB F類成員中的 BillService功能方法打交道。綜上所述,根據(jù)本發(fā)明的技術(shù)方案,可以實現(xiàn)一種可以實現(xiàn)抽取、發(fā)布和擴展功能 服務(wù)的方法和裝置,以幫助現(xiàn)有軟件系統(tǒng)建立標(biāo)準(zhǔn)的服務(wù)接口體系,也可以用于支持對原 有的軟件系統(tǒng)進(jìn)行個性化的插件擴展。以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技 術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修 改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
一種擴展軟件應(yīng)用的方法,其特征在于,包括步驟102,注冊軟件的功能函數(shù)的服務(wù)接口;步驟104,為所述服務(wù)接口注冊插件;步驟106,發(fā)布所述服務(wù)接口,使外界通過所述插件調(diào)用所述功能函數(shù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟102包括解析出所述功能函數(shù)的接口信息,在數(shù)據(jù)庫中存儲所述接口信息,以注冊所述服務(wù)接
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述在數(shù)據(jù)庫中存儲所述接口信息包括 根據(jù)所述軟件的功能層次結(jié)構(gòu),在所述數(shù)據(jù)庫中以對應(yīng)的目錄結(jié)構(gòu)存儲所述接口信息? 其中,所述接口信息以可擴展標(biāo)記語言文檔存儲,并分配有唯一的注冊標(biāo)識。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟104包括 根據(jù)所述服務(wù)接口,將所述插件的相關(guān)信息存儲在所述數(shù)據(jù)庫中。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述相關(guān)信息包括所述插件的類型、實時 性、執(zhí)行順序、執(zhí)行事務(wù)類型和物理綁定信息。
6.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟106包括注冊所述功能函數(shù)的調(diào)用方式,根據(jù)所述接口信息生成訪問接口,再根據(jù)所述訪問接 口和所述功能函數(shù)的訪問綁定信息生成調(diào)用代理,最后根據(jù)所述調(diào)用方式發(fā)布所述服務(wù)接 Π,其中,所述調(diào)用代理攔截對所述功能函數(shù)的訪問,并使用所述訪問接口觸發(fā)所述插件 來連接所述服務(wù)接口,以調(diào)用所述功能函數(shù),所述訪問綁定信息位于所述接口信息中。
7.一種擴展軟件應(yīng)用的裝置,其特征在于,包括 服務(wù)接口注冊模塊,用于注冊軟件的功能函數(shù)的服務(wù)接口 ; 插件注冊模塊,用于為所述服務(wù)接口注冊插件;發(fā)布模塊,用于發(fā)布所述服務(wù)接口,使外界通過所述插件調(diào)用所述功能函數(shù)。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述服務(wù)接口注冊模塊通過解析出所述 功能函數(shù)的接口信息,在數(shù)據(jù)庫中存儲所述接口信息,以注冊所述服務(wù)接口。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述服務(wù)接口注冊軟件模塊根據(jù)所述軟 件的功能層次結(jié)構(gòu),在所述數(shù)據(jù)庫中以對應(yīng)的目錄結(jié)構(gòu)存儲所述接口信息,其中,所述接口信息以可擴展標(biāo)記語言文檔存儲,并分配有唯一的注冊標(biāo)識。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述插件注冊模塊根據(jù)所述服務(wù)接口, 將所述插件的相關(guān)信息存儲在所述數(shù)據(jù)庫中。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述相關(guān)信息包括所述插件的類型、實 時性、執(zhí)行順序、執(zhí)行事務(wù)類型和物理綁定信息。
12.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述發(fā)布模塊注冊所述功能函數(shù)的調(diào)用 方式,根據(jù)所述接口信息生成訪問接口,再根據(jù)所述訪問接口和所述功能函數(shù)的訪問綁定 信息生成調(diào)用代理,最后根據(jù)所述調(diào)用方式發(fā)布所述服務(wù)接口,其中,所述調(diào)用代理攔截對所述功能函數(shù)的訪問,并使用所述訪問接口觸發(fā)所述插件 來連接所述服務(wù)接口,以調(diào)用所述功能函數(shù),所述訪問綁定信息位于所述接口信息中。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,還包括自動生成模塊,用于自動生成代碼以完成使用所述代理對所述功能函數(shù)的調(diào)用。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述自動生成模塊根據(jù)所述接口信息 生成創(chuàng)建所述代理的代碼,并根據(jù)所述接口信息中的參數(shù)信息生成所述功能函數(shù)的參數(shù)賦 值代碼,以及生成使用所述代理調(diào)用所述功能函數(shù)的代碼,生成調(diào)用所述代理獲得調(diào)用所 述功能函數(shù)的結(jié)果的代碼。
全文摘要
本發(fā)明公開了一種擴展軟件應(yīng)用的方法,包括步驟102,注冊軟件的功能函數(shù)的服務(wù)接口;步驟104,為服務(wù)接口注冊插件;步驟106,發(fā)布服務(wù)接口,使外界通過插件調(diào)用功能函數(shù)。本發(fā)明還公開了一種擴展軟件應(yīng)用的裝置,包括服務(wù)接口注冊模塊,用于注冊軟件的功能函數(shù)的服務(wù)接口;插件注冊模塊,用于為服務(wù)接口注冊插件;發(fā)布模塊,用于發(fā)布服務(wù)接口,使外界通過插件調(diào)用功能函數(shù)。因此,可以實現(xiàn)一種可以實現(xiàn)抽取、發(fā)布和擴展功能服務(wù)的方法和裝置,以幫助現(xiàn)有軟件系統(tǒng)建立標(biāo)準(zhǔn)的服務(wù)接口體系,也可以用于支持對原有的軟件系統(tǒng)進(jìn)行個性化的插件擴展。
文檔編號G06F9/44GK101847100SQ20101019986
公開日2010年9月29日 申請日期2010年6月8日 優(yōu)先權(quán)日2010年6月8日
發(fā)明者袁昌龍 申請人:用友軟件股份有限公司