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

字號(hào):

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