1. 程式人生 > >商務參考體系結構:企業對消費者 (B2C電子商務實踐) 第 6 章:解決方案指南

商務參考體系結構:企業對消費者 (B2C電子商務實踐) 第 6 章:解決方案指南

<!--- end left ---><!--- start main --->

商務參考體系結構:企業對消費者

第 6 章:解決方案指南
Microsoft Corporation
2001年5月

摘要:本章概要介紹瞭解決方案實現元件,其中包括:應用程式的高階圖形表示法、關於 PASP 檔案和 XSLISAPI 過濾器如何發揮作用的說明、ConsolidatedRetail.com 應用程式中每種主要元件類別的說明。

簡介

參考體系結構應用程式包含許多自定義的 ASP 檔案和程式碼元件。本章後面的章節將詳細介紹這些檔案的原始碼。圖 6-1 直觀清晰地顯示瞭解決方案的各個元件及其相互關係。當閱讀本指南的其餘部分和檢視原始碼時,可將該圖作為基本參考資料。

圖 6-1:參考體系結構應用程式元件

正如您從該圖中所看到的那樣,使用者使用瀏覽器(在此為 Internet Explorer 5)來訪問該應用程式。網站中的 ASP 檔案作為預處理的 ASP(PASP 指令碼)實現,並使用 Commerce Server 2000 提供的可程式設計物件(如 ProductCatalogAuthManagerUserProfileOrderGroup)將資料傳送到 SQL Server 2000 中的 Commerce Server 站點資料庫和從該站點資料庫檢索資料。下訂單或檢視購物籃內容之類的業務流程通過 Commerce Server 管道實現。管道呼叫自定義 COM+ 排隊元件來處理電子郵件訊息傳送功能。每一網頁的輸出都用 XML 表示,然後由 XSLISAPI 2.1 過濾器擷取,而 XSLISAPI 2.1 過濾器將相應的 XSL 樣式表應用到內容,將內容作為 HTML 呈現。

本章的下一節將說明 PASP 檔案和 XSLISAPI 過濾器是如何發揮作用的,並提供了一個簡單示例作為參考。然後,本章會介紹每個主要元件類別在 ConsolidatedRetail.com 應用程式中是如何實現的。我們的討論採用了邏輯推理的方式,首先介紹 Web 服務,然後介紹 Commerce Server 物件,繼而討論管道元件。

PASP 檔案和 XSLISAPI 過濾器

Active Server Page (ASP) 通常用於生成 Web 解決方案的表示邏輯。在 ConsolidatedRetail.com 站點中,使用它們的方法略有不同。在該站點,大多數 ASP 檔案是作為預處理的 ASP(即 PASP

檔案)實現的。PASP 檔案將 XML 寫入響應物件,它由 XSLISAPI 過濾器擷取和處理。PASP 檔案中的指令碼用於呼叫 Commerce Server 2000 物件中的業務邏輯;而由 XSLISAPI 過濾器來處理表示形式。

XSLISAPI 過濾器對從 PASP 檔案生成的 XML 輸出進行語法分析,並檢查 <?xml-stylesheet...?> 處理說明。如果該處理說明包含引用 XML 配置檔案的 server-config 屬性,則 XSLISAPI 過濾器讀取該配置檔案,以確定應將哪個 XSL 樣式表應用於從 PASP 檔案生成的 XML 輸出。

XML 配置檔案包含有關應將哪個樣式表應用於特定客戶程式型別的資訊,如以下程式碼示例所示:

<?xml version="1.0" ?>
<server-styles-config>
  <!-- 對於 WML 1.1 瀏覽器 -->
  <device target-markup="WML1.1">
    <stylesheet href="mypage-WML11.xsl"/>
  </device>
  <!-- 對於 IE 4.0 瀏覽器 -->
  <device browser="IE" version="4.0">
    <stylesheet href="mypage-IE5.xsl"/>
  </device>
    <!-- 對於 IE 5.0 瀏覽器 -->
  <device browser="IE"  version="5.0">
    <stylesheet href="mypage-IE5.xsl"/>
  </device>
</server-styles-config>

IIS 只要檢查隨頁請求傳送的超文字傳輸協議 (HTTP) 請求標頭,就可以識別客戶程式。IIS 使用 WINNT\System32\Inetsrv 資料夾中 Browscap.ini 檔案的條目,可以識別許多普通瀏覽器。XSLISAPI 應用程式在名為 Browscap-add.ini 的檔案中為 WAP 電話之類的裝置提供附加條目,使用者應將該檔案複製並追加到 Browscap.ini 檔案。

簡單示例

以下簡單示例說明如何使用 XSLISAPI 過濾器來呈現由 PASP 檔案生成的 XML 輸出。

注意該示例旨在幫助您理解 XSLISAPI 過濾器的功能。它並不說明 ConsolidatedRetail.com 站點中的任何實際頁。

假定使用者使用 Internet Explorer 5 請求名為 Myproducts.pasp 的頁。系統將對該檔案中的指令碼進行解釋,然後通過以下響應物件返回下列 XML:

<?xml version="1.0">
<?xml-stylesheet type="text/xsl" 
                 server-config="productconfig.xml"
                 href="csproducts.xsl"?>
<productlist>
  <product productname="widget"/>
  <product productname="wrench"/>
</productlist>

現在,XSLISAPI 過濾器將對該 XML 進行語法分析,讀取 xml-stylesheet 處理說明,該說明包含以下三個屬性:

  • type:指要應用的樣式表的型別(在此為 XSL)。

  • server-config:指 XML 配置檔案,它定義要用於特定客戶程式的樣式表。

  • href:指在 server-config 檔案中沒有列出相應的樣式表時,客戶程式將下載並應用的預設樣式表。

然後,XSLISAPI 過濾器讀取指定的 server-config 檔案 (Productconfig.xml),該檔案包含以下條目:

  <device browser="IE" version="5.0">
    <stylesheet href="products-ie5.xsl"/>
  </device>

由於 IIS 已根據請求標頭識別客戶端瀏覽器為 Internet Explorer 5.0,現在,XSLISAPI 應用程式會將 Products-ie5.xsl 樣式表應用於從 Myproducts.pasp 檢索到的 XML。

假定 Products-ie5.xsl 樣式表包含以下 XSL 程式碼:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0">
  <xsl:template match="/">
    <HTML>
      <TITLE>產品目錄</TITLE>
      <BODY>
        <TABLE>
          <xsl:for-each select="productlist/product">
            <TR><TD>
              <xsl:value-of select="@productname"/>
            </TD></TR>
        </TABLE>
      </BODY>
    </HTML>
  </xsl:template>
</xsl:stylesheet>

該樣式表將應用於從 Myproducts.pasp 得到的 XML 資料,從而生成以下 HTML,該 HTML 將傳送到瀏覽器:

<HTML>
  <TITLE>產品目錄</TITLE>
  <BODY>
    <TABLE>
     <TR><TD>小機械</TD></TR>
     <TR><TD>扳手</TD></TR>
    </TABLE>
  </BODY>
</HTML>

顯然,在 ConsolidatedRetail.com 之類的實際電子商務解決方案中,由 PASP 檔案生成的 XML 以及用於呈現該 XML 的 XSL 樣式表要遠比該簡單示例複雜得多。不過,原理是相同的。

網站檔案

此處介紹一些 ASP 和 PASP 頁以及相應的 XSL 檔案,它們在 ConsolidatedRetail.com 零售站點的使用者介面中經常用到。如前文所述,該應用程式所用的許多 ASP 指令碼都是作為 PASP 指令碼來實現的,該 PASP 指令碼將 XML 輸出提交給 XSLISAPI 過濾器。一些常規的 ASP 指令碼還用作非顯示指令碼,接受來自其它頁的貼子。

每個 PASP 頁都有一個相關的<頁名>-config.xml 檔案,XSLISAPI 過濾器使用該檔案來確定要用於特定客戶程式型別的相應樣式表。在本實現方案中,只提供了<頁名>-ie5.xsl 檔案,以使用與 Microsoft Internet Explorer 5.5 相容的 HTML 形式來呈現頁。為使輸出能用於其它瀏覽器或裝置,可以建立其它 XSL 檔案。

初始化頁和包含檔案

ConsolidatedRetail.com 站點使用以下初始化指令碼和包含檔案:

  • Global.asa:Global.asa 是一種 Web 應用程式初始化指令碼,它定義在 Web 應用程式的生存期中發生關鍵事件時要採取的措施。

  • /include/Site_Const.asp:該檔案定義了許多常量,站點上的所有頁都包含該檔案。

  • /include/Common.asp:該檔案定義一些函式,這些函式用於呈現 XML 標記形式的資料。站點上的所有 PASP 頁都使用該檔案來生成將傳送給 XSLISAPI 過濾器的 XML。

  • /include/Profile.asp:該檔案包含執行以下操作的所有函式:驗證使用者身份、給使用者註冊或登出使用者、檢索或更新使用者的個人配置檔案。

  • /include/basket.asp:該檔案提供使用者建立和維護購物籃(即在瀏覽產品目錄期間累積訂單)時所需的函式。

  • /include/UI_layout-IE5.xsl:該 XSL 樣式表提供表示邏輯,用於呈現站點中各頁的標準佈局形式。所有頁專用的 XSL 檔案都包含該樣式表,以確保站點呈現出統一的外觀和行為。

目錄瀏覽頁

ConsolidatedRetail.com 零售站點使用以下與目錄相關的頁:

  • Default.asp:該頁將使用者重定向到站點的主頁 (Index.pasp)。由於 Default.asp 是 ASP 應用程式的傳統起始頁名,所以將其置於此處,以將所有對 Default.asp 的請求重定向到應用程式的真正起始頁。

  • Index.pasp:Index.pasp 是應用程式的預設起始頁。當您只輸入站點名而沒有附加路徑資訊時,就會顯示該頁。當任務完成或出現錯誤時,若干其它頁也會重定向到該頁。

  • Category.pasp:該頁為特定的頁生成 XML,在這一特定的頁中,使用者可以檢視給定產品目錄特定類別中的產品和子類別。

  • Product.pasp:該頁為特定的頁生成 XML 內容,在這一特定的頁中,可以顯示產品目錄中有關單個產品及其所有變體的詳細資訊。

  • SearchResults.pasp:當用戶在產品搜尋框中輸入搜尋標準時,該頁接收輸入內容,然後搜尋與關鍵詞匹配的產品,並將相匹配的產品列表返回給使用者。

使用者身份驗證和配置檔案管理頁

ConsolidatedRetail.com 零售站點使用以下使用者身份驗證和管理指令碼:

  • Registration.pasp:使用該頁,使用者可以在站點註冊。

  • Login.pasp:使用該頁,已註冊的使用者可以登入到站點。

  • ForgotPasswd.pasp:通過該頁,使用者能夠請求站點用電子郵件將口令傳送給自己。

  • Acct.pasp:該頁顯示當前已登入的使用者的帳戶詳細資訊。

  • UserProfile.pasp:在該頁,使用者可以編輯自己的配置檔案。

  • AddressBook.pasp:在該頁,使用者可以檢視並更新地址簿,其中包含發貨地址和付款地址。

訂單管理頁

ConsolidatedRetail.com 零售站點使用以下訂單管理頁:

  • orderhistory.pasp:該頁檢索和顯示當前使用者的訂單歷史記錄,允許使用者檢視自己在該站點購買的所有商品。

  • orderhistorydetail.pasp:該頁顯示使用者的訂單歷史記錄中特定訂單的詳細資訊。

  • Basket.pasp:該頁顯示當前使用者的購物籃內容,具體而言,就是與使用者當前會話相關的 OrderGroup 物件中包含的產品。

  • Ordersummary.pasp:儘管該頁的顯示結果與 basket.pasp 頁的顯示結果大不相同,但是該頁的指令碼以及由指令碼生成的 XML 內容卻與 basket.pasp 頁非常相似。

  • Shipping.pasp:當用戶單擊購物籃頁的“結帳”連結或單擊任何頁頂部的“結帳”連結時,都將呼叫該頁。使用者在該頁可以指定訂單的發貨地址。

  • ShippingMethod.pasp:在該頁,使用者可以選擇訂單的發貨方法。

  • MultiShipping.pasp:在該頁,使用者可以為同一訂單中的多個專案指定不同的發貨地址。

  • ThankYou.pasp:在該頁,通過執行一系列的 Commerce 管道程序,完成本應用程式的 Commerce Server 部分的訂單處理工作。

Commerce Server 物件

本解決方案的另一重要特性在於將 Commerce Server 2000 可程式設計物件用於業務處理。任何能識別 COM 的客戶程式(如 ASP 指令碼)都可使用這些物件,以便檢索站點資料庫中的資料或執行驗證使用者身份之類的任務。在第 7 章中介紹站點提供的功能時,將詳細探討這些物件的用途。在這裡,只簡單介紹一下 ConsolidatedRetail.com 應用程式中使用的幾個關鍵 Commerce Server 物件。

實用程式和配置物件

電子商務站點是一種相當複雜的應用程式,要求能提供各種資訊和功能。為了簡化電子商務解決方案的開發,Commerce Server 2000 提供了很多物件,它們可用於管理站點配置資訊以及提供整個站點都可使用的一般功能。

事實上,Commerce Server 解決方案中所用的許多物件都是 Dictionary 物件或 SimpleList 物件。這些都是通用物件,可用來維護名稱/值對的集合。例如,在 ConsolidatedRetail.com 應用程式中,Dictionary 物件用於儲存站點所用管道的集合。有關 Dictionary 和 SimpleList 物件的詳細資訊,請參考 Commerce Server 2000 文件。

ConsolidatedRetail.com 應用程式在整個站點中使用以下實用程式和配置物件:

  • AppConfig:這是 Commerce Server 應用程式配置物件,它提供可用於檢索站點配置情況的方法。其中包含 Options 字典物件,該物件可用於儲存站點的各種配置選項。在 ConsolidatedRetail.com 站點中,選項字典用於儲存資料來源連線字串和其它配置資訊。

  • DataFunctions:這是定義資料格式的物件,存放有關站點區域設定、貨幣和其它與資料相關的問題的資訊。該物件還提供處理資料型別特有任務的方法,如刪除字串中的空格或將資料從一種型別轉換成另一種型別。

  • GenID:這是實用程式物件,用於生成全域性唯一識別符號 (GUID)。當需要提供唯一 ID 來標識指定專案時,這些識別符號非常有用。

  • AppFramework:這是用於簡化 HTML 窗體處理的實用程式物件。

  • MessageManager:該物件用於儲存多語種錯誤訊息,以供管道元件使用。

  • CacheManager:該物件用於管理站點的資料快取記憶體。如果將目錄、發貨方法、使用者配置檔案等資料進行快取記憶體,可顯著提高系統性能。

  • DictionaryXMLTransforms:該物件使用特定的 XDR 架構,實現 Dictionary 物件的內容與 XML 兩者之間的相互轉換。

  • 有關 AppConfigDataFunctionsGenIDAppFrameworkMessageManagerCacheManager 和 DictionaryXMLTransforms 物件的詳細資訊,請參考 Commerce Server 2000 文件。

目錄物件

能夠從與站點相關的目錄檢索產品資訊,這是電子商務站點中的網頁必須完成的常見任務之一。Microsoft® Commerce Server 2000 支援在單個站點中使用多個目錄。您可以用巢狀的類別將目錄組織成一個分層結構,可以定義目錄的任何級別(包括根)上的產品。另外,您還可以在分層結構中的任何位置,將任何類別或產品與其它類別或產品關聯起來。例如,可將“軟體”類別中名為 Windows® 2000 Server 的產品與“書”類別中名為 The Windows 2000 Server Administrators Guide 的產品關聯起來。這樣就能輕鬆地建立到相關產品或類別的連結,創造交叉銷售的機會。圖 6-2 顯示了 Commerce Server 2000 支援的目錄結構。

圖 6-2:Commerce Server 2000 目錄結構

使用 Commerce Server Business Desk,您既可以從頭開始建立目錄,也可以從 XML 或 CSV 檔案匯入目錄。有關如何使用 Business Desk 管理目錄的詳細資訊,請參考 Commerce Server 2000 文件。

Commerce Server 中的另一項目錄支援功能是您可以建立“目錄集”。目錄集是指一個或多個目錄的集合,基於使用者配置檔案中的屬性而將這些目錄分配給特定使用者類。例如,您可以建立一個目錄集,其中包含一些價格可打折的目錄,以便為參與忠實客戶計劃的使用者提供優惠。對於未分配目錄集的使用者,Commerce Server 站點包含為匿名使用者提供的預設目錄集以及為通過了身份驗證的使用者提供的預設目錄集。

通過以下 Commerce Server 自動化物件可以提供對目錄資料的程式訪問:

  • CatalogManager:該物件代表整個目錄管理系統。

  • CatalogSets:通過該物件可以訪問站點中定義的目錄集。

  • ProductCatalog:該物件代表特定目錄。

  • Category:該物件代表目錄中的類別。

  • Product:該物件代表產品。

上述物件提供了瀏覽站點的整個目錄分層結構的方法。這些物件提供的許多方法和屬性都返回 ADO 記錄集,其中包含目錄、類別或產品資料。

對於任何目錄資料,必須先使到站點資料來源的連線初始化,才能訪問它們。通常,要完成此操作,必須呼叫 CatalogManager 物件的 Initialize 方法,將到站點資料庫的 ADO 連線字串或站點名作為引數傳送。

有關 CatalogManagerCatalogSetsProductCatalogCategoryProduct 物件的詳細資訊,請參考 Commerce Server 2000 文件。

使用者管理物件

Commerce Server 提供了若干物件,用於在使用者與站點互動時管理使用者資訊和狀態。這些物件包括:

  • AuthManager:該物件用於處理與安全性相關的功能,允許使用者進行身份驗證並登入,提供標識特定使用者所作請求的方式。

  • ProfileService:該物件用於連線到資料來源,那裡儲存著與站點的已註冊使用者相關的配置檔案資訊。

  • ProfileObject:該物件用於封裝特定使用者的配置檔案資料,並可用於設定或檢索以下值:“姓名”、“電話號碼”、“電子郵件地址”或其它任何需要跟蹤的使用者屬性。

有關 AuthManagerProfileServiceProfileObject 物件的詳細資訊,請參考 Commerce Server 2000 文件。

購物籃物件

當用戶找到需要購買的產品時,允許使用者將產品放入購物車或購物籃是網站的平常之舉。事實上,購物籃概念只是軟體物件的比喻說法,它代表使用者在訪問過程中選擇的專案集合。

Commerce Server 2000 提供了以下物件用於購物籃的管理。

  • OrderGroup:該物件代表購物籃。

  • OrderForm:該物件代表購物籃中的專案集合。OrderForm 物件是作為 Dictionary 物件實現的,它包含訂單的總體資訊,而 SimpleList 物件則包含代表購物籃中單個專案的專案 Dictionary 物件。Addresses SimpleList物件用於儲存地址 Dictionary 物件的集合,代表與訂單相關的發貨地址和付款地址。

有關 OrderGroupOrderForm 物件的詳細資訊,請參考 Commerce Server 2000 文件。

管道

Commerce Server 2000 解決方案一般使用管道來處理業務。管道由一系列 COM 元件組成,這些元件將對 OrderForm 之類的業務物件進行操作。管道中的元件以及呼叫這些元件的順序,在管道配置檔案 (*.pcf) 中指定。您可以將管道視為一種生產線,其中每個元件執行特定的任務,然後再將業務物件傳送給下一個元件。

ConsolidatedRetail.com 使用名為 PAGBasket.pcf、Total.pcf 和 Final.pcf 的三個管道。有關對它們的引用儲存在應用程式級的 MSCSPipelines 字典變數中,分別為 PAGBasketPAGTotalPAGFinal。這些管道執行的特定程序將在以後討論站點的功能時介紹。

管道元件

管道中的元件是實現 IPipelineComponent 介面的 COM 元件。該介面提供 Execute 方法,可以將字典物件傳送給該方法。將 OrderForm 之類的業務物件依次傳送給管道中每個元件的 Execute 方法,就可以實現業務流程。

Commerce Server 提供了大量可用於電子商務站點的管道元件。這些物件用於將折扣應用到訂單、徵收稅金、安排發貨等等。此外,您還可以建立自定義的管道元件來執行特定任務。ConsolidatedRetail.com 站點包含以下兩個自定義管道元件:

  • PersistUtility:該自定義管道元件用於將 OrderGroup 物件的非永續性屬性複製到永續性屬性。通常,以下劃線開頭的 OrderGroup 物件屬性都是臨時值,在管道處理結束時,會毀壞這些值。由於本應用程式會將訂單窗體匯出到 Commerce Server 領域外,因此,需要保留一些通常被丟棄的 OrderGroup 值,以便提供外部處理時的上下文。PersistUtility 會將一些帶下劃線的屬性複製到不帶下劃線的名稱中,這樣在管道處理完成後,這些值仍然存在著。

  • PipelineQueue.QueueEMail:該自定義管道元件從訂單窗體中獲取資料,將這些資料轉換成 XML,然後使用 QueuedEMailer.CMailer 元件(將在“自定義業務元件”一節中介紹)將電子郵件訊息傳送給使用者。

自定義業務元件

您可以建立一些自定義業務元件,給解決方案新增其它自定義功能。ConsolidatedRetail.com 站點就包含一個自定義業務元件:QueuedEMailer.CMailer。QueuedEMailer.CMailer 是一個自定義的 COM 元件,用於給使用者傳送電子郵件。進行訂單確認或忘記口令時,需要使用該元件。該元件作為 COM+ 排隊元件實現,通過訊息佇列可非同步呼叫其方法。這樣,使用者會話不必等到電子郵件處理完畢即可繼續,從而縮短了響應時間。

總結

本章簡要介紹了參考體系結構應用程式中的主要程式碼類別,同時提供了一些實際程式碼片段作為參考。此時,您應該對程式碼的構成方法有了一個基本概念。

下一章將詳細介紹 ConsolidatedRetail.com 應用程式的每一層,同時提供一些虛擬碼和實際程式碼示例來說明處理流程。