在當今使用XML解決真正的商業(yè)問題

字號:

商業(yè)問題
    XML的力量存在于它的“eXtensibility 可擴展性(譯注:XML的全稱是eXtensible Markup Language)”...但是這也能證明這是很多組織所難于克服的障礙。
    在這個案例中,我們的電子商務網(wǎng)站是在兩個不同的伙伴之間外包某種類型訂單的履行業(yè)務。一個通常的情況是,這兩者都想要訂單是同一種XML格式,但兩種格式就是有著非常大的不同。此外,伙伴B需要我們將XML訂單文件放在FTP目錄中的同時,伙伴A要求將XML直接發(fā)送到他們的服務器上。從那里,他們能獲得數(shù)據(jù)。
    所以就有如下三個挑戰(zhàn):
    一、我們不得不自動發(fā)送訂單數(shù)據(jù)到外部的服務器
    二、我們不得不為每個伙伴準備不同的數(shù)據(jù)格式
    三、并且,我們將使用不同的方法傳送數(shù)據(jù)
    這真的不好
    不久就會有各種各樣的系統(tǒng)被放置于這個任務中。解決方案 ,諸如BizTalk 、SOAP和SQL 2000會加進許多。BizTalk還不可用。SOAP也不會有什么幫助,而且,使用SOAP需要雙方簽訂協(xié)議統(tǒng)一使用它。再有,SQL 2000會使我們很容易生成從訂單數(shù)據(jù)庫中生成XML.說這些系統(tǒng)會工作在一起只是對將來的承諾,而作為一個開發(fā)者,我們今天需要理解一些技巧。
    盡管,我們并未準備好使用任何這些解決方案。在以某種方式設計我們的應用時,對我們感覺有能力地方的著手一試,還是值得的。
    解決方案
    這篇文章將討論使用VB、SQL Server 7.0、XML和XSL(譯注:XSL是可擴展樣式表語言,全稱是 eXtensible Stylesheet Language)建立一個健壯的和靈活的伙伴間訂單處理系統(tǒng)以適應當前的需求,并且自身是可擴展的。
    此處理過程包括以下三個獨立的步驟。(為了演示的方便,所有步驟都包括在一個可執(zhí)行文件中)
    步驟一:建立內(nèi)部的XML訂單文檔 在第一步中,系統(tǒng)從 SQL 服務器的數(shù)據(jù)中建立XML文檔。內(nèi)部XML文檔位于內(nèi)部發(fā)信信箱中。   
    步驟二:建立待發(fā)送的訂單XML文檔 對每一個在第一步中建立的內(nèi)部的XML訂單文檔,將其與合作伙伴指定XSL表合并來建立待外送的訂單文檔。這個文檔包括兩個主要的部分,標題和數(shù)據(jù)包。標題包含發(fā)送數(shù)據(jù)包的所有信息。數(shù)據(jù)包則是跟據(jù)合作伙伴指定的規(guī)范格式化的XML數(shù)據(jù)。當?shù)诙酵瓿蓵r,所有的待發(fā)送訂單文檔被儲存在合作者輸出目錄。   
    步驟三:分發(fā)數(shù)據(jù)包 對每一個在合作者輸出目錄中的訂單文件,系統(tǒng)讀取標簽中的發(fā)送方法和其對應的參數(shù)。它將數(shù)據(jù)包發(fā)給知道如何使用指定的方法分發(fā)XML文檔的運行進程。當?shù)谌酵瓿?,外送的文檔被儲存在合作者檔案目錄中。
    這個系統(tǒng)的特性之一是往后加入一個新的合作伙伴到系統(tǒng)中只需做少量的工作。甚至,一個未來的伙伴需要我們發(fā)送一個CSV文件到其指定的電子郵件地址時,我們只要寫一個XSL文件就可以解決大多數(shù)問題。同樣容易的是,我們能夠分發(fā)一個HTML報表,一個Excel電子表格或是一個純文本的Email消息。
    開始工作
    這個處理程序是一個VB可執(zhí)行文件,叫做PartnerOrderProcess.exe。在每一步,程序使用Filesystem 對象讀取并移動XML文件。因此為了給應用程序足夠的信息還需要完成這些任務,一個XML文件AppInit.xml 與exe文件在同一個目錄中 ,文件中包括所有的不同種類文件的系統(tǒng)位置。這個例子應用程序中的設置如下:
    (說明:雖然在本文包括的例子中這些目錄位置是在AppInit.xml文件中直接給出的,但是還有其它幾種方法。例如,你可以寫一個簡單的VB程序為你生成AppInit.xml文件。另一種增強的AppInit.xml還可包括無DSN的連接字符串。)
    這個簡單的應用程序覆蓋兩個例子。為了使之更吸引人和演示一些有趣的例子,第一個案例要求我們的處理程序發(fā)送訂單文件到合作者指定的URL地址。但是我們打算從表單中以字符串變量的形式發(fā)送XML數(shù)據(jù),并且通過HTTP協(xié)議監(jiān)聽回程信息。合作者將通過HTTP流格式返回XML數(shù)據(jù)。這例給出的例子代碼利用了微軟的XMLHttp對象來發(fā)送和監(jiān)聽回應。
    第二個案例要求我們簡單地復制為合作者準備的XML文件到不同的本地目錄。這是很靈巧的,舉例來說,你可能需要將文件放置在FTP目錄中,或者是你想要從中動態(tài)地建立Web報表的目錄。