史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 網路軟硬體架設技術文件
忘記密碼?
註冊帳號 論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-06-21, 01:55 PM   #1
mic64
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設 B2B(Business-to-Business)電子商務

概論


B2B(Business-to-Business)電子商務為一種在兩個企業之間以電子方式進行交易的系統。當兩家企業以此種模式進行交易時,彼此都可以獲益於減少通信時間、降低成本,以及其他好處。

因為電子商務包括了機密資訊的交流,所以B2B網站必須是安全無虞的。因此企業進行交易的對象必須是值得信賴的個體,常稱為 電子夥伴1 (e-Partner)。只有e-Partner能獲得存取安全與機密企業資訊的權限。

定義B2B電子商務3


價值鏈的觀念。

介紹B2B電子商務。

B2B電子商務所帶來的益處。

B2B電子商務的運作情境。

B2B電子商務與B2C電子商務。

典型的企業組織是由幾個主要的與支援的機能單位所組成,並共同運作讓企業能夠平順地執行各項作業。例如,一個提供服務的組織可能有一個單位專門負責為客戶提供服務,而另一個單位則負責儲存客戶的資訊與資料。另外,此服務組織可能也有人力資源、資訊系統、與財務等單位,負責支援組織的主要機能單位。組織中所有單位共同合作,提供客戶價值與滿意度。

為了提供客戶附加價值,企業必須緊密地與廠商保持聯繫。為此,許多企業現在開始朝電子商務發展,以促進企業之間的交易。4

價值鏈的觀念


典型企業的主要活動為設計、製造、行銷、運送,與提供產品或服務的支援。每項活動都會提高成本,也會增進該產品或服務帶給顧客的價值。像這樣一連串以增進顧客滿意度為主的活動稱之為 價值鏈 (value chain)。7
下圖描述了多數企業中所執行的各項主要工作:




價值鏈


價值鏈定義了企業中增加成本與價值的五項主要與四項支援活動。

例如,在製造業中主要活動有:

獲得原料。

將原料轉換成產品。8

將產品運送至零售商或批發商。

銷售產品。

提供售後服務。

而支援活動則有:

為上述各項主要活動取得不同的資源。

開發新技術。

人力資源管理。9

底層架構管理。

提供顧客價值與滿意度


為了保持競爭力,企業必須經常評估價值鏈中各項活動的成本與效能,並尋求降低花費與增進效率之道。企業的成功乃是取決於各部門如何有效運作,以及各部門間的活動能否協調合作。

為了確保有優良的客戶服務,企業必須有效地管理核心企業程序。這些程序包括有:

在預算範圍內快速地研究、開發、生產優良的新產品。

對原料、半成品,與成品等做成適當庫存清單,並予以發展、維護。

接受訂貨、準時運送,與收受貨款等活動。10

提供快速且令人滿意的服務,並對客戶的疑問做出適當的回答。

透過自動化降低成本與增進效率


為了改善對顧客的服務及其滿意度,企業必須將價值鏈中每一項活動的成本降至最低,並增進其效能。要達成這項目標,企業可以藉著將下列單位間的互動予以自動化來進行:

企業中的各項機能單位(主要的與支援的)。

企業與其供應商。

企業與其客戶。

利用下列方法將這些互動予以自動化以降低成本,並增進客戶的滿意度:11
減短作業時間。

減低庫存清單。

快速反應客戶疑問。

改善企業中各單位間的資訊與資料交換。

介紹B2B電子商務


各類規模的企業正快速地透過網際網路、企業內部網路、外部延伸網路與私有的附加價值網路等朝電子通信邁進,以期能夠增進企業之間的往來互動。12
B2B電子商務


將購買者與販售者之間進行交易所使用的所有程序予以自動化便是B2B電子商務。這些程序包括了在網站上以線上交易的模式將產品與服務賣給其他企業。

當購買者與販售者之間透過電子方式進行互動時,彼此的回應時間變得更快,尤其當使用標準通信規格時更是如此。例如,倘若製造商將產品的採購訂單格式標準化,那麼在接收及處理訂單的程序上也能予以標準化。一種將電子商務交易標準化的方法便是使用 電子數據交換 (Electronic Data Interchange , EDI)。EDI將組織內部與組織之間的互動予以標準化,因而可增進產能,並降低作業成本。

B2B電子商務網站範例


Microsoft Market (MS Market) 範例網站是一個以Microsoft內部的組織採購網站為基礎所建構的B2B電子商務網站。在網站上,員工可以透過瀏覽器直接向不同國家的不同供應商直接訂購行政用品及辦公室所需文具。網站會藉著提供直接連結到個人喜好的廠商產品目錄,核對簽名授權等級,確認帳號與密碼,並儘可能自動地在採購訂單上提供資訊等服務來節省員工的時間。13
當員工送出訂單,MS Market會產生訂單編號以供查詢,寄送電子郵件通知管理者,並將訂單傳送給廠商以履行交易。

B2B電子商務所帶來的益處


電子商務為企業帶來了商務程序整合的好處。例如,採購部門從廠商取得產品目錄,並在企業內部網站上將目錄提供給使用者。使用者便可以瀏覽目錄,購買商品。 訂購產品與產生帳單的程序都是自動化的。而使用者可以購買的數量亦可被定義,為成為自動化程序的一部份。

下面的圖說明了五項電子商務所帶來的好處。




直到最近,只有較大型的企業在他們的營運中利用電子商務。然而,時至今日,隨著網際網路的蓬勃發展,已經讓電子商務變得更實際,更為一般小企業可以負擔得起。各類規模的企業目前都可以透過網際網路、企業內部網路、外部延伸網路與私有的附加價值網路等與其他企業進行電子溝通。14
下面介紹的是公司行號實施B2B電子商務的幾項重要原因。

降低採購成本


企業可以藉著與主要的供應商建立關係,從數量的折扣上獲利來降低採購成本。網際網路讓企業與那些願意以較低價位來販售原料的新供應商、小供應商或中型供應商進行電子交易變為可能。網際網路同時也降低了處理成本,並且從那些願意在線上出價競標的買家中開啟了新的交易機會。

縮短商務運作的循環時間


藉著與供應商及顧客之間建立數位連結,企業可以將傳送與接收採購訂單、發票,以及送貨通知等的時間予以縮短。

與供應商、廠商及顧客之間的數位連結同時也讓企業可以維持最低的投資,大幅降低相關的成本。

更有效率的客戶服務15


從事電子商務的企業提供了有關產品、技術支援與訂貨狀態等的線上資訊。如此一來,可將負責客戶服務的員工轉至處理較複雜問題、維繫與客戶之間關係等,以節省開支。而線上資訊的提供,讓客戶能夠輕鬆地取得,也會提昇顧客的滿意度。

降低交易與行銷成本


在網路上實施電子商務可以在不增加成本的情況下,吸引新的顧客。這是因為企業的交易功能是存在於電腦伺服器,而不是靠真正的商店或銷售人員。企業交易的範圍僅僅受限於伺服器處理查詢與訂單的能力。

新的交易機會


網際網路並不會受到時間和地點的限制,所以實施電子商務的企業可以接觸到以前傳統商業或廣告活動所無法到達的新市場。藉著擁有線上交易,及為企業市場建立個人化服務,企業可以開發出更多有利的新市場,包括區域性的和全球性的。


--------------------------------------------------------------------------------
注意
這裡所描述的優勢只有在價值鏈中的所有活動都適當運作且企業處理程序達成整合時才會有效。


--------------------------------------------------------------------------------
16
B2B電子商務的運作情境


目前有數種常見的電子商務運作形式。

下面介紹三種主要的B2B電子商務運作情境。




下面是目前常見的商務運作情境:

情境1:組織採購


組織採購17 (corporate purchasing)指的是購買公司內員工所需使用的物品。這些物品並不是用在製造或生產程序。組織採購一般需要文件表格的處理與採購經理的核准。將這個程序自動化可以降低管理負擔、相關的處理成本,以及所有用來支援文件導向系統的資源。

例如,MS Market允許任何員工參觀Web-based的「供應商購物中心」,或說是電子化的購物區。MS Market是一個介於Microsoft與廠商之間可以大幅增進效率的虛擬企業。

情境2:供應鏈交易


供應鏈交易 (supply chain trading)指的是產品的販售,而這些產品包括了企業製作產品的原料,以及製作完成準備銷售的成品。在今日,大多數的企業都是透過電話、傳真,與郵件來進行供應鏈交易。

例如,假設有一家名為Volcano Coffee的企業,是一家國際性販賣咖啡與茶的連鎖販售商。此公司需要從Cascade Coffee Roadsters公司訂購大量的咖啡豆,以及從Margo Tea公司訂購大量的茶業以供使用。Cascade Coffee Roadsters可能沒有足夠的存貨來履行這份訂單,所以需要向East Indonesia Coffee公司購買部分的咖啡豆。類似這樣的情境就是提供供應鏈交易的一個例子,其範圍甚至可以擴展至任意數量的交易夥伴。

情境3:直銷18


企業可以在網站上使用 直銷 (direct marketing)來聚集消費者的自發性採購。

例如,1-800-FLOWERS可透過其他廣受歡迎的網站來為自身在網際網路中作宣傳。而讓這些網站願意為1-800-FLOWERS網站宣傳的誘因是他們可以對每一筆透過他們網站成交的交易收取佣金。每一個網站或e-Partner都會擁有一個唯一的編號。此外,每一筆交易訂單也都會紀錄相關的ePartnerID。這樣便能讓1-800-FLOWERS計算該提供給交易夥伴的佣金。


--------------------------------------------------------------------------------
提示
ePartnerID是一個變數名稱。


--------------------------------------------------------------------------------

B2B電子商務與B2C電子商務19


利用電子購物商場與虛擬店面的形式,讓顧客可以在線上利用信用卡付費,所以B2C電子商務實際上是反應出真實世界的購物經驗。

而在B2B電子商務中,交易則是發生在私人的網路上。這些交易只限定內部的消費者與企業夥伴,而付款部分則是根據預先設定好的信用方式來進行。

下面的表格列出了這兩種電子商務的主要特性。

種類 特性
B2C 以網際網路為基礎20
不受限制的存取

使用驗證過的信用卡付款

B2B 以外部延伸網路(extranet)為基礎

只限企業夥伴使用

以預先定義的信用方式付款

電子目錄21
防火牆防護、密碼、驗證、加密與授權

利用EDI進行交易


範例網站導覽


B2B電子商務的網站應該不只安全與容易使用,而且也應該讓交易夥伴獲益,如降低成本、提高交易安全等。在這一節裡,你將學到一個有效的B2B電子商務網站的主要特性。接著,你將瀏覽一個電子商務網站的範例。

B2B電子商務的需求


一個成功的B2B網站在設計上應該是容易使用的,並且能在最短時間內將所需要的資訊傳送給使用者。此外,網站也必須是安全的,避免惡意攻擊而造成傷害;與交易相關的資訊也應該僅能讓經授權的e-Partner使用。因此,電子商務的實作必須包含以下的關鍵需求。

下面介紹了在建構一個成功的B2B電子商務解決方案時所需要注意的四項主要需求。22



電子目錄


大多數實施電子商務的企業必須建立 電子目錄 (electronic catalog),同時應該內含先進的搜尋功能以幫助e-Partner快速地搜尋與比較產品。

安全存取


電子商務網站必須包括安全性的考量,如顧客、e-Partner,以及操作人員等對網站存取權的控管。23
以標準為基礎的解決方案


企業必須投資開放式、標準的作業平臺與協定。如此可以降低風險,並確保一個完整的系統內各個不同元件可以達到最大程度的合作。

更簡單、低成本的企業文件交換


企業需要支援各個交易夥伴間結構化商業文件的溝通。例如ANSI x.12交易集。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 01:57 PM   #2 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

B2B網站的安全問題


安全問題是所有B2B電子商務最重要的部分。沒有企業會願意將公司的機密資料洩漏給大眾。所以將資訊設限,僅讓經過授權的人員使用是絕對必要的。例如,顧客不會希望他們的信用卡號碼或其他個人資訊被可能誤用的第三者取得。

在 <SSL與SET概觀>39 中,你將學到用來確保安全交易的協定。

在 <實作安全的方法> 中,你將學到保護網站安全的方法。

SSL與SET概觀


在電子商務網站中,各類不同型式的協定可被用來保護企業與客戶之間或是企業與企業之間交易的安全。下面介紹的就是最常使用的兩種協定。40
Secure Sockets Layer (SSL)


SSL是一種在網際網路上傳送私人文件的防護協定。其運作模式是透過使用私鑰(private key)來對傳送於SSL連結中的資料作加密。它提供了資料加密、伺服器認證、訊息整合,以及選擇性地針對TCP/IP連結的客戶端認證的功能。

HTTP,又稱超文件傳輸協定,是用來在網際網路上傳輸資料的協定。HTTP可以利用SSL在用戶端與伺服端之間建立一條安全連結,任何數量的資料都可透過這條連結安全地被傳送。這種HTTP與SSL協定的結合稱為HTTPS或HTTP Secure。而運用HTTPS的網頁其位址的起始格式為https://,而不是http://。

Secure Electronic Transaction (SET)


SET是保障網際網路上信用卡交易安全的標準。藉著使用數位簽名,SET讓商家可以對相關的購買者進行驗證。而藉由將購買者的信用卡號碼直接傳送至發卡中心作驗證與記帳的機制,SET同時也保護了消費者。因為商家並不會真正看到購買者的信用卡號碼。


--------------------------------------------------------------------------------
提示
SET是一個還在發展的規格。因為某些SET的實作並不符合規格,所以SET並未廣泛被運用。


--------------------------------------------------------------------------------
41
實作安全的方法


B2B電子商務通常是發生在相互認識的交易夥伴之間。然而,當跨越任何形式的網路傳送敏感資料時,不但必須對傳送者及接收者作鑑定,同時也要維護資料本身的完整性與私密性。安全性的評估包括了企業交易的驗證,針對註冊過或被選定的使用者提供資源存取控管,如網站網頁等的控制、通信加密,以及確保交易的私密性與有效性。

下面介紹了四種構成有效安全的元素。




驗證


影響電子商務安全性最重要的一項因素就是 驗證42 (authentication)。驗證可以防範所有對設限資訊的未經認可存取,通常是透過密碼來實作。使用者在連結時,會被要求輸入帳號與密碼。

另外一種實作安全的方法是讓使用者從商家的網站上下載一份 數位認證 (digital certificate)到個人的電腦上。使用數位認證可確保連結是透過SSL的加密。同時,商家的伺服器會查核使用者的電腦以查看是否為經過授權而可以存取網站的帳號。

加密


加密 (encryption)確保資訊在網路上傳送時只能被有經授權的使用者閱讀或修改。在這個方法中,SSL會對傳送於使用者電腦與商家伺服器間的資訊進行加密,以維護資料在傳送時的完整性。43
授權


授權 (authorization)系統保證所有未經認可的使用者不能存取設限的檔案或資料。這些系統通常允許使用者安全地登入,接著使用者便可使用所有符合權限的應用程式與電腦。

防火牆防護


防火牆 (firewall)乃是一些軟體與硬體的結合,用來監視、過濾,及保護內部的組織網路或企業內部網路,避免未經授權的侵入。防火牆通常是以硬體為基礎的過濾系統,放置在入口或鄰接網路的轉接點。網際網路與企業內部網路安全問題的專家估計,防火牆約可防制百分之九十以上的非法入侵。

建立e-Partner群組44


實作安全防護的一種方法是對網站的使用者施以驗證。透過驗證,只有授權的使用者-通常是e-Partner-才能夠取得關鍵的企業資訊,如售價、產量等。

在這個部分,你將學到e-Partner群組的觀念,以及如何為網站建立e-Partner群組。

何謂e-Partner群組?


實施電子商務的企業並不會與所有想與企業進行交易的團體進行交易,相反地,企業只選擇與值得信賴的團體實行交易。這些團體,就是所謂的e-Partner。

欲成為e-Partner,企業必須首先向欲合作的夥伴公司提出申請,該公司接著會評估與衡量此份申請。假若申請者符合該公司的需求,該公司便將之加入e-Partner的列表中。

e-Partner會獲得權限以使用特定網頁,這些網頁並不讓未經授權的網路使用者存取。

實地演練:建立e-Partner群組45


在這個實作中,你將允許訪客成為Ramona Publishing網站e-Partner的一員。 藉著在使用者進入網站之前核對其帳號與密碼,你可以鑑定他們是否為網站的e-Partner。

4 顯示登錄網頁

在這個部分,你將修改default.asp來顯示一個登入網頁以接受e-Partner的帳號與密碼。網頁同時也提供了連結到註冊新e-Partner的網頁。

從隨書光碟上複製Start目錄(\Practices\Mod01\Satrt)-包含Manager子目錄-到 C: \InterPub\wwwroot\Ramona 下, 該目錄中包含了default.asp、home.asp 、 newuser.asp,以及new_reg.asp等網頁。如果在複製的過程中出現是否覆蓋寫入的警告,選擇46 是 。同時並將唯讀屬性取消。
開啟Microsoft Visual InterDev。
從路徑C:\InterPub\wwwroot\Ramona中開啟網頁default.asp。
藉著加入ACTION屬性,修改程式如下,讓網頁將frmsignon表單中的內容傳送至指定檔案:

<form name="frmsignon" METHOD="POST" ACTION="validate.asp">
在validate.asp網頁中包含用來驗證e-Partner登入帳號與密碼的程式碼。47
在標籤</from>之前,加入程式碼提供連結到newuser.asp網頁如下:

<table>
<tr>
<td><a href="newuser.asp"> Become an e-Partner </a></td>
</tr>
</table>
網頁newuser.asp內含負責接收想要成為e-Partner的使用者相關資訊,並將這些資訊傳送到register.asp。
儲存default.asp網頁。
4 將相關的e-Partner資訊儲存到資料庫表格上

在Microsoft InterDev裡,開啟檔案register.asp。48
下面的程式碼將開啟ramona資料庫中名為ranoma_epartner的表格

<%
set con=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
con.open "database=ramona;dsn=ramona;uid=sa;password=;"
rs.open "ramona_epartner",con,2,2
下面的程式碼將使用者的資訊儲存到ranoma_epartner表格

rs.addnew
rs("login_id")=request("lid")
rs("password")=request("pwd")
rs("lastname")=request("lname")
rs("firstname")=request("fname")
rs("company_name")=request("cname")
rs("billing_contact")=request("billc")
rs("address")=request("address")
rs("city")=request("city")
rs("state")=request("state")
rs("zip")=request("zip")
rs("country")=request("country")
rs("phone")=request("phone")
rs("email")=request("email")
rs("partner")=0
rs.update
rs.close
con.close

--------------------------------------------------------------------------------
注意
上例的程式碼中,request其實就是request.from


--------------------------------------------------------------------------------

下面的程式碼將顯示確認通知網頁給使用者:

response.redirect "new_reg.asp"
%>49

此時網頁new_reg.asp已經建立。
關閉register.asp網頁。
4 驗證e-Partner的登入帳號與密碼

在Microsoft InterDev裡,開啟檔案validate.asp。
下面的程式碼將開啟Ramona資料庫。

<%
set con=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
con.open "database=ramona;dsn=ramona;uid=sa;password=;"50
下面的程式碼將從default.asp裡frmsignon表單中取得登入的帳號與密碼

user=request.form("login_id")
pwd=request.form("password")
下面的程式碼將密碼與帳號和ramona_epartner表格的資料作驗證。

sqlstr= "select login_id, password, partner from "& _
"ramona_epartner where login_id='" & user & "'" & _
"and (password='" & pwd & "'" & " and partner=1)"
set rs=con.execute(sqlstr)
下面的程式碼負責:如果帳號與密碼符合,讓e-Partner進入企業的網站。否則,回到default.asp網頁。

if rs.eof then
response.redirect "default.asp"
else
response.redirect "home.asp"
end if
%>
關閉validate.asp檔案。514 成為e-Partner

啟動Microsoft Internet Explorer。
輸入URL位址『http://localhost/Ramona』。
在login網頁上,按下 Become an e-Partner 連結,以輸入e-Partner資訊。52
在e-Partner Registration網頁,輸入e-Partner資訊,然後按下 Submit 鈕。
4 將e-Partner加入網站

在Microsoft Internet Explorer中,輸入URL位址『http://localhost/Ramona/Manager』。
在Site Manager的Ramona Publishing網頁上,按下53 e-Partners 連結。
在e-Partners網頁中,在 Prospective e-Partners 表格中選擇e-Partner的名字,來檢視e-Partner的資訊。
從Prospective e-Partners Information網頁中,選擇 Add to e-Partner List54 ,將資料加入到網站上的現有e-Partner列表。
4 以e-Partner的身分存取資料

在Microsoft Internet Explorer中,輸入URL位址『http://localhost/Ramona』。
在login網頁上,在文字盒中輸入e-Partner登入帳號與密碼,然後按下 sign on 按鈕。55複習


試述B2B電子商務的優點。
試述實作安全交易的方法。
試述在實作良好的B2B電子商務網站時的需求。
複習解答


電子商務的優點:

降低採購成本56

縮短商務運作循環時間

更有效率的客戶服務

降低交易與行銷成本

新的交易機會

使用的協定有:

SSL

SET57

一個優良的B2B網站上應該有:

電子目錄

安全存取

以標準為基礎的解決方案

更簡單、低成本的企業文件交換
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 01:58 PM   #3 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

Microsoft Search簡介


傳統企業利用眾多不同的文件來保存產品、服務與企業運作等相關資料。除非知道所需文件的正確位置,否則要找到特定資訊的文件將會相當困難。然而,現在你可以藉著使用Microsoft Search,建立內含索引的文件目錄,以及方便的搜尋功能,來簡化獲得資訊的程序。

在 <Microsoft Search功能> 中,你將學習Microsoft Search的使用方法、功能,及相關需求。

在 <Microsoft Search的運作原理>3 中,你將學習建立一個內含搜尋功能的電子目錄。

Microsoft Search功能


假設你是一家製造公司,而且希望所有的產品都能有線上目錄。那麼你的目錄應該包含類似Microsoft Search的功能,讓網站訪客和企業的e-Partner都能夠快速有效率地找到所需的資料。利用Microsoft Search,你可以:

建立產品、服務,及資訊的目錄。

將目錄複製到不同的搜尋主機上。

為目錄加入搜尋功能。4

使用Microsoft Search所帶來的好處


在B2B電子商務中,很重要的一點是讓你或e-Partner能夠輕易地獲得所需資訊。當資料儲存在不同的資料庫、不同的文件、不同的檔案系統,或不同的伺服器中時,特定資料的搜索將變得很困難。藉著為這些資訊建立含有索引,以及類似Microsoft Search功能的目錄,你將可以大幅簡化搜尋程序。

使用Microsoft Search時的需求


要建立並搜尋線上目錄,你必須使用Windows NT Server或Windows 2000 Server產品,而且必須安裝Microsoft Search。如此伺服器會變成搜尋主機,讓你能夠:

利用Catalog Build Server建立目錄。

利用Search Server搜尋目錄。

雖然Search系統可以含括眾多主機,但是至少要有一台設定成用來建立線上目錄。而這台主機或其他主機則設定成可以儲存與搜尋目錄。每一台主機在設定上必須依據系統資源的使用、檔案位置等諸如此類的因素來設定環境。5
Microsoft Search的運作原理


Microsoft Search藉著下面的工作來建立目錄:

擷取內容。

取出資訊。

建立目錄索引。

編譯並傳播目錄。6

允許使用者存取搜尋網頁。

目錄的種類


目錄有三種不同的類型: 爬行 (Crawl), 通知 (Notification),及7 資料庫 (Database)。每一種目錄形式其定義格式是依據其收集資訊的方法的不同來定義。

目錄形式 敘述
爬行目錄 爬行目錄是藉著在網際網路、企業內部網路、檔案系統,以及Microsoft Exchange公用資料夾等處抓取文件所建構成的。
通知目錄8 通知目錄是利用從通知伺服器上收集到的資訊所建立的。
資料庫目錄 資料庫目錄是藉著在ODBC資料庫中抓取表格資料所建立的。

擷取內容


擷取(gathering)指的是收集所有被含括在目錄中的文件。Microsoft Search利用網頁或檔案路徑當作收集文件的起始路徑。最常被用來收集資料方法就是 爬行 。爬行有三種不同的形式:9
爬行形式 說明
網站連結爬行 從網站文件收集資訊。Microsoft Search從起始網頁上的第一份文件開始收集連結,並連結到其他網頁。
檔案爬行 從檔案目錄中的文件收集資訊。Microsoft Search從起始位置中指定的目錄進行收集,並收集所有儲存在該目其子錄及目錄中所有的文件。檔案爬行依然保持了設定在檔案中的NTFS安全存取權限。
Microsoft Exchange爬行10 可用來查詢Microsoft Exchange server上的訊息。起始位置通常是公用資料夾。在Exchange公用資料夾中的權限也一樣會被保留。

追蹤擷取到的文件


當Microsoft Search開始進行爬行,會建立一個內部紀錄來追蹤所有需要收集的文件。這份紀錄稱為 交易紀錄 (transaction log)。Microsoft Search會在此儲存所有檔案、訊息,以及從起始位址獲得網頁鏈結等的連結,並將它們標記成 pending (待處理)。當成功地完成文件收集之後,Microsoft Search會將交易紀錄中該文件的連結標記成11 done (完成)。

管理爬行紀錄


當進行收集時,Microsoft Search會維護一份所有已完成收集的檔案的紀錄。這份紀錄稱為 爬行紀錄 (crawl history)。一般每當遇到新的連結,在交易紀錄中便會加入此筆紀錄;但是只有在完成與爬行紀錄中的比對,確定沒有重複之後才會將之加入爬行紀錄。這樣確保了不會有連結被重複收集。

設定爬行限制12


藉著明確指定Microsoft Search應該收集的程度,你可以對加入交易紀錄的連結數量作出限制。三種方法可以做到:

你可以限制在檔案爬行時被爬行的子目錄層級。

當進行鏈結爬行時,你可以設定Microsoft Search瀏覽網頁或連結網站的數目。

在網頁的連結上,Microsoft Search可以從起始位址跳到網站內的任何網頁。

在網站連結上,Microsoft Search可以從起始位址跨越網站連結至其他網頁。

當執行網站連結爬行時,你也可以設定網站的規則。透過設定網站規則,你可以指定在收集時,Microsoft Search應該遵行的路徑。

完整的爬行與漸增的爬行13


在第一次執行爬行時,Microsoft Search會執行完整的爬行(full crawl)動作。然而,這種爬行方式會耗費大量時間並佔用龐大頻寬,所以這種方法並不適用於更新現存的目錄。取而代之的是漸增的爬行方式(Incremental crawl)。其運作模式是從現存的目錄開始,只加入那些作過更動的文件。如此可大量地減少在更新目錄時所耗用的時間和頻寬。

取出資訊


在擷取內容的過程中,Microsoft Search會開啟每一個檔案,並使用過濾器(filter)來收集如文字內容、連結,與特殊文件等資訊。Microsoft Search支援的過濾器可以處理一般的檔案格式如HTML、Microsoft Office文件及一般的文件檔,此外也可以利用協力廠商製作的過濾器來從特定格式的文件中取出資訊。

Microsoft Search可以自動地從收集到的文件中判斷其使用的語言。這項特性可幫助系統使用適當的文字處理功能來定義出個別的單字,並以正確的語法判讀。

建立目錄索引


Microsoft Search利用從收集文件取出的資訊來建立文件中的詞語的索引與其所在的位置。而不重要的用字如「a」、「an」,及「and」等所謂的「垃圾字」都將被省略。

編譯並傳播目錄14


在完成收集文件、取出資訊及為之建立索引之後,Microsoft Search會將之編譯到目錄中。當目錄編譯完成,Microsoft Search會把目錄複製到含括的所有搜尋伺服器上。這樣的過程稱之為 傳播 (propagating)。

允許網站的訪客搜尋目錄


在目錄完成之後,預設的搜尋網頁是設定在URL位址http://server_name/Knowledge/Search/...尋網頁。


--------------------------------------------------------------------------------
注意
對於那些從資料庫建構而來的目錄,其預設的搜尋網頁是位於URL位址http://localhost/siteserver/knowledg...tabase/search/ catalog_name/search.htm


--------------------------------------------------------------------------------

利用Catalog Build Server建立目錄15


要建立目錄,首先你必須根據要建立的目錄形式提供適當的資訊和指令。而在完成目錄的製作後,可以複製或將之傳播到不同的搜尋伺服器上。你也可以選擇在指定的時程自動重建目錄。在接下來的章節中,會對每一個部份作更詳盡的介紹。

定義目錄


在建構任何形式的目錄之前,你必須根據想要建立的目錄形式來定義目錄。

定義目錄的元素


目錄的定義必須包含下表所列的資訊:

需求資訊 敘述16
目錄名稱 每一個目錄應該擁有一個唯一名稱。
起始位址與爬行策略 起始位址是Microsoft Search開始進行爬行的位置。它可以是網站的網頁、檔案目錄,或Microsoft Exchange公用資料夾。而爬行策略則是指定Microsoft Search從起始位址進行爬行的方向。
網站與路徑規則 網站規則決定哪些網站要被爬行,哪些不用。該規則同時也可以修改以避免網站的特定路徑被瀏覽。當Microsoft Search遇到連結,它會將連結與網站規則中的列表作比較,決定該網頁是否應該被爬行。
檔案型式17 指定何種型式的檔案需要被收集到目錄。
傳播列表 指定目錄應該要傳播到哪些伺服器。
擷取日誌設定 每次建立目錄,就會產生一個擷取日誌,記載Microsoft Search在存取文件時曾發生的錯誤資料。
建立時程 可用來自動建立目錄。18
存取-顯示對應 每當從某個位置進行資訊收集,並將資訊顯示在其他位置時使用。這個選項讓你在進行搜尋時,可以善用Microsoft NT檔案安全管制特性。

你可以使用Microsoft Site Server Commerce Edition中的Microsoft Management Console(MMC)或Web Based Administration(WebAdmin)來建立目錄的定義。

傳播目錄


「傳播」指的是當目錄完成後,將它複製到主機網站上搜尋伺服器的過程。主機網站指的是網站訪客可以瀏覽和搜尋目錄的位址,在目錄定義中指定。一個目錄最多可以被傳播到32個主機上,包括目錄在編譯時所在的主機。

只有當Microsoft Search已經安裝在伺服器主機上時,搜尋伺服器才能接收目錄並將它加入系統中。注意,管理者的使用帳號必須在Catalog Build Server與目錄將被傳播到的機器上都擁有管理權。

當目錄在進行編譯時,只要特定數量的文章被加入目錄後,就可以被傳播到其他的主機上。在這類例子中,只有部分目錄被傳送到主機。目錄會定期更新,直到編譯完成,再傳播至主機。19
建立資料庫目錄定義


藉由爬行ODBC資料庫,系統會建立資料庫目錄。例如,你可能會在資料庫表格中儲存文章或白皮書,其中每一筆記錄包含了作者姓名、發行日期、簡介、以及文件內容等,你便可以建立目錄,讓網站訪客可以搜尋和使用這些資訊。

下面的介紹展示了在定義目錄時所需的三個欄位。




資料庫目錄的目錄定義只能利用Web Based Administration(WebAdmin)的Create New Catalog Definition Wizard來產生。

要為資料庫目錄建立定義,你需要:

從系統的資料來源列表中選擇,指定ODBC資料來源。20

為目錄設定一個唯一名稱。

為目錄定義資料庫表格。

根據目錄內容定義資料庫欄位。當訪客點選搜尋結果的連結,系統會將欄位展示出來。

指定成為主鍵的欄位,這個欄位的每一筆資料值必須是唯一的,不可重複。

指定一欄位作標題用。當訪客點選搜尋結果連結,系統會將該欄位當作標題並利用目錄定義中提供的資訊展示出來。Create New Catalog Definition Wizard會建立所有必要的Active Server Page(asp)檔案,然後建立此目錄。下面是在執行過程中會被建立的網頁:

網頁 說明21
Dir.asp 用來儲存目錄的起始位址。
Row.asp 用來從資料庫中取得每一筆資料。
View.asp 用來瀏覽資料記錄。
Search.asp22 用來收集搜尋時使用的條件資料。
Result.asp 展示結果。此網頁裡的每一個連結都會使用View.asp網頁。

你可以在路徑[url]http://localhost/siteserver/knowledge/search/database/search/catalog_name/search.htm中存取搜尋網頁。將連結訥/url]]定至這個網頁才能提供使用者搜尋資料庫目錄的功能。

示範:建立目錄


在這個示範中,你將使用Web Based Administration(WebAdmin)的Catalog Build Server來建立一個線上目錄。 Microsoft Search將會搜尋主機上的資料庫以取得儲存在資料庫中的資訊。

423 啟動Web Based Administration(WebAdmin)

按下 開始 ,並指向 程式集 。
選擇24 Microsoft Site Server ,並指向 Administration 。
點選 Site Server Service Admin(HTML) 。254 從WebAdmin建立一個資料庫目錄

在Web Based Administration網頁中,點選 Search 。
在左邊的框架中,點選 Catalog Build Definitions26 。
在Catalog Build Definition網頁中,點選 Create 。
在Create New Catalog Definition Wizard網頁中,為目錄指定資料來源。你將使用資料庫作為資料來源。選擇 A database ,並按下27 Next 。
在Select Data Source and Specify Catalog Name網頁中,指定資料庫並設定目錄名稱。在 ODBC Data Source Name(DSN) 欄位,選擇 FiveLakes 。28
在 Catalog name 欄位,輸入 FiveLakes 。
在 User name29 欄位,輸入『sa』。
在 Password 欄位中保持空白,按下 Next 。
在Select Table網頁中,從30 Table 的下拉式選單中,選擇 FiveLakes_product 。
在Select Content,Primary Key,and Hyperlink Columns網頁中,在 Content column 對話盒中,選擇資料庫的31 description 欄位。
在 Primary key 欄位中,預選的欄位是 sku 。在32 Hyperlink column 欄位對話盒,選擇 name 欄位,然後按下 Next 。
在Select Searchable and Retrievable Columns網頁中可以選擇要做為索引的欄位,以便在目錄中進行資料搜尋或存取。根據下面指定的資料表,選擇欄位以便從資料庫中搜尋或存取資料。在選定適當的核取方塊後,點選33 Next 繼續下面的動作。

Column Name Searchable Retrievable
sku Y34
list_price
image_file 35
image_width
image_height
sale_price36 Y Y
sale_start Y Y
sale_end Y37 Y
author Y Y
edition Y Y38
publisher Y Y
category Y Y

在Enable Immediate Build網頁中,點選39 Build the database catalog now 。
按下 Finish 鍵開始建立目錄。
Summary網頁會展示所有建立的檔案。資料庫的索引script檔dir.asp與row.asp被建立於路徑<install dir>\siteserver\knowledge\search \database\index\FiveLakes\的目錄下。而Microsoft Search同時也會在路徑<install dir>\siteserver\knowledge\search\database\ search\FiveLakes\目錄中建立資料庫的搜尋script檔search.asp、result.as與view.asp。
搜尋網頁可以從URL位址http://localhost/siteserver/knowledg...tabase/search/ FiveLakes/search.htm來進入。40
點選 OK 繼續接下來的動作。
示範:排定自動建立目錄


可以安排自動進行重建目錄的動作。使用者可以指定重建的方式是完整式的或漸增式的。

在這個示範中,你將安排FiveLakes網站的搜尋目錄必須每週自動進行重建。

設定自動建立行程41

在Catalog Build Definition網頁中,選擇 FiveLakes ,並按下 Properties 鍵。
在Properties of FiveLakes網頁中,點選 Build Schedule42 。
在Build Schedule for FiveLakes網頁,點選 Create 。
在Select Task Action and Frequency網頁中,點選 Weekly ,接著點選43 Next 。
在Set Task Time and Date網頁,選擇 Sunday ,然後按下 Next 。44
在Set Account Information網頁,你需要指定密碼,並確認之。然而,在這次的示範中,將密碼欄與確認欄保持空白。按下 Finish 來為目錄設定自動重建排程。
你將回到Build Schedule for the FiveLakes網頁。注意,所有你指定的工作將會被展示出來。
利用Search Server搜尋目錄


每當你建立線上目錄,你必藉著徹底搜尋目錄來對線上目錄進行測試。你也可以修改目錄的搜尋功能,讓網站訪客可以更快速、更準確地找到所需資料。最後,你所要做的是將搜尋網頁整合到你的網站中、並讓網站的訪客可以使用該網頁。

示範:搜尋目錄45


在示範中,你將搜索FiveLakes目錄,尋找包含特定關鍵字的紀錄。FiveLakes資料庫目錄的搜尋網頁位於http://localhost/siteserver/knowledge/search/database/ search/FiveLakes/search.htm。

4 搜尋資料庫目錄

按下 開始 ,選擇 執行46 。
在 開啟 對話盒中,輸入『http://localhost/siteserver/knowledge/search/database/ search/ FiveLakes/search.htm』,然後按下 確定 。
這時Database Search: FiveLakes網頁就會出現。你可以利用這個網頁來搜索FiveLakes目錄裡的內容。47
在Enter text to search for的欄位中,輸入 Microsoft ,然後按下 Search 。
Search Result網頁會將資料庫中內含Microsoft的紀錄列出。點選 Microsoft VC++ 6.0 Reference Library48 來瀏覽這本書的詳細資料。
程式導覽:修改精靈產生的搜尋網頁


在這個程式導讀部分,你將修改搜尋網頁讓網站的訪客可以搜索由Microsoft Press與Prentice Hall兩家出版社所出版的書。

當你從資料庫建立目錄時,Microsoft Search會建立search.htm、result.asp,以及view.asp等檔案。在這個練習中,你將修改search.htm及result.asp網頁為網站訪客提供一些新功能。

在search.htm網頁中,使用者在名為qu的文字盒中輸入資料。為了讓網站訪客搜索特定出版社出版的書目,你可以在search.htm網頁中加入一個列舉方塊,內含特定出版社名稱。在這個範例中則是Microsoft Press與Prentice Hall。系統並不會預先選定列舉方塊中的某個參數,這個列舉方塊將命名為ss。

4 在Microsoft Visual InterDev中開啟Search.htm49

開啟Microsoft Visual InterDev。
開啟search.htm網頁。這個網頁是放在Microsoft Site Server\SiteServer \Knowledge\ Search\database\search\FiveLakes\的目錄中。
4 在搜尋網頁中加入列舉方塊

在search.htm網頁中,找出下列的程式碼:

<input type="text" name="qu" size="60" maxlength="100"
value="">
</td>
</tr>
在</tr>的下一行,加入下面的程式碼以產生列舉方塊:50

<tr>
<td><font face="verdana,arial,sans-serif"
style="font-size: 10pt">
Search for Publisher: </font></td>
<td>
<select name=ss>
<option value="">
<option value="Microsoft Press">Microsoft Press
<option value="Prentice Hall">Prentice Hall
</select>
</td>
</tr>
在 File 功能表中,點選 Save ,關閉檔案。

如此你將在搜尋網頁上建立一個名為ss的列舉方塊。下一步你將加入程式碼,以本網頁為基礎,進行擴充搜尋。這段程式碼必須加入到資料庫的搜尋結果網頁result.asp裡。51
4 修改result.asp網頁

在Microsoft Visual InterDev中,開啟result.asp網頁。這個網頁的位址是在Microsoft Site Server\SiteServer\Knowledge\Search \database\search\FiveLakes\目錄中。
找出下面的程式碼:

if Request("qu") <> "" then
Response.write L_SearchingFor_text & " <b>" & _
Request("qu") & "</b>.& nbsp;"
end if

在end if指令的下一行,加入下面的程式碼,修改出現在結果網頁中的文字:
if Request("ss") <> "" then
Response.write L_SearchingFor_text & " <b>" & _
Request("ss") & "</b>.& nbsp;"
end if52

下面這段文字解釋了為何建立並執行一個查詢物件的原因:程式碼設定Q = Server.CreateObject("MSSearch.Query"),建立了一個Query物件的實體,並以MSSearch.Query為Query物件的ProgID。 Query物件的屬性必須根據使用者輸入的及其他搜尋規則來設定。Q.SetQueryFromURL (Request.QueryString)這行設定了查詢時使用的參數。Request.QueryString會從搜尋網頁中取得使用者的輸入資料。SetQueryFrom URL方法則是用來設定查詢的參數。
找出下面的程式碼:

Q.SetQueryFromURL(Request.QueryString)

在下一行,加入下面的程式碼以在ss列舉方塊中取得點選的參數值。
if request("ss") <> "" and request("qu") = "" then
q.query="@meta_publisher= " & request("ss")
end if

if request("ss") <> "" and request("qu") <> "" Then
q.query=q.query & " and @meta_publisher= " & _
request("ss")
end if

前面的這段程式碼會根據搜尋網頁上使用者輸入的查詢字串來修改資料庫查詢。
你可以藉著改變Query物件中的目錄屬性來修改要搜索的目錄名稱。程式碼Q.Catalog="FiveLakes"指定了要被搜尋的目錄名稱為FiveLakes。你可以以串列的方式加入多個目錄,只要以逗號區隔即可。例如,如果你想同時搜尋名為Hanson的目錄,那麼程式碼將被修改成Q.Catalog="FiveLakes,Hanson"。表格中的每一個欄位在使用之前都必須先定義。DefineColumn屬性使用了欄位的唯一ID與欄位名稱來定義欄位在展示時的名稱。53
Query物件擁有一個Column屬性讓你指定哪個欄位會被從資料庫中取出,並加入到搜尋結果。程式碼Q.Column="DocTitle, DocAddress,Description, list_price, sale_star, sale_end, author, edition, category, new"指定了欄位DocTitle、DocAddress、Description、list_price、sale_start、sale_end、author、edition、category、new columns等都將被存取。
當執行查詢時,系統會產生已儲存的搜尋結果。搜尋結果會存放在一個 資料集 (recordset)裡面。指令RS =Q.CreateRecordSet("sequential")會建立一個名為RS的物件,儲存搜尋結果。你應該經常檢查資料集以確認它不是空的,或檢視在查詢的過程中所發生的錯誤狀況。
在 File 功能表中,點選54 Save ,然後關閉檔案。
你可以現在就執行搜尋,看看修改search.htm與result.asp後的效果。
將搜尋網頁整合至網站


你所建立的目錄和搜尋網頁並不能讓網站的訪客使用。因此,你必須在網站上建立一個連結,賦予訪客使用搜尋網頁的權利。

你可以在預設的網頁中,加入下面的程式碼來建立連結至搜尋網頁的連結:

<A
HREF="http://localhost/siteserver/knowledge/search/database/
search/<sitename>/search.htm">
To Jump to the Search page </A>55
實作2:建立並搜尋目錄


目標


在完成本實作之後,你將能夠:

建立目錄。

修改Search來提供自訂的搜尋選項。

在您開始之前


先決條件56


在開始實作之前,你必須擁有:

HTML與ASP scripting的基本知識。

熟悉Microsoft Internet Explorer。

4 預估完成時間:30分鐘


--------------------------------------------------------------------------------
注意
已經完成本章中所有示範與程式導覽的學生可以跳過這個實作,因為它重複了建立目錄與修改搜尋的步驟。


--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
警告
不要使用本實作中的Lab solution或Start code檔案。這些檔案只供參考。57

--------------------------------------------------------------------------------

練習1:建立目錄


在這個練習中,你將在Ramona Publishing Web網站中建立一個資料庫目錄。

4 啟動Web-Based Administration(WebAdmin)

點選 開始 ,指向58 程式集 。
選擇 Microsoft Site Server ,然後指向 Administration 。59
點選 Site Server Service Admin(HTML) 。
4 從WebAdmin建立資料庫目錄

在Web-Based Administration網頁中,點選 Search60 。
在左邊的框架中,點選 Catalog Build Definition 。
在Catalog Build Definition網頁中,點選 Create 。61
在Create New Catalog Definition Wizard網頁中,為目錄指定資料來源。 你可以使用資料庫當作資料來源。選擇 A database 並按下 Next 繼續下面的動作。
在Select Data Source and Specify Catalog Name網頁中, 指定資料庫與目錄的名稱。在 ODBC Data Source(DSN)62 欄位中,選擇 Ramona 。
在 Catalog name 欄位中,填入 Ramona63 。
在 User name 欄位中,填入『sa』。
將密碼欄維持空白。
在Select Table網頁中,從 Table64 的下拉式選單中,選擇 Ramona_product 。
接著Select Content,Primary Key,and Hyperlink Columns網頁出現。在 Content column 對話盒中,選擇資料庫的 description65 欄位。
在 Primary Key 欄位中,預設值是sku欄。在 Hyperlink column 對話盒中,選擇name欄,然後按下 Next66 。
Select Searchable and Retrievable Columns網頁可以讓你選擇將建立索引的欄位,以便進行資料搜尋與存取。參考下面的表格,從資料庫中選出用作資料搜尋或存取的欄位。在完成相關核取方塊的選定之後,按下 Next 繼續下面的動作。

Column Name Searchable Retrievable67
sku Y
list_price
image_file68
image_width
image_height 69
sale_price Y Y
sale_star Y Y70
sale_end Y Y
author Y Y
edition71 Y Y
publisher Y Y
category Y72 Y

在Enable Immediate Build網頁中,點選 Build the database catalog now 。
按下 Finish 鍵開始建立目錄。73
搜尋網頁可以從URL位址http://localhost/siteserver/knowledg...tabase/search/ Ramona/search.htm來進入。
點選 OK 繼續接下來的動作。
練習2:修改搜尋網頁


在這個練習中,你將為Ramona Publishing Web網站修改搜尋網頁,允許批發商上線查詢新書。

首先,你將為搜尋網頁加入一個名為ss的列舉方塊。這個列舉方塊有兩種參數值:預設值部分是空白,而可選值部分則是展示了所有的新書。74
接下來,你將修改Result.asp檔案,修改其搜索查詢的部分。

4 在Microsoft Visual InterDev中開啟search.htm檔案

開啟Microsoft Visual InterDev。
開啟searvh.htm網頁。其位址是在Microsoft Site Server\SiteServer\Knowledge\Search\ database\search\Ramona\ 目錄下。
4 修改search.htm75

找出下面的程式碼:

<input type="text" name="qu" size="60" maxlength="100"
value="">
</td>
</tr>

在</tr>的下一行,加入下面的程式碼:
<tr>
<td><font face="verdana,arial,sans-serif" style="font-size:10pt">
Special search for: </font></td>

<td>
<select name=ss>
<option value="">
<option value="new">New Books
</select>
</td>
</tr>
在 File 功能表中,點選76 Save 並關閉檔案。
4 修改result.asp

開啟result.asp網頁。其位址是在Microsoft Site Server\SiteServer\Knowledge\Search\ database\search\Ramona\目錄下。
找出下面的程式碼:

if Request("qu") <> "" then
Response.write L_SearchingFor_text & " <b>" & _
Request("qu") & "</b>.& nbsp;"
end if77

在end if指令的下一行,加入下面的程式碼:
if Request("ss") <> "" then
Response.write L_SearchingFor_text & " <b>" & _
Request("ss") & " " & "Books" & "</b>.& nbsp;"
end if
找出下面的程式碼:

Q.SetQueryFromUrl(Request.QueryString)

在next指令的下一行,加入下面的程式碼:
if request("ss") <> "" and request("qu") = "" then
q.query="@meta_new= " & "new"
end if
if request("ss") <> "" and request("qu") <> "" Then
q.query=q.query & " and @meta_new= " & request("ss")
end if
在78 File 功能表中,點選 Save 並關閉檔案。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:00 PM   #4 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

B2B訂單處理管線2


當兩家企業成為彼此的電子夥伴,他們可以利用B2B的訂單處理管線(OPP)來建立採購訂單,並將之傳送給彼此。電子夥伴利用兩種形式的管線來建立與傳送採購訂單:

組織採購計劃管線 (Corporate Purchasing Plan)

這種形式的管線會執行OPP元件來計算採購訂單的總額。而影響總額的因素包括有折扣、課稅、以及運輸成本。這種管線與B2C電子商務網站所使用的「計劃管線」相似。
組織採購確定管線 (Corporate Purchasing Submit)

這種形式的管線會對採購訂單的申請要求進行驗證、傳輸、及寫入資料庫等處理。這種管線與B2C的電子商務網站所使用的「採購管線」很像。3組織採購計劃管線


在B2C電子商務裡,訂單的處理是發生在企業網站本身。因為B2C的交易並不涉及產生採購訂單並將其送交廠商的動作,所以使用的是計劃管線。

下面介紹了「組織採購計劃管線」的十四個階段。




在B2B電子商務中,一家企業產生採購訂單並將之傳送給另一家企業。在這種情況下,「組織採購計劃管線」與「組織採購確定管線」將會先後運作來執行如產生採購訂單、確認採購訂單等工作。因此,在B2B的交易裡「組織採購計劃管線」是用來計算採購訂單的總和。

在計算採購訂單的總和時,「組織採購計劃管線」會將所有促銷折扣、課稅、運費與處理費用等一併計算在內。

組織採購計劃管線與計劃管線的比較4


「組織採購計劃管線」中共有十四個階段。這些階段相當於B2C「計劃管線」的十四個階段。「組織採購計劃管線」是利用CorpPurchasingPlan.pct樣板來建立的。

底下的列表是組織採購計劃管線中各階段與計劃管線中各對應階段所做的比較:

組織採購計劃管線中的階段 在B2C計劃管線的對應階段
Requisition Item Info Product Info
Supplier Information5 Merchant Information
Buyer Information Shopper Information
Requisition Initialization Order Initialization
Requisition Check Order Check6
Requisition Item Price
Requisition Adjust Price Order Item Adjust Price
Requisition Subtotal Adjust Price
Shipping7 Shipping
Handling Handling
Tax Tax
Requisition Total Order Total8
Inventory Inventory

組織採購確定管線


當「組織採購計劃管線」在採購訂單的表單上成功地執行時,採購訂單已經完成準備可以傳送給e-Partner。「組織採購確定管線」會確認採購訂單的申請要求,建立採購訂單,然後將之傳送給e-Partner。

當管線元件將資料寫入資料庫時,是以「組織採購確定管線」為交易管線。交易管線是由那些支援Microsoft Transaction Server(MTS)交易的元件所組成。

用來建立組織採購確定管線的樣版是CorpPurchasingSubmit.pct。這個管線樣板由兩個階段所組成:採購訂單驗證階段(Purchase Order Validate stage)與採購訂單確定階段(Purchase Order Submit stage)。

採購訂單驗證階段9


「採購訂單驗證階段」會驗證採購訂單是否正確。


--------------------------------------------------------------------------------
注意
Site Server 3.0 Commerce Edition並未包含本階段的元件。然而,你可以加入自訂的元件,或協力廠商所開發的元件,來驗證採購訂單。


--------------------------------------------------------------------------------

採購訂單確定階段


在進行採購訂單確定階段之前,訂單已經完成並經過驗證。採購訂單確定階段負責將已完成且經過驗證的訂單傳送給e-Partner。

下面的表格詳細介紹了這個階段中使用的相關元件

元件 說明10
ExecuteProcess 在伺服器端利用特定參數來執行應用程式。
MakePO 根據樣板檔案產生採購訂單將OrderForm或Dictionary從PipeToPipe Transfer目前正在執行中的管線轉移到另一個管線。
PotoFile 將採購訂單(通常是MakePO的結果) 傳送到檔案中。
SaveReceipt11 將OrderForm的內容寫入收據儲存區。
SendSMTP 送出電子郵件到特定位址。
SQLItem 為採購訂單中的每一項物品執行特定的SQL指令。利用訂單中的欄位及物品當作參數。
SQLItemADO 為採購訂單中的每一項物品執行特定的SQL指令。元件會利用訂單中的欄位及物品當作參數。這個元件與SQLItem元件一樣,除了它使用的是Microsoft ActiveX Data Objects(ADO),同時元件也可以被含括在交易管線中。12
SQLOrder 為每一份採購訂單執行一次特定的SQL指令,使用訂單中指定的欄位當作參數。
SQLOrderADO 為每一份採購訂單執行一次特定的SQL指令,使用訂單中給定的欄位當作參數。這個元件與SQLOrder元 件一樣,除了它使用的是ADO,同時可以被含括在交易管線中。

接下來,你將學習如何使用「採購訂單確定階段」裡的MakePO與PotoFile元件。

產生採購訂單


利用MakePO元件你可以產生採購訂單(PO)。該元件運用採購訂單,配合訂單表單上的資訊,來建立採購訂單。MakePO元件擁有下列的設定:13
設定 說明
Template File Name 指定製作採購訂單的樣板的檔案名稱。樣板通常是副檔名為 .txt的Microsoft Visual Basic Scripting(VBS) 檔案。
Script language for the template 指定樣板中使用的程式語言。預設值是VBScript。
Output Property Name14 指定元件將PO寫入訂單表單上的欄位的名稱。
Child Object Name 指定被傳送到管線Transport Dictionary裡所參照的物件。只有當Use Child Object選項被設定時才可使用這項元件。
Use Child Object 指定元件讀取採購訂單資訊的來源。當你使用CIP時,選定這項選項,這樣元件便可以從Child Object Name欄位所指定的企業資料物件中讀取這項資訊。

將採購訂單寫入檔案


利用PotoFile元件你可以將採購訂單寫入到檔案。PotoFile元件擁有下列的設定:15
設定 說明
Source Field Name 指定元件在採購訂單資料裡所讀取的訂單欄位名稱。
File Name 指定寫入採購訂單資料的檔案路徑。
File names in field16 指定訂單上的欄位值,而其值是元件欲把採購訂單寫入的檔案名稱。
Temporary file , Name saved in field 指定元件應該將採購訂單儲存在另一個暫存檔案,然後將檔案名填入這個欄位。

Commerce Interchange Pipeline介紹


在前一節裡你學到了訂單處理管線。它們是用來計算採購訂單的總額、確認訂單的申請要求,並建立採購訂單。在B2B電子商務中,產生的採購訂單必須傳送給合作廠商。Site Server 3.0 Commerce Edition提供一組Commerce Interchange Pipeline,讓你可以用來和e-Partner交換資訊。在這個部分,你將學習Commerce Interchange Pipeline的相關事務,包括它的架構,及如何使用它在e-Partner間交換文件。

Commerce Interchange Pipeline(CIP)概論


Commerce Interchange Pipeline讓各種規模的企業可以以電子化的方式交換資訊。電子夥伴利用這種管線安全地傳送採購訂單、收據、送貨通知、發票或帳單紀錄等等。傳送的過程可以發生在單一電腦上,或是透過LAN、WAN、附加價值網路(VAN),或與網際網路連結的電腦中。17
下圖描述了Commerce Interchange Pipeline的作業流程。




CIP的優點


Commerce Interchange Pipeline是電子交易中的建議選擇,原因有以下幾點:

CIP可以透過設定來傳送或接收企業物件。

CIP支援多種B2B交易與通信情境,包括組織採購、供應鏈採購,與訂單狀態等。

CIP能夠與現行的傳輸系統如電子郵件、HTTP,或新系統如DCOM、Microsoft Message Queue(MSMQ)等共同運作。18

CIP是獨立於資料格式與資料傳輸模式。因此開發人員及協力廠商皆可以建立連結到個人化環境設定的相容元件。

CIP凌駕OPP的好處


Commerce Interchange Pipeline與訂單處理管線都可以用來傳送採購訂單。然而,CIP擁有某些特性可提供凌駕OPP的優點:

CIP OPP
對應元件可以用來將資料物件轉換成適合傳輸的位元串流。 OPP不支援這項功能。19
SendSMTP、SendHTTP、SendDCOM或協力廠商所開發的元件都可以被用來傳送資料。 只支援SendSMTP
傳送的資訊可以進行加密的動作。 OPP不支援這項功能。

CIP架構與傳運辭典


在B2B的交易中,企業會產生採購訂單並將之傳送給廠商。這時,Commerce Interchange Pipeline被用來傳輸與接收採購訂單。

下面介紹Commerce Interchange Pipeline與20 傳輸辭典 (transport dictionary)的互動。




在採購訂單可以被傳送或接收之前,Commerce Interchange Pipeline必須執行一連串的作業,如加密/解密或數位簽名等等。

因此,儲存在採購訂單中的企業資料物件會被轉換成傳輸辭典。每一個Commerce Interchange Pipeline的元件都會在辭典物件上執行一些工作。

瞭解CIP架構


CIP為Site Server 3.0 Commerce Edition管線架構的實作。每一條管線是一個循序執行處理程序的架構。這個架構是由眾多21 階段 (stage)組成,每一個階段描述了由一個或多個與該階段相關聯元件所執行的工作,而每一個階段都可以完全地融入到你的應用程式中。

每一個CIP的階段是由一個或多個管線元件所組成。元件指的是Component Object Model(COM)的in-process伺服器程式,並在企業資料物件上執行某些工作。例如,CIP的加密階段可能包含EncryptPCKS元件,該元件是設計來為企業資料物件加密。在一個階段中,元件會從前一個階段接收資料物件並於其上執行它該執行的處理程序,然後產生結果以供下一個元件使用。你可以藉著新增、移動或設定管線元件來自訂電子商務應用程式。

傳輸辭典


傳輸辭典為應用程式傳送給CIP的一個辭典物件(dictionary object),是所有CIP活動的目標資料。

應用程式建立傳輸辭典並以參數的模式將之傳送到CIP的Execute方法。當Execute方法被執行,CIP的元件會從傳輸辭典讀取資料到記憶體中,執行資料的運算,然後將結果寫回傳輸辭典。

Commerce Interchange Pipeline的類型22


一個典型的企業之間通信聯絡的例子是使用兩個在不同伺服器上執行的Commerce Interchange Pipeline。兩條管線分別是:

傳送管線

在貿易夥伴中透過網路來傳送企業資料物件。
接收管線

接收企業資料物件,解開物件,並將資料物件整合至應用程式中。
下面的介紹描述了典型的B2B電子商務通信聯絡的步驟。




23
Commerce Interchange Pipeline同時也提供完整的回傳收據。伴隨著數位簽名,回傳收據可以核對發生於網際網路上的企業溝通過程。

個別管線的設定是存放在管線設定檔(.pcf)。下面的表格詳細地介紹包含在管線設定中的元件類別:

元件類別 說明
Mapping component 將企業資料物件的內容轉換成可傳送的格式,或將接收到的資料轉換回原本儲存的物件。
Add/Open Header Components24 新增元素到傳輸辭典從傳輸辭典移除元素包括傳送者與接收者的位址,以及收據要求。
Digital Signature Components 決定使用何種形式的數位簽名來簽署企業資料物件,或負責驗證數位簽名。
Encryption/Decryption Components 決定如何為企業資料物件的內容進行加密解密,及如何使用認證。
Audit components 將企業資料物件上不同的資料寫入稽核資料庫。25
Transport connector 設計並設定傳送或接收企業資料物件。
Application Integration 啟動應用程式以處理接收到的企業資料物件。

對於傳輸管線中的每一階段及元件,在接收管線上都有一對應部分。而接收管線另外還有一個稱之為Generate Receipt的附加元件。

建立與傳送採購訂單


在B2B的交易裡,傳輸管線是用來封裝企業資料物件並將之傳送給e-Partner。企業資料物件在傳送出去之前會在傳輸管線內歷經六個階段。下面的章節將就這六個階段做更詳盡的介紹。26
傳輸管線的各個階段


傳輸管線是一種封裝企業資料物件與將之傳送給e-Partner的Commerce Interchange Pipeline。這類管線的樣板為Transmit.pct。傳輸管線擁有下面六個階段:

對應階段(Map stage)

加入標題階段(Add Header stage)

數位簽名階段(Digitally Sigh stage)

加密階段(Encrypt stage)

稽核階段(Audit stage)27

傳送階段(Transport stage)

下面的介紹說明傳輸管線中的六個階段。




在對應階段中轉換企業資料物件


對應(mapping)描述了將物件的資料從一種形式轉換成另一種的過程。對應階段可以包含協力廠商元件用以將電子資料交換(EDI)的資料轉換成適合傳輸的資料形式。

在傳輸管線中,對應階段可以包括MapToXML元件。該元件從企業資料物件的物件名/值對所關聯的物件中讀取資料,並將之轉換成XML封裝的二進位檔或純粹的XML資料流,並將結果當作新的名/值對,命名為working_data,並寫入傳輸辭典。

從下面的辭典物件看看範例:28
Set myObj = Server.CreateObject("Commerce.Dictionary")
MyObj.Company = "Microsoft"
當辭典物件被傳送到MapToXML元件,元件會產生:

<MAPXML><VALUE dt:dt="object" dt:classid="classid:
B7990D09-45FD-11D0-8176-00A0C90A90C7">
<DICTIONARY>
<DICTITEM key="Company"><VALUE dt:dt="string" xml-space="preserve">
Microsoft</VALUE></DICTITEM>
</DICTIONARY>
</VALUE></MAPXML>
加入標題


加入標題階段是將作業資料封裝在標題之內,標題提供了有關傳輸與將資料寫回作業資料等附加資訊。

當你利用傳輸管線傳送企業資料物件時,你可以要求資料的回傳收據。想要求收據,必須將一個名為Receipt_requested的屬性加入傳輸辭典中,並將其值設定為Yes。

TransportDictionary.Receipt_requested= "Yes"29
在CIP的加入標題階段,如果Receipt_requested屬性存在且其值設定為Yes的話,那麼在傳送之前AddHeader元件會將收據要求寫入傳輸辭典。

收據要求包含了下列項目:

用來對企業物件資料進行hash以取得摘要演算法。SHA1為一個標準的hash演算法。

文件形式標籤,指定從接收管線中要求的是何種文件。其值通常為Receipt,代表要求的文件形式是收據。

在這個階段裡相關的元件詳述如下:

元件 說明30
AddHeader 為作業資料裡加入一連串的XML資料,包括交易ID、交易的日期與時間、回傳收據要求、傳送者的位址,與接收者的位址。其中,回傳收據要求、傳送者的位址、與接收者的位址等資料是選擇性的。
EncodeMIME 運用MIME的編碼方式為作業資料名值對的資料進行編碼。

為資料加上數位簽名


當傳輸辭典從加入標題階段中出現時,它包含了傳輸所需要的所有資料。你可以為資料加上數位簽名來確保安全傳送。

數位簽名階段會在資料位元組的資料流裡加入數位簽名。另外,你也可以選擇在這個階段中使用元件將S/MIME編碼方式應用到資料作編碼。31
在這個階段裡相關的元件詳述如下:

元件 說明
DigitalSig 為作業資料名/值對中的資料加上數位簽名,使用的是Public Key Crypto System 7(PKCS7)。
EncodeSMIME 利用安全的MIME編碼方式為作業資料名/值對中的資料進行編碼。32

資料加密


資料加密階段會將要傳輸的作業資料加密,確保未經授權的使用者無法使用這些資料。元件使用由Microsoft Cryptographic應用程式介面(CryptoAPI)支援的加密技術,包括有:

Public Key Crypto System 7(PKCS7) 標準。

使用IETF EDINT draft Internet standard的EDI Message的S/MIME封裝技術。

自訂元件或協力廠商設計的元件。

在這個階段裡相關的元件有:

元件33 說明
EncryptPKCS 利用Public Key Crypto System (PKCS) 安全標準為企業資料物件進行加密。
EncodeSMIME 運用IETF EDINT draft Internet standard的MIME安全編碼方式為作業資料名值對中的資料進行編碼。 這個動作包括了為企業資料物件簽署數位簽名以及進行加密等動作。

稽核企業交易


審核階段會將企業交易中被選定的元素寫入稽核資料庫。34
在這個階段中相關的元件有:

元件 說明
Audit 從傳輸辭典中將特定資料寫入稽核資料庫的表格中。
AuditReceipt 將資料從收據裡寫入稽核資料庫。這個元件並不在傳輸管線中使用。35

傳輸資料


傳輸階段中包含了元件準備要傳輸的作業資料,以及接著將資料傳輸出去。在這個階段裡將其他元件與實際傳輸協定的細節部分隔離,並將對應的、簽過名的,及加密過的位元組串流傳送到目的地。

DCOM、SMTP與HTTP等傳輸協定及協力廠商所定義的協定都是目前廣被支援的協定。

在這個階段中相關的元件有:

元件 說明36
PipetoPipeTransfer 對遠端管線進行初始設定,並執行管線以便從目前的管線中接收傳輸目錄。
SendSMTP 將經過署名及加密的作業資料轉換成文字,然後將之以電子郵件訊息的方式傳送給特定的接收者。
SendHTTP 將經過署名及加密的作業資料轉換成文字,然後使用HTTP POST將資料傳送到網站的網頁上。
SendDCOM37 利用分散式元件物件模型(DCOM)傳送轉換過的作業資料,以在遠端商務伺服器電腦上建立並執行MtsTxPipeline或MtsPipeline物件。

建立與傳送採購訂單的程序


當企業個體想在電子商務交易之中開出訂單,它必須先作計劃,然後傳送訂單給企業的e-Partner。在這個主題中,你將學習如何建立採購訂單並以電子方式傳送訂單。

思考一下FiveLakes網站產生採購訂單並將之傳送給Ramona Publishing Web網站時使用的電子商務規則。欲建立並傳送採購訂單,FiveLakes網站必須執行下列程序:

建立並啟動「組織採購計劃管線」

當你使用Site Builder Wizard來建立電子商務網站時,系統會自動產生i_util.asp及xt_orderform_purchase.asp網頁。你將利用這些檔案來建立並啟動計劃管線。你必須修改這些檔案來建立並啟動「組織採購計劃管線」。
建立「組織採購確定管線」38

你必須建立「組織採購確定管線」來傳送採購訂單。管線的元件與元件的功能如下:

MakePO:產生採購訂單。

PotoFile:將採購訂單寫入檔案。

Scriptor:執行下面的工作:

建立交易用管線並載入管線設定參數檔案。

建立傳輸辭典。

執行管線的Execute方法。39

修改程式碼來啟動「組織採購確定管線」。

你必須修改xt_orderform_purchase.asp網頁,來啟動「組織採購確定管線」。
建立傳輸管線

你必須建立傳輸管線來傳送採購訂單給廠商。
啟動i_utli.asp網頁中的組織採購計劃管線


利用「組織採購計劃管線」你可以計算採購訂單的總和,包括所有促銷折扣、課稅、運送及處理費用。你必須修改i_util.asp網頁的UtlRunPlan函式來啟動新的「組織採購計劃管線」。 UtlRunPlan函式中啟動計劃管線的程式碼如下:

errorLevel = UtilRunPipe("plan.pcf", mscsOrderForm, _
mscsPipeContext)40
將之修改成:

errorLevel = UtilRunPipe("CorpPlan.pcf", mscsOrderForm, _
mscsPipeContext)
在這段程式範例中,CorpPlan.pcf為「組織採購計劃管線」的名字。

啟動xt_orderform_purchase.asp網頁中的組織採購計劃管線


在xt_orderform_purchase.asp網頁中,函式OrderFormPurchase會呼叫i_util.asp網頁的UtilRunPipe函式來載入並執行計劃管線。

下面的程式碼會在OrderFormPurchase函式中啟動計劃管線:

errorLevel = UtilRunPipe("plan.pcf", mscsOrderForm, _
mscsPipeContext)41
上面的程式碼修改如下,以啟動「組織採購計劃管線」:

errorLevel = UtilRunPipe("CorpPlan.pcf", mscsOrderForm, _
mscsPipeContext)
這段程式會執行管線中的特定階段,將它們的動作應用到OrderForm中。

建立組織採購確定管線


你可以建立「組織採購確定管線」來產生採購訂單。在採購訂單傳送階段中,藉著利用採購訂單樣板將資訊整合到訂單,你可以加入MakePO元件來產生採購訂單。

MakePO元件


就像ASP網頁一樣,在MakePO樣板中包含了散置在各特殊標籤中的純文字,標籤中內含script程式碼。在script程式裡,利用PageGen.Print指令可以產生輸出(output),或者利用<%% =expression %%> 指令。42
從MakePO樣板之中,企業物件以名為Items的物件展示出來。下面的程式碼執行了這項工作。

<%%
Dim nItemCount
nItemCount = Items.Items.count
If (nItemCount > 0) Then
Dim iItem,Item
For iItem = 0 To nItemCount - 1
Set Item = Items.Items.Item(iItem)
%%>
Order ID : <%% =Items.order_id %%> Item
Number:<%%= Item.sku %%> Qty:<%%= Item.quantity %%>
<%%
Next
End If
%%>
PotoFile元件


你所產生的採購訂單可以利用PotoFile元件寫入檔案。檔案的名稱與位址必須在PotoFile元件的屬性裡指定。

Scriptor元件


Scriptor元件是組織採購傳輸管線中最後一個被執行的元件。Scriptor元件負責執行以下的工作:

建立交易管線並載入管線的設定檔案。43

建立傳輸目錄。

執行管線的Execute方法。

Scriptor元件會建立並執行商務往來傳輸管線。函式會用到下面的四個參數:

Function mscsexecute(config, orderform, context, flags)
建立交易管線並載入管線的設定檔案


函式從建立交易管線(mscsMtsTxPipeline)開始,然後載入Transmit.pct管線的環境設定參數檔案。

Dim mscsMtsTxPipeline
Set mscsMtsTxPipeline = _
CreateObject("Commerce.MtsTxPipeline")
Call mscsMtsTxPipeline.loadpipe("transmit.pcf")44
建立傳輸辭典


接下來,函式會建立一個傳輸辭典,當作參數傳送給CIP。傳輸辭典包含了一個名/值對,指定要被傳送出去的企業物件。

Dim TransportDictionary
Set TransportDictionary = _
CreateObject("Commerce.Dictionary")
一個名為Object的值會被加入傳輸辭典,其值會被設定到訂單表單,如下所示:

Set TransportDictionary.object = orderform
物件屬性會被往來傳輸管線的第一個元件MapToXML使用。MapToXML負責讀取物件,將物件對應到連續的二進位格式,並將結果寫回working_data屬性。

在要求收據的個案中 必須加入以下的程式碼:45
TransportDictionary.Receipt_requested = "Yes"
執行管線的Execute方法


最後,函式會執行管線的Execute方法,將傳輸辭典與PipeContext辭典當作參數傳送,如下面的程式碼所示:

errorlevel = mscsMtsTxPipeline.Execute(1, _
TransportDictionary, context, 0)
啟動xt_orderform_purchase.asp網頁中的組織採購確定管線


「組織採購確定管線」必須從xt_orderform_purchase.asp網頁啟動。管線必須在採購被確認之後,以及在訂單表格被摧毀之前執行。

在xt_orderform_purchase.asp裡,OrderFormPurchase函式會呼叫UtilRunTxPipe函式在交易模式中來載入並執行「組織採購確定管線」。46
errorLevel = UtilRunTxPipe ("CorpSubmit.pcf"mscsOrderForm, _
mscsPipeContext)
建立傳輸管線


傳輸管線從將物件傳送給傳輸辭典的管線開始。隨著管線運作,不同的元件會將新的值傳給傳輸辭典。

現在你將建立一條傳輸管線,來從FiveLakes範例網站傳送採購訂單到Ramona Publishing網站。管線的各個階段將包括以下的元件:

在傳輸管線中的階段 包括的元件
對應47 MapToXML
加入標題 AddHeader
數位簽名 DigitalSig
加密 EncryptPKCS48
稽核 Audit
傳送 SendHTTP

在傳輸階段中,SendHTTP元件被用來將企業資料物件當作參數傳送到HTTP要求。SendHTTP元件利用HTTP POST來傳送資料,從傳輸辭典或訂單表單上的指定欄位傳到元件的URL欄位裡指定的網站網頁。

Localhost/Ramona/getdata.asp

--------------------------------------------------------------------------------
注意
本範例中的管線元件是適用於上述的狀況。你可以加入、移除,或修改元件以符合你的企業需求。49

--------------------------------------------------------------------------------

當管線執行完成,雖然原始的訂單表單物件還存在,但是傳輸辭典會自動被摧毀。

實作3: 建立並傳送採購訂單


目標


在完成這個實作之後,你將能夠:

建立「組織採購計劃管線」。

建立「組織採購確定管線」。

建立商務往來傳輸管線。50

利用傳輸管線來傳送採購訂單。

在您開始之前


先決條件


在開始進行實作之前,你必須擁有:

HTML與ASP scripting的基本知識。

熟悉Microsoft Internet Explorer與Microsoft Visual InterDev 6.0。

環境設定51


要完成本實作,你必須將檔案從<install folder>\Labs\Lab\03\FiveLakes \StartCode複製到C:\Interpub\wwwroot\FiveLakes\目錄下。如果出現提示畫面,按下 Yes 以覆蓋檔案與目錄。

4 預估完成時間:45分鐘

練習1:建立並執行組織採購計劃管線


在這個練習中,你將建立一個「組織採購計劃管線」並撰寫程式在FiveLakes網站啟動「組織採購計劃管線」。52
4 啟動Pipeline Editor (管線編輯器)。

點選開始,指向程式集,選擇 Microsoft Site Server 中的 Commerce ,然後按下53 Pipeline Editor 。

4 將FiveLakes網站的計劃管線修改成「組織採購計劃管線」

在 File 功能表中,點選54 New 。
會出現 Choose a Pipeline Template 對話盒,列出所有可以使用的樣板。
選擇 CorpPurchasingPlan.pct55 樣板,然後點選 OK 。
在 File 功能表中,點選 Open56 。
在路徑C:\InterPub\wwwroot\FiveLakes下,選擇 Config 目錄。
在 Config 目錄下,選擇plan.pcf,然後按下57 Open 來開啟目前的計劃管線。
在 Window 功能表中,點選 Tile 。兩個視窗會以水平方式並列。58
在計劃管線Product Info的步驟中,對 QueryProdInfoAdo 按下滑鼠右鍵,然後點選 Copy 。
在「組織採購計劃管線」的視窗裡,利用滑鼠右鍵點選 Requisition Item Info59 ,然後選擇 Paste Component 。
將元件換成下面表格所列的元件,重複步驟7與8。

計劃管線階段元件 組織採購計劃 管線階段60
Order Check Validate Ship-To Requisition Check
Item Adjust Price SaleAdjust Requisition Item Adjust Price
Order Adjust Price61 DbOrderPromoAdo Requisition Adjust Price

在元件上按滑鼠右鍵,點選 Delete 將目前的元件從「組織採購計劃管線」的傳輸階段中移除。
複製三個計劃管線的運送階段中的FixedShipping元件到「組織採購計劃管線」的傳輸階段中。
--------------------------------------------------------------------------------
注意
「組織採購計劃管線」的傳輸階段中,元件的順序應該要與計劃管線中傳輸階段的階層結構一樣。62

--------------------------------------------------------------------------------

在 File 功能表中,點選 Save As 將「組織採購計劃管線」儲存在C:\InterPub\wwwroot\ FiveLakes\Config目錄下。將檔案存成 CorpPlan.pcf 。當出現提示畫面時,選擇覆蓋現有檔案的選項。63
--------------------------------------------------------------------------------
注意
確定管線的檔名是文中所指定的檔名。不要使用預設的檔名。


--------------------------------------------------------------------------------

4 悉FiveLakes網站中的i_util.asp網頁與xt_orderform_purchase.asp網頁

在Microsoft Visual InterDev中開啟i_util.asp網頁。檔案位於C:\InterPub\wwwroot\ FiveLakes。
在UtilRunPlan函式中,找出下面的程式碼:

errorLevel = UtilRunPipe("CorpPlan.pcf", mscsOrderForm, _
mscsPipeContext)
在Microsoft Vusual InterDev中開啟64 xt_orderform_purchase.asp 網頁。檔案的位置是在FiveLakes網站的根目錄下。
在OrderFormPurchase函式中,找出下面的程式碼:

errorLevel = UtilRunPipe("CorpPlan.pcf", mscsOrderForm, _
mscsPipeContext)
練習2:建立組織採購確定管線


在這個練習中,你將建立一個「組織採購確定管線」。你也將撰寫程式碼來啟動FiveLakes範例網站的「組織採購確定管線」。

465 建立FiveLakes網站的「組織採購確定管線」

在Pipeline Editor裡,在 File 功能表中,點選 New 。
會出現66 Choose a Pipeline Template 對話盒,列出所有可以使用的樣板。
選擇 CorpPurchaseSubmit.pct ,然後點選 OK 。674 在採購訂單傳輸階段加入MakePO與POtoFile元件。

利用滑鼠右鍵點選 Purchase Order Submit ,然後點選 Insert Component 。68
會出現 Choose a component 對話盒,列出所有可以在這個階段中加入的元件。
選擇 MakePO ,然後按下 OK69 ,將元件加入這個階段。
利用滑鼠右鍵點選 MakePO ,然後點選 Properties 。會出現 Properties70 對話盒。
MakePO元件會運用樣板檔案來建立PO。點選 Browse 來選擇樣板檔案,選定FiveLakes網站Config目錄下的 POTemplate.txt ,然後按下 Open71 。
按下 OK 確認設定情形。
接下來,加入一個PotoFile元件到採購訂單傳輸階段中。利用滑鼠右鍵點選 MakePO ,指向72 Insert Component ,然後按下 After 。
此時會出現 Choose a component 對話盒,列出所有可以放入這個步驟的元件。73
選擇 PotoFile ,然後按下 OK ,將元件加入步驟中。
利用滑鼠右鍵點選 PotoFile74 ,然後點選 Properties 。
點選 Browse 來設定PO將被寫入檔案的名字。將Destination File Name改到FiveLakes目錄中,設定檔案名為 PO_Data.txt75 ,然後按下 Save 。
點選 Append to file instead of overwritting file ,然後按下 OK76 ,確認設定情形。
4 加入scriptor元件到採購訂單委託階段。

利用滑鼠右鍵點選 PotoFile ,指向 Insert Component77 ,然後點選 After 。
在 Choose a component 對話盒中,選擇 Scriptor78 ,然後按下 OK 將元件加入這個階段。
利用滑鼠右鍵點選 Scriptor ,然後點選 Properties79 。
於 Component Properties 對話盒的 Scriptor 標籤頁中,點選 External80 。
在 Scriptor 確認對話盒中,點選 No 。你將使用外部的script檔案。
點選81 Browse 來設定script檔案的名字及路徑。檔案CallTransmit.vbs是在FiveLakes網站的Config目錄下。該檔案將會啟動傳輸管線。在 Open 對話盒中,選擇 CallTransmit.vbs ,然後按下 Open82 。
按下 OK 來確認設定情形。
點選 File 功能表,然後按下83 Save As 來儲存「組織採購確定管線」。存到C:\InterPub\wwwroot\ FiveLakes\Config目錄中。在 Save As 對話盒中,輸入CorpSubmit.pcf,然後點選 Save 。當出現提示畫面時,選擇覆蓋現有檔案的選項。
--------------------------------------------------------------------------------
注意
確定管線的名字是文中所指定的。84

--------------------------------------------------------------------------------

4 熟悉FiveLakes網站的xt_orderform_purchase.asp網頁

在xt_orderform_purchase.asp網頁中,找出下面的程式碼:

errorLevel = UtilRunTxPipe("purchaseupdate.pcf",mscsOrderForm,_
mscsPipeContext)
else
REM Run the transacted pipe
errorLevel = UtilRunTxPipe("purchaseinsert.pcf",mscsOrderForm,_
mscsPipeContext)
end if
errorLevel = UtilRunSubmit("CorpSubmit.pcf",mscsOrderForm,_
mscsPipeContext)
這段程式會啟動採購與傳輸管線。

練習3:建立傳輸管線


在這個練習中,你將在FiveLakes範例網站上建立一個商務往來傳輸管線,用來傳送採購訂單。你將利用SendHTTP元件將採購訂單傳送到Ramona Publishing網站。85
4 在FiveLakes網站中建立商務往來傳輸管線

在Pipeline Editor視窗中,於 File 功能表上點選 New 。86
會出現 Choose a Pipeline Template 對話盒,列出所有可以使用的樣板。
選擇 transmit.pct ,然後按下 OK87 。
4 將MapToXML元件加入傳輸管線的對應階段

利用滑鼠右鍵點選 Map ,然後點選 Insert Component88 。
會出現 Choose a component 對話盒,列出所有可以選用的元件。
選擇 MapToXML ,然後按下89 OK 將元件加入對應階段。
利用滑鼠右鍵點選 MapToXML ,然後點選 Properties 。90
必須使用預設的設定。預設的Object Source Key為 object ,預設的Results XML Key為 working_data ,而優先的資料格式為 XML 標籤。91
點選 OK 以關閉 Properties 對話盒。
4 將AddHeader元件加到傳輸管線的加入標題階段92

利用滑鼠右鍵點選 Add Header ,然後按下 Insert Component 。
在 Choose a component93 對話盒中,選擇 AddHeader 元件,然後點選 OK 將元件加入這個階段。
利用滑鼠右鍵點選 AddHeader94 ,然後點選 Properties 。
必須使用預設的設定。輸入與輸出欄位的值都設定成 working_data 。
按下95 OK 以關閉 Properties 對話盒。
4 將SendHTTP元件加入到傳輸管線的傳輸階段

利用滑鼠右鍵點選96 Transport ,然後按下 Insert Component 。
在Choose a component對話盒中,選擇SendHTTP元件,然後按下 OK 將元件加入這個階段。97
利用滑鼠右鍵點選SendHTTP,然後點選Properties。
在URL欄位,輸入『localhost/Ramona/getdata.asp』。
指定的URL位址將會啟動Ramona網站的getdata.asp網頁。
在Field to be posted方塊中輸入『working_data』,然後按下OK確認設定情形。
在File功能表中,點選 Save As 儲存傳輸管線。將檔案存放在C:\InterPub\wwwroot\FiveLakes\ Config\目錄中,檔名為98 transmit.pcf 。當出現提示畫面時,選擇覆蓋現有檔案的選項。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:01 PM   #5 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

接收採購訂單


在典型的企業交易裡,企業會送出訂單給廠商,由廠商負責處理訂單。在電子商務的交易裡,廠商則是藉由使用接收管線來接收採購訂單。接收管線為Commerce Interchange Pipeline的一種。在這個部分,你將學習接收管線中的各個階段。你也將學習如何利用接收管線來接收採購訂單,以及如何傳送與接受收據。2
接收管線的各個階段


B2B電子商務的交易是一個雙向的程序。首先,e-Partner藉著使用傳輸管線將採購訂單當作資料物件傳送給廠商,來對交易進行初始設定。接著廠商則藉著接收管線來接收資料物件。

下面介紹了接收管線裡的七個階段。




接收管線會將儲存在傳輸辭典裡的資料取出,並將資料與目標應用程式整合。管線由下列七個階段所組成:

解密(Decypt)

驗證數位簽名(Verify Digital Signature)3

開啟標題(Open Header)

產生收據(Generate Receipt)

對應(Map)

稽核(Audit)

應用程式整合(Application Integration)

解密


為了確保安全,企業資料通常在傳送之前會作加密的動作。而加密過的資料在使用之前必須在接收端進行解密的動作。解密階段會對資料進行解密,並利用解密後的資料來更新傳輸辭典裡的作業資料。要進行資料解密,可以使用下面的元件:4
元件 說明
DecodeSMIME 元件會對以IETF EDINT draft Internet standard S/MIME (安全的MIME )格式封裝的資料流進行解碼,並將結果寫入作業資料。
DecryptPKCS 元件會使用PKCS7標準對資料流(data stream)進行解密, 並將結果寫入作業資料。

驗證數位簽名5


驗證數位簽名階段會確認簽署在資料上的e-Partner數位簽名。這個階段包括了下面兩個元件:

元件 說明
DecodeSMIME 元件會對以IETF EDINT draft Internet standard S/MIME (安全的MIME )格式封裝的資料物件進行解碼。
VerifyDigitalSig 元件會對使用PKCS7標準、儲存在傳輸辭典裡的資料上的數位簽名進行驗證。6

開啟標題


當資料傳送時,在傳輸管線中的加入標題階段會對作業資料進行封裝。接收管線的開啟標題階段則執行與傳輸管線中加入標題階段相對應的動作。當商業資料在接收管線對應階段中開啟,資料的訊息屬性會被儲存在傳輸辭典裡。

只有在傳送者要求回傳收據時,OpenHeader元件才會建立一份摘要。該摘要會證明已收到資料物件,並且在產生收據階段中摘要會被傳送給原始傳送者。這個階段裡擁有下面兩個元件:

元件 說明
DecodeMIME 元件會對以MIME格式封裝的資料物件進行解碼。7
OpenHeader 元件會剖析依附在資料物件上的XML資料。該資料是在傳輸管線加入標題階段被被添附到資料物件上的。它會將交易ID、傳輸的資料與時間,及訊息資料的選擇性摘要等資料以名值對的方式寫入傳輸辭典中。如果有選定的話,傳送者與接收者的位址也會被寫入。

產生收據


如果傳送者要求傳回收據,產生收據步驟會建立一個回傳收據的資料物件,然後啟動傳輸管線來傳送收據。這個步驟包括了下面兩個元件:

元件 說明
GenerateReceipt8 此元件會利用由OpenHeader元件產生的摘要。GenerateReceipt元件會讀取被寫入傳輸辭典的值。如果要求收據,元件會產生收據,並啟動傳輸管線來將之傳送給要求者。


--------------------------------------------------------------------------------
注意
原始傳送者會為收據提供接收管線。管線可以包含AuditReceipt元件,負責將收據寫入稽核資料庫。


--------------------------------------------------------------------------------

對應


對應階段會將儲存在傳輸辭典的作業資料轉換回原本的資料物件。這個階段擁有一個元件。

元件 說明
MapFromXML9 該元件將資料從XML資料流格式轉換回原始的資料物件。在資料轉換之後,它會將資料物件寫入傳輸辭典。

稽核


稽核階段會將企業交易的相關資訊儲存到稽核資料庫。這個階段擁有兩個元件。

元件 說明
Audit 該元件從傳輸辭典中讀取特定資料,並將之寫入稽核資料庫表格。10
AuditReceipt 該元件將資料從收據寫入稽核資料庫表格。

應用程式整合


應用程式整合階段包含了將資料物件轉換成可以被目標應用程式使用的資料格式的元件。這個階段只有一個元件。

元件 說明
SQLOrderADO11 該元件負責執行SQL查詢。

接收採購訂單的步驟


當e-Partner送出採購訂單給廠商,廠商必須在接收之前先建立一條接收管線。例如,如果FiveLakes網站傳送訂單給Ramona Publishing網站,Ramona網站必須建立接收管線,以便接收採購訂單,從訂單取得資料,並產生收據。

下面介紹了接收採購訂單的步驟。




SendHTTP元件被用來傳送採購訂單到Ramona網站。該元件會啟動getdata.asp網頁。getdata.asp網頁由廠商的系統執行,接收透過HTTP傳送的訂單收據要求。

在傳送者的網站(FiveLakes),會建立一份傳輸辭典來傳送訂單表單給傳輸管線。傳輸辭典中包含了訂單表單。傳輸管線中的元件會依據數值來更新傳輸辭典。12
啟動傳輸辭典


接收者網站(Ramona)應該建立一份傳輸辭典,當作參數傳送給接收管線。要啟動傳輸辭典,你必須執行以下的動作:

建立傳輸辭典

使用Request.Form方法來接收資訊

建立交易管線

建立內文辭典(Context Dictionary)

執行管線13

建立傳輸辭典


在Ramona網站的getdata.asp網頁包含了你必須用來建立傳輸辭典的程式碼。該網頁是由FiveLakes網站的傳輸管線裡SendHTTP元件所啟動。getdata.asp網頁的程式碼為:

Dim TransportDictionary
Set TransportDictionary = _
Server.CreateObject("Commerce.Dictionary")
利用Request.Form方法接收資訊


接下來,Request.Form方法會被用來接收傳送到網站的資訊。在傳輸辭典中,會建立一個名/值對來包含這項資訊。

TransportDictionary.working_data = Request.Form
建立交易管線14


交易管線(mscsMtsTxPipeline)被建立來載入接收管線。

Set pipe = Server.CreateObject("Commerce.MtsTxPipeline")
Call pipe.loadpipe("receive.pcf")
建立內文辭典與執行管線


接下來,將建立內文辭典,並且執行管線。

Set context = Server.CreateObject("Commerce.Dictionary")
errorlevel = pipe.Execute(1, TransportDictionary,context, 0)
在接收物件後,接收管線會利用下列階段來將物件解開封裝:解密、驗證、數位簽名、開啟標題、建立收據、對應、稽核,與應用程式整合。

請注意CIP接收管線執行與CIP傳輸管線相同的動作,只是順序剛好相反。15
解密階段


如果在e-Partner端的傳輸管線中有為資料物件進行加密,那麼解密階段會為該資料物件進行解密的動作。

驗證數位簽名階段


驗證數位簽名階段負責驗證e-Partner的數位簽名。例如,在這個階段裡的VerifyDigitalSig元件會使用傳送者的證明資料來驗證資料物件上的數位簽名。


--------------------------------------------------------------------------------
注意
傳輸管線的設計必須反映在接收端。例如,傳輸管線中有一個EncodeSMIME元件,那麼在接收管線則必須要有一個DecodeSMIME元件。如果傳輸管線有一個DigitalSig元件,那麼在接收管線就要有一個VerifyDigitalSig元件。


--------------------------------------------------------------------------------

開啟標題階段


開啟標題階段包含了OpenHeader元件。該元件會讀取依附在作業資料的XML標籤(標籤是由傳輸管線的AddHeader元件加到作業資料的),並將它們以名/值對的方式寫入傳輸辭典中。如果要求傳回收據,OpenHeader元件會萃選資料物件的資訊來建立摘要。摘要並不可讀,而是當收據使用。該摘要同樣也以名/值對的方式被寫入傳輸辭典。16
OpenHeader元件為下一階段(產生收據階段),準備一份傳輸辭典。

產生收據階段


產生收據階段利用GenerateReceipt元件讀取由OpenHeader元件所寫入的資料。該元件會建立一個回傳收據物件,然後利用一條新的傳輸管線將收據傳回給原始傳送者。GenerateReceipt元件並不是將所有存在原始傳輸辭典裡的值傳送出去-它只傳送交易ID、接收系統上的日期與時間、由OpenHeader元件產生的摘要,(選擇性的)與在原始傳輸中描述的文件形式、來源,及目的地等資訊。

GenerateReceipt元件的Send Receipt PCF檔案路徑指定了傳輸管線設定參數(.pcf)檔案的完整路徑。該元件是用來將收據回傳給原始傳送者。原始傳送者於是為收據準備一個接收管線。該接收管線內含了AuditReceipt元件,負責將收據寫入稽核資料庫的表格中。

對應階段


在對應階段,MapFromXML元件會將XML資料流轉換回資料物件。回傳的資料物件與其在傳送前的資料型態相同。接收的應用程式使用的是結果資料物件。MapFromXML元件可以對應由任何實作IpersistStreamInit或IPersistXML介面的資料物件所產生的資料。這些資料物件包括Commerce Server Dictionary、OrderForm,與Active Data Objects(ADO) Recordset。

應用程式整合階段17


應用程式整合階段是準備包含用來將資料物件對應到可以被目標應用程式讀取格式的物件。例如,你可以在應用程式整合階段中加入Scriptor元件來啟動外部的script。

這段script會建立一個連結到廠商的資料庫,並且能將資料從傳輸辭典寫入表格,如下所示:

Function mscsexecute(config, transportdictionary, _
Context, flags)
Dim Connection
Set Connection = CreateObject("ADODB.Connection")
connection.provider="sqloedb"
Connection.Open "datasource=ramona;initial "& _
"catalog=ramona;user id=sa; password=;"
Dim success
success = _

VendorInsertitems(transportdictionary.working_data, _
Connection,Context)
If success Then
mscsexecute = 1
Else
mscsexecute = 3
End If
Connection.close
End Function

Function VendorInsertitems(ByRef working_data, ByRef _
Connection,ByRef Context)
VendorInsertitems=True
dim re,po_no
set rs=CreateObject("ADODB.Recordset")
rs.open"ramona_po",connection,2,2
If rs.EOF Then
po_no=1
Else
rs.movelast
po_no=rs("po_no")
po_no=po_no + 1

For Each item In working_data.items

rs("po_no")=po_no
rs("sku")=item.sku

rs("name")=item.name
rs("quantity")=item.quantity
rs.update
next
rs.close
If (0 < Connection.Errors.Count) Then
VendorInsertitems = False
End If

End function
這段程式碼建立一個到Ramona資料庫的ADODB連結,並開啟資料庫中的Ramona_PO表格。script會產生採購訂單編號,並將採購訂單的詳細資料儲存到資料庫表格中。

實作4:接收採購訂單


目標


在完成實作之後,你將能夠:18
建立接收管線來接收採購訂單

藉著使用接收管線來接收採購訂單

傳送收據給原始傳送者

在原始傳送者的網站接收收據

在您開始之前


先決條件


在開始進行實作之前,你必須擁有:19
HTML與ASP scripting的基本知識。

熟悉Microsoft Internet Explorer與Microsoft Visual InterDev 6.0。

完成實作3的練習。

環境設定


要完成本實作,你必須將檔案從<install folder>\Labs\Lab\04\Ramona \StartCode複製到C:\Interpub\wwwroot\Ramona\目錄下。

4 預估完成時間:45分鐘20

練習1:使用接收管線來接收採購訂單


在這個練習中,你將在Ramona Publishing範例網站上接收採購訂單。

4 在網站目錄下開啟getdata.asp

開啟getdata.asp,位址是在C:\InterPub\wwwroot\Ramona,以及Microsoft VisualInterDev 6.0。

4 熟悉啟動接收管線的script程式碼21

在getdata.asp網頁中找出下面的程式碼。它將建立傳輸目錄並啟動接收管線。

<%
Dim TransportDictionary
set TransportDictionary = _
server.createobject("commerce.dictionary")
TransportDictionary.working_data = request.form

'Create a Pipeline Object, load a PCF
Set pipe = Server.CreateObject("Commerce.MtsPipeline")
call _
pipe.loadpipe("c:\inetpub\wwwroot\ramona\config\\"& _
"receive.pcf")

'Create a context dictionary and execute
Set context = Server.CreateObject("Commerce.Dictionary")
errorlevel = pipe.Execute(1, TransportDictionary, _
context, 0)
%>
關閉檔案。
4 啟動Pipeline Editor

按下 開始22 ,指向 程式集 ,點選 Microsoft Site Server 然後指向 Commerce ,接著按下23 Pipeline Editor 。

4 在Ramona網站建立接收管線

在 File 功能表中,點選24 New 。
在 Choose a Pipeline Template 對話盒中,選擇 receive.pct ,然後按下25 OK 。
4 在接收管線的開啟標題階段中加入OpenHeader元件

利用滑鼠右鍵點選 Open Header ,然後點選26 Insert Component 。
在 Choose a component 對話盒中,選擇 OpenHeader ,然後點選27 OK 。使用元件的預設值。
4 在接收管線的產生收據階段中加入GenerateReceipt元件

利用滑鼠右鍵點選 Generate Receipt ,然後點選28 Insert Component 。
在 Choose a component 對話盒中,選擇 GenerateReceipt ,然後點選29 OK 。
利用滑鼠右鍵點選 GenerateReceipt ,然後點選 Properties 。30
於 GenerateReceipt 標籤頁的 Send Receipt PCF file path 欄位輸入『C:\InterPub\wwwroot\Ramona\Config\transmit.pcf』,然後點選 OK 。314 在接收管線的對應階段中加入MapFromXML元件

利用滑鼠右鍵點選 Map ,然後點選 Insert Component 。32
在 Choose a component 對話盒中,選擇 MapFromXML ,然後點選 OK 。33
利用滑鼠右鍵點選 MapFromXML ,然後點選 Properties 。
於 Map From XML34 標籤頁中,將 Result Object Key 欄位的值從 object 改成 working_data ,然後點選35 OK 。
4 在接收管線的應用程式整合階段中加入Scriptor元件

利用滑鼠右鍵點選 Application Integration ,然後點選36 Insert Component 。
在 Choose a component 對話盒中,選擇 Scriptor ,然後點選37 OK 。
利用滑鼠右鍵點選 Scriptor ,然後點選 Properties 。38
於 Scriptor 標籤頁中,點選 External 。
在 Scriptor39 的確認對話盒中,點選 No 。你不希望內部的原始程式碼外流。
點選 Browse 來選擇script檔案。
將路徑改變成Ramona網站上的Config目錄。40
選擇 POAccess.vbs ,然後點選 Open 。
點選 OK41 來確認設定情形。
將管線 receive.pcf 儲存在C:\InterPub\wwwroot\Ramona\Config目錄下。當提示畫面出現時,選擇覆蓋現有檔案。
練習2:傳送收據給FiveLakes網頁


4 在Ramona網站建立傳輸管線。42

開起 Pipeline Editor 。
在 File 選單中,點選 New43 。
會出現 Choose a Pipeline Template 對話盒,列出所有可以選擇的樣板。
選擇 transmit.pct ,然後按下44 OK 。
4 在傳輸管線的對應階段中加入MapToXML元件

利用滑鼠右鍵點選 Map ,然後點選45 Insert Component 。
會出現 Choose a component 對話盒,列出所有可以選擇的元件。
選擇 MapToXML46 ,然後點選 OK 將元件加入步驟中。
利用滑鼠右鍵點選 MapToXML ,然後點選 Properties47 。
必須使用預設的設定。預設的Object Source Key為 object ,預設的Results XML Key為 working_data ,以及建議的資料格式為XML標籤。
按下48 OK 關閉對話盒。
4 在傳輸管線的加入標題階段中加入AddHeader元件

利用滑鼠右鍵點選 Add Header ,然後選擇49 Insert Component 。
在 Choose a component 對話盒中,選擇 AddHeader ,然後點選50 OK 將元件加入步驟中。
利用滑鼠右鍵點選 AddHeader ,然後選擇 Properties 。51
必須使用預設的設定。輸入與輸出的欄位值都設定成 working_data 。
按下 OK 關閉對話盒。
452 在傳輸管線的傳輸階段中加入SendHTTP元件

利用滑鼠右鍵點選 Transport ,然後選擇 Insert Component 。
在53 Choose a component 對話盒中,選擇 SendHTTP ,然後點選 OK 將元件加入這個階段。
利用滑鼠右鍵點選54 SendHTTP ,然後選擇 Properties 。
在 URL 欄位,輸入『localhost/FiveLakes/accreceipt.asp』。55
指定的URL位址將啟動FiveLakes網站上的accreceipt.asp檔案。
在 Field to posted 對話盒中,輸入 working_data ,然後點選 OK56 確認設定情形。
在 File 功能表中,選擇 Save 來儲存傳輸管線。
將檔案儲存為57 transmit.pcf ,放置在C:\InterPub\wwwroot\Ramona\Config目錄下。當提示畫面出現時,選擇覆蓋現有檔案。
練習3:接收Ramona網站送出的收據


在這個練習裡,你將在FiveLakes網站建立接收管線來接收來自Ramona網站的收據。

4 熟悉FiveLskes網站上啟動接收管線的script程式。

在Microsoft Visual InterDev 6.0中開啟C:\InterPub\wwwroot\FiveLakes\目錄下的58 accreceipt.asp 網頁。
瀏覽下面的程式碼,該程式將建立傳輸辭典並啟動接收管線:

<%
Dim TransportDictionary
set TransportDictionary = _
server.createobject("commerce.dictionary")
TransportDictionary.working_data = request.form
'Create a Pipeline Object, load a PCF
Set pipe = Server.CreateObject("Commerce.MtsPipeline")
call _
pipe.loadpipe("c:\inetpub\wwwroot\fivelakes\config\\"& _
"receive.pcf")
'Create a context dictionary and execute
Set context = Server.CreateObject("Commerce.Dictionary")
errorlevel = pipe.Execute(1, TransportDictionary, _
context, 0)
%>
關閉檔案。
4 啟動Pipeline Editor59

點選 開始 ,指向 程式集 選取 Microsoft Site Server 的60 Commerce ,然後點選 Pipeline Editor 。

4 建立接收管線

在61 File 功能表中,選擇 New 。
在 Choose a Pipeline Template 對話盒中,選擇62 receive.pct ,然後按下 OK 。
4 在接收管線的開啟標題階段中加入OpenHeader元件

利用滑鼠右鍵點選63 Open Header ,然後選擇 Insert Component 。
在 Choose a component 對話盒中,選擇64 OpenHeader ,然後點選 OK 。
必須使用預設的設定。
4 在接收管線的對應階段中加入MapToXML元件65

利用滑鼠右鍵點選 Map ,然後選擇 Insert Component 。
在 Choose a component66 對話盒中,選擇 MapFromXML ,然後點選 OK 。必須使用預設的設定。
4 在接收管線的階段中加入AuditReceipt元件67

利用滑鼠右鍵點選 Audit ,然後選擇 Insert Component 。
在 Choose a component68 對話盒中,選擇 AuditReceipt ,然後點選 OK 。
利用滑鼠右鍵點選 AuditReceipt69 ,然後選擇 Properties 。
在 AuditReceipt 標籤頁中:

a 於70 Connection String 欄位輸入『DSN=FiveLakes;UID=sa;PWD=;』指定連結的資料。

b 在 Table 欄位中輸入『FiveLakes_POReceipt』來指定表格以儲存收據。

在FiveLakes資料庫中已經建立FiveLakes_POReceipt表格。
點選71 OK 來確認設定情形。
將管線儲存在C:\InterPub\wwwroot\FiveLakes\Config目錄下的 receipt.pcf 檔案。當提示畫面出現時,選擇覆蓋現有檔案。
練習4:在FiveLakes網站上購物


假設你是一名在FiveLakes網站上下了訂單的顧客。因為FiveLakes並沒有存貨,所有的訂單都會自動地傳送到Ramona Publishing電子商務網站。從FiveLakes網站接收到訂單後,Ramona網站會處理訂單,產生收據,然後將收據傳回FiveLakes網站。採購訂單會儲存在Ramona資料庫的Ramona_PO表格中。而由Ramona網站送出的收據則儲存在FiveLakes資料庫的FiveLakes_POReceipt表格中。72
在這個練習中你將藉著在FiveLakes站上購物來展示傳輸與接收管線的使用。

4 在FiveLakes網站上購物

啟動Microsoft Internet Explore,在位址欄位中輸入URL位址『http://localhost/fivelakes/』。
點選 Computers 。73
點選 Computer Networks 來觀看產品的詳細介紹。
點選 Buy Now 將產品放入購物袋。
點選74 Continue to Checkout 來購買產品。
在 Shipping 網頁上點選 Total 。75
在 Payment 網頁上點選 Pruchase 。
4 瀏覽Ramona網站所收到的訂單, 以及FiveLakes網站收到的收據76

按下 開始 ,指向 程式集 選擇 Microsoft SQL Server™777.0 ,然後點選 Query Analyzer 來查詢Ramona_PO表格。
在 Connect to SQL Server 對話盒中,按下78 OK 。
在資料庫下拉式選單中選擇 Ramona 資料庫,然後輸入查詢:『SELECT * FROM Ramona_PO』。
按下 F579 執行查詢。
你將看到購買叢書的Sku、Name、Quantity,以及Purchase Number等資料。
在資料庫下拉式選單中選擇 FiveLakes 資料庫,然後輸入查詢『SELECT * FROM FiveLakes_POReceipt』。
按下 F580 執行查詢。
你將看到送出去的採購訂單上的產品ID、日期與時間、接收訊息、接收演算法,與文件形式等資料。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:05 PM   #6 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

Commerce Interchange Pipeline Manager2


CIP MAnager簡介

傳輸企業文件

CIP Manager


CIP Manager會根據e-Partner的設定檔及需求來動態地產生與維護管線以供電子交易的進行。CIP Manager介面為管理文件與e-Partner的設定檔提供了精靈與屬性頁面,替你省下使用Pipeline Editor手動地編輯管線的設定資料所花費的力氣。CIP Manager同時也將展示元件物件模組(COM)的介面,讓開發人員與協力廠商可以建立相容的元件,並輕易地根據他們的需求來連結元件。

下圖展示了實作CIP Manager必須被設定與管理的基本元素。




下面介紹在實作CIP MAnager時必須設定與管理的基本元素。3
本部組織

文件設定檔

接收位置

傳送設定檔

協議契約

本部組織


本部組織提供了運用CIP Manager的組織的相關資訊。為了建立本部組織,必須提供下列資訊:4
組織(公司)名稱

組織首頁的網站位址

組織的唯一往來識別代號,例如D&B D-U-N-S號碼(Dun & Bradstreet號碼)或電話號碼


--------------------------------------------------------------------------------
注意
Dun and Bradstreet D-U-N-S號碼是Dun and Bradstreet的唯一九碼識別序列,其連結到由D&B專門生產的豐富產品或服務資訊。D&B D-U-N-S號碼是EDI與全球電子商務交易中廣為國際識別的一般公司識別代號。有關D-U-N-S號碼及其用途,請參考位於 http://www.dnb.com/ 的D&B網站。


--------------------------------------------------------------------------------

組織的帳單與送貨地址5

交易往來的e-Partner名稱

傳送端與接收端的組織的往來識別代號。當你送出企業文件時,本部組織上的應用程式會使用往來識別代號來指定哪個e-Partner將接收文件。當e-Partner收到文件,文件的標題會指定一個往來識別代號,e-Partner會運用該代號以決定哪個應用程式應該來處理這份企業文件。本部組織的相關資訊是使用Home Information Wizard來建立與更新的。

文件設定檔


文件設定檔為企業文件的敘述。每一種形式的企業文件在傳送與接收的過程都需要不同的文件設定檔。下面介紹了兩種形式的文件設定檔:

本部文件設定檔是從你擁有的企業應用程式的觀點來描述企業文件。本部文件設定檔記載了從其他組織所收到的文件,稱為匯入文件,以及傳送到其他組織的文件,稱為匯出文件等的說明。這些設定檔都是利用Home Document Information Wizard來製作及更新。

夥伴文件設定檔是從e-Partner企業應用程式的觀點來描述企業文件。從e-Partner所收到文件的設定檔,稱為夥伴匯入文件設定檔。而從e-Partner所傳送出去文件的設定檔,稱為夥伴匯出文件的設定檔。這些夥伴文件的設定檔都是利用Partner Information Wizard來製作及更新。

下面的資訊會出現在文件的設定檔中:6
往來識別代號指定了與文件設定檔相關的組織。本部文件設定檔包含了本部組織的往來識別代號。夥伴文件設定檔則包含了e-Partner的往來識別代號。

在加密及簽署數位簽名時需要引用數位認證。這些數位認證的引用是選擇性的。

文件標題的標準格式-如ANSI X12、EDIFACT,或CIP XML標題-是在Partner Information Wizard中指定的。

接收位置


接收位置是交易設定檔(下一節會介紹)的一部份。它指定了企業文件被接收的位置,像網站位址或電子郵件信箱,以及在給定位置所接收到的文件如何被處理的相關資訊。接收位置同時也決定了使用的傳輸格式,例如電子郵件或HTTP。Receive Location Wizard會使用最共通的設定來建立標準的接收位置。

交易設定檔


為了簡化使用CIP Manager與其他e-Partner往來企業文件的過程,你可以為組織建立並匯出一個交易設定檔。這個設定檔公佈在可存取的位置,以供其他e-Partner使用。7
下面介紹的是交易設定檔所提供的資訊:

本部資訊

文件設定檔

認證資訊

位置資訊

交易設定檔是使用標準的XML標籤所撰寫的。當設定檔匯出時,它被儲存成XML檔案,由e-Partner匯入。Export Trading Profile Wizard會建立或更新你所公佈的交易設定檔。

協議契約8


協議契約定義了你的企業文件與e-Partner的企業文件間的關係。企業往來的每種形式文件都擁有一個不同的協議契約連接到文件。要建立協議契約,你必須先建立或取得本部文件設定檔,以及相關的夥伴文件設定檔。協議契約的形式有以下幾種:

匯出契約包含了所有CIP Manager為了產生傳輸管線所需的資訊。在建立匯出契約之前,必須設定下面的條件:


本部設定檔

夥伴設定檔

本部匯出文件設定檔

夥伴匯入文件設定檔

傳輸設定檔9

匯入契約包含了所有CIP Manager為了產生接收管線所需的資訊。在建立匯入契約之前,必須設定下面的條件:


本部資訊

夥伴資訊

本部匯入文件設定檔

夥伴匯出文件設定檔

傳輸企業文件


下圖描述了在傳送與接收企業文件所需的步驟:10



傳送企業文件


下面的表格列出CIP Manager用來提供函式進行傳送與接收文件的步驟

建立的物件與管線 設定 用途
IMSendReceiveTx11
MtsTxPipeline
執行:同行程
支援TD:是
建議在大多數的應用程式使用,包括在另一個交易管線內的執行以及傳回收據時。
IMSendReceive
MisPipline
執行:同行程12
支援TD:是
供要求企業資料物件,但不要收據的Microsoft Exchange Server scripts使用。可以提供任何不需要要求交易或收據的應用程式使用。
IMSendReceiveProxy
MtsPipeline
執行:跨行程
支援TD:否
提供要求交易或收據的Microsoft Exchange Server scripts使用。13

物件所提供的方法有以下幾個:

方法 說明
Send 傳送企業文件給e-Partner。
ReceiveStandard 提供位於標準接收位址的程式碼或script使用。為企業文件安排適當的Commerce Interchange Pipeline。14
ReceiveCustom 提供位於自訂接收位址的程式碼或script使用。結合接收位址來建立並執行接收管線。

準備企業文件以供傳輸


當你需要傳送企業文件給e-Partner,應用程式會呼叫IMSendReceiveTX或IMSendReceiveProxy物件的Send方法。這個方法會決定使用哪個匯出契約。接著該契約會指定如何翻譯、串列資料、加密、簽署數位簽名、加入標題,與傳輸文件。

串列資料(Serialization)


串列資料指的是將物件轉換成適合傳輸資料流的過程。在CIP Manager中,串列資料是由MapToXML元件執行。如果欲傳輸的資料是文字檔或單純的檔案,傳輸管線中並不需要進行串列資料的動作。而傳送經過串列的資料在接收之後必須進行反串列的動作。

翻譯15


翻譯是將企業文件中資料的呈現與欄位名稱作轉換,以提供給不同應用程式使用的過程。傳送者、接收者,或兩者都可以執行翻譯,由稱為翻譯引擎的自訂元件來進行。用來翻譯的元件提供了兩種方式將企業文件轉換成文字:

MapToXML

Scriptor

翻譯與串列資料的執行順序必須視元件的設計而定。如果翻譯引擎被設計來接收XML,而不是物件,則資料在傳輸之前必須先轉換成XML。相反地,如果翻譯引擎被設計來讀寫物件,則翻譯必須在串列資料之前發生。在某些例子中,單一元件即可執行這兩種作業。

傳送企業文件


傳送應用程式會提供文件的往來識別代號與匯出文件設定檔的名稱。Send方法利用這些資訊來決定應該使用哪個匯出契約。這個過程稱為匯出安排。

傳輸設定檔指定了透過傳輸管線將採用的安全防護與傳送企業文件所使用的傳輸協定。匯出安全階段支援了負責為匯出企業文件簽署數位簽名與加密的元件。16
傳輸階段負責將對應的、簽署過的,與加密過的位元組資料流傳送到目的地。

接收企業文件


當負責傳送的應用程式傳送企業文件到發佈的位址時,接收端位址的ASP檔或Microsoft Exchange Server script會建構一個IMSendReceive、IMSendReceiveTx或IMSendReceiveProxy物件,並呼叫ReceiveStandard或ReceiveCustom方法。

要利用CIP Manager來接收企業文件需要下面的要素:

標準的接收位置,來接收匯入的企業文件並提供一般的處理及安排。

匯入的契約,來執行特定處理作業,包括翻譯。

匯入的文件設定檔,來指定應用程式整合元件。17

企業系統,來接收最後資料。

接收位置指定了數個階段來:

在安全階段中指定如何進行解密與驗證數位簽名。

在開啟標題階段中指定如何讀取文件標題。

在排訂路線階段中決定使用哪個匯入契約。

在完成路線的安排之後,匯入契約會啟動並執行合適的接收管線,傳送接收到的企業文件。匯入契約會決定使用何種翻譯與回轉串列資料程序,以及應用程式整合元件。應用程式整合元件會將匯入企業文件傳送到你的組織所使用的企業應用程式,如會計系統。

程式導覽:建立應用程式來傳送企業資料物件18


在兩台電腦間完成設定來傳送與接收企業資料物件之後,你需要一個應用程式來負責傳輸企業資料物件。你可以協同廠商所製作的元件來達成這個目的,但通常需要自己建立自訂的元件。在實作5中,你將學習如何設定電腦來傳輸與接收資料物件。而在這個部分,你將學習如何以Visual Basic 6.0建立應用程式,用來傳輸企業資料物件。

建立應用程式來傳送企業資料物件需要以下步驟:

建立、連結,並發行Dictionary與SimpleList物件。
建立IMSendReceive物件並呼叫其Send方法。
清除物件。
在完成這些設定之後,應用程式會剖析來自表單的資料,並將之放在Dictionary與SimpleList中。接著這些物件會透過CIP傳輸管線被傳送到另一個應用程式進行處理。

419 建立可以用來傳輸企業資料物件的Visual Basic專案程式

啟動Visual Basic 6.0。
在New Project視窗,點選 ActiveX DLL ,然後按下 Open 來確認你的設定。20
在 Project 功能表中,點選 Project 1 Properties 。此時 Properties 視窗會出現。21
在 General 標籤頁中,選擇 Threaading Model 列表中的 Apartment Threaded 。22
選取 Unattended Execution 核取方塊。
在 Project Name 對話盒中,輸入 CIPMTransmit23 ,然後點選 OK 。
在 Project Explorer 視窗中,利用滑鼠右鍵點選 Class124 ,然後選擇 Save Class1 As 。
在 Save File As 視窗中,於 File nam25 e方塊中輸入『CIPMTransmit』,然後點選 Save 。
View 功能表中,點選 Properties Windows 。26
在 Alphabetic 標籤頁中,選擇 MTS Transaction Mode 列表中的 3-Uses Transaction 。27
你可以在路徑<install folder>\DemoCode\Mod05找到CIPMTransmit專案的範例。
企業資料物件


在這個例子中,企業資料物件代表的是書本的訂單,稱為BookOrder。BookOrder是以商務辭典物件的方式實作,包括了消費者資訊與訂購的書本清單。辭典Items欄位項目包含了訂購書本清單。該清單是以商務伺服器SimpleList物件的方式實作,列表中的每一個元素都對應一本書。每本書依序代表一個商務伺服器端Dictionary物件。每個辭典擁有兩個欄位ISBN與Title,用來作為書本的識別用。

4 建立、連結,與發行企業資料物件來表示書本訂單

為專案設定Commerce - MSCSCore Type Library或mscscore.dll的引用。這個引用提供建立辭典物件所需的類別。
使用下面的程式碼來宣告並建立一個名為BookOrder的新辭典物件:28

Dim BookOrder As New CDictionary
在BookOrder建立完成後,透過下列程式碼為每個元素建立辭典,從表單將消費者資料加到書本訂單中。

BookOrder.Customer = txtCustomer.Text
BookOrder.Address = txtAddress.Text
BookOrder.City = txtCity.Text
BookOrder.State = txtState.Text
BookOrder.Zip= txtZip.Text
使用下面的程式碼來宣告並建立名為BookList的SimpleList物件:

Dim BookList As New CSimpleList


這個物件將會包含一份使用者所選擇的書目清單。

為辭典項目Items命名,並將項目列表加入書本訂單中,如下所示:29

Set BookOrder.Items = BookList
利用下面的程式,宣告並建立名為Item的辭典物件來表示每一本書。你將在用來取得購物籃裡每一本書的迴圈中使用這個物件。

Dim Item As New Cdictionary
透過加入項目到辭典中來加入項目資料到Item辭典,並且為項目ISBM與Title命名。

Item.ISBN = strISBN
Item.Title = strTitle
透過呼叫SimpleList物件的Add()方法將Item辭典加到項目列表物件中。以參數的方式來傳送Item辭典。在這個敘述之後將迴圈關閉。下面的程式是用來將Item當作參數傳送給辭典。

Call BookList.Add (Item)30


當程式執行後,書本訂單會被建立、連結,與發行。它包含了消費者資訊,以及書本清單列表。

4 傳送書本訂單

在BookOrder物件被建立及發行之後,它需要被傳送。

為專案設定Microsoft CIP Manager 1.0 SendReceive Library或ImSndRcv.dll的參照。這個參照會提供類別來建立IMSendReceiveTx物件。
要傳送BookOrder物件,請利用下面的程式碼來宣告並建立一份傳輸辭典:

Dim dictTransport As New CDictionary31
使用下面的程式,建立IMSendReceiveTx物件,提供Send方法供他人使用。

Dim objSendRecv As New ImSendReceiveTx
傳統上,當往來企業文件時,傳輸辭典包含了一項稱為Object的資料,是一個企業資料物件。在這個範例中的企業資料物件是BookOrder辭典。用下面的方式將這個物件加入傳輸辭典:

Set dictTransport.Object = BookOrder
要傳送企業資料物件,可以呼叫你所建立的IMSendReceiveTx物件的Send方法,如下所示:

objSendRecv.Send "Dun & Bradstreet", _
"123456789","TestSend",dictTransport,2

--------------------------------------------------------------------------------
注意
1使管線無法記錄,2則讓管線可以記錄。32

--------------------------------------------------------------------------------

建立整合管線元件的應用程式


建立管線元件

為元件建立並連接屬性頁面

為元件註冊族群關係

當Commerce Interchange Pipeline完成設定,任何需要使用元件來接收資料的應用程式就可以被寫入接收管線中。

在這個章節中,你將建立應用程式整合元件。該元件會讀取傳送管線中的企業資料物件。則應用程式整合元件接著會將資料寫入檔案中。

在完成這個部分的學習之後,你將能夠:33
建立管線元件

將管線與UI元件連接

為元件註冊族群關係

程式導覽:建立管線元件


應用程式整合階段可以包含元件,將資料從企業資料物件轉換成可以被目標應用程式讀取的格式。在這個主題中你所建立的應用程式將會從dictTransport物件中讀取資料,並將之寫入文字檔。

在這個主題中,你將學習如何:

建立ActiveX DLL專案。34

設定管線元件。

加入程式碼來支援管線介面。

加入屬性。

實作IpipelineComponet實例的方法。

建立元件。


--------------------------------------------------------------------------------
注意
程序中副標題下出現的指令代表程式中需要進行的修改,以便將資料寫入資料庫。因此程序中出現的指令是正確的,可以將資料寫入文字檔。


--------------------------------------------------------------------------------

建立ActiveX DLL專案35


建立元件的第一步就是建立ActiveX DLL專案,讓你加入必要的程式碼來實作元件。

4 建立ActiveX DLL

啟動Visual Basic 6.0。
在 New Project 視窗中,點選36 ActiveX DLL ,然後按下 Open 來開啟新的專案。
在 Project 功能表中,點選37 Project Properties 。這時會出現 Properties 視窗。
在 General 標籤頁中,於38 Threading Mode l列表中選擇 Apartment Threaded 。
選取 Unattended Execution 核取方塊。39
在 Project Name 對話盒中,輸入 CIPMReceiv e,然後按下 OK 。40
在 Project Explorer 視窗中,利用滑鼠右鍵點選 Class1 ,然後選擇 Save Class1 As 。41
在 Save File As 視窗中,於 File name 方塊中輸入『CIPMRcv』,然後按下 Save 。42
在 View 功能表中,點選 Properties Window 。
在 Application43 標籤頁中,選擇 MTS Transaction Mode 列表中的 3-Uses Transaction 。
如此你已建立一個ActiveX DLL專案,以參與MtsTxPipeline中的MTS交易。 Unattended Execution44 選項確保元件會將錯誤訊息寫入事件記錄中,並且不會將錯誤展示在訊息方塊中。

實作必要介面


現在你已經建立一個ActiveX DLL,你必須在專案中參照Pipeline 1.0 Type Library,以便使用其中的物件與介面。所有的管線元件必須實作IPipelineComponent介面,在元件之間傳送OrderForm物件介面指標。如果元件傳回錯誤訊息,管線會結束執行並將錯誤訊息傳送給呼叫者。

IPipelineComponent介面定義的方法如下:

方法 說明
Execute45 Order Processing Pipeline (OPP)或Commerce Interchange Pipeline (CIP) 開始執行元件的切入點。
EnableDesign 此方法負責設定元件上的設計模式。

4 實作必要的IPipelineComponent介面

在ActiveX DLL專案的類別模組中,加入以下的程式碼:


Option Explicit
Implements IPipelineComponent46
這個元件支援一項稱為FileName的屬性,用來指定當訂單資料被寫入磁碟時所使用的路徑與檔案名稱。你必須建立變數來儲存檔案名稱與代表屬性是否被更改的旗標(flag)。

4 為檔案名稱及旗標建立變數

加入以下的程式碼:


Dim strFilename As String
Dim fDirty As Boolean
為資料庫宣告變數來儲存DSN與表格名稱。之前的變數strFilename並不需要,相反地,需要使用以下的變數:

Dim strDsnName As String
Dim strTableName As String47
實作IPipelineComponent介面的方法


接下來,你必須指定元件執行的模式。可選擇的模式有設計模式與執行模式。EnableDesign方法是用來準備元件以供任一模式的執行。執行模式是管線開始執行的預設模式。

4 指定元件將以何種模式執行

加入以下的程式:


Private Sub IPipelineComponent_EnableDesign(ByVal fEnable _
As Long)
End Sub
當管線建立元件的實例,在元件的IPipelineComponent實作上需要一個介面指標,然後使用該指標來呼叫元件的Execute實作。48
將資料寫入文字檔


一旦元件的Execute實作被呼叫,將資料從dirTransport物件進行轉換的程式碼必須加到ActiveX DLL中:

4 將dirTransport物件中的資料寫入文字檔

藉著在ActiveX DLL檔案中的其他區段之後加入下面的程式碼來建立一個私有函式:

Private Function IPipelineComponent_Execute(ByVal _
dictTransport As Object,ByVal pdispContext As Object _
,ByVal lFlags As Long) As Long
End Function
加入下面的程式碼來對必要的變數進行初始化設定:49

Dim BookOrder
Dim Item
Dim I
加入下面的程式碼進行錯誤狀況處理:

On Error GoTo Error

--------------------------------------------------------------------------------
注意
Error區段必須在函式的尾端。


--------------------------------------------------------------------------------


IpipelineComponent_Execute = 3
在On Error GoTo指令後,加入下面的程式碼,將包含在dictTransport物件中的資料傳送到變數BookOrder之中:

Set BookOrder = dictTransport.object50
加入下面的程式碼來檢查空白檔名並作處理:

If strFilename = "" Then
GoTo Error
End If

在資料庫的部份,更改If的條件如下:

If strDsnName = "" Or strTableName = "" Then
加入下面的程式碼來建立文字檔並將資料寫入:

Open strFilename For Output As #1
Write #1, "customer Details"
Write #1, BookOrder.Customer
Write #1, BookOrder.Address
Write #1, BookOrder.City & ", " & _
BookOrder.State & " " & _
BookOrder.Zip
Write #1, "BookOrder Details"
Write #1, "Number of items= " & _
Str(BookOrder.Items.Count)

For Each Item In BookOrder.Items
Write #1, Item.ISBN & ", " & Item.Title
Next
Close #1
在資料庫的部分,設定Microsoft ActiveX Data Objects 2.1 Type Library的參照,並將前面的程式碼換成下面的程式:51


Dim Con As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim Po_no As Integer

Con.Open strDsnName, "sa"
Rs.Open strTableName, 2, 2
If Rs.EOF Then
Po_no = 1
Else
Rs.MoveLast
Po_no = Rs("po_no")
Po_no = Po_no + 1
End If
Rs.AddNew
Rs("po_no") = Po_no
Rs("customer") = BookOrder.Customer
Rs("address") = BookOrder.Address
Rs("city") = BookOrder.City
Rs("state") = BookOrder.State
Rs("Zip") = BookOrder.Zip
Rs("total_items ")=Str(BookOrder.Item.Count)
Rs.Update
Rs.Close

'PO_Details contains the details of each purchase made
Rs.Open "PO_Details", 2 , 2
For Each Item In BookOrder.Items
Rs.AddNew
Rs("po_no") = Po_no
Rs("isbn") = Item.ISBN
Rs("title") = Item.Title
Rs.Update
Next
Rs.Close
Con.Close
加入下面的程式碼來跳過錯誤處理:

IpipelineComponent_Execute = 1
Exit Function

當學習有關連結屬性頁面到元件上時,我們將繼續這段程式。
程式導覽:為元件建立並連結屬性頁面


當你為元件提供屬性頁面,使用者可以設定元件將資料寫入的檔案名稱與路徑。管線管理元件會為使用者展示屬性頁面讓它們來設定元件。屬性頁面可以用Visual Basic的表單來實作。它是一個單獨的元件,所以可以展現使用者介面,而管線元件可以標記成無須使用者介入的執行(意指程式可獨立運行,不需使用者的介入)。


--------------------------------------------------------------------------------
注意
程序中副標題下出現的指令代表了程式中需要進行的修改,以便將資料寫入資料庫。程序中出現的指令是正確的,可以將資料寫入文字檔。52

--------------------------------------------------------------------------------

建立屬性頁面


要為元件建構屬性頁面,開啟一個Visual Basic專案並建立一個ActiveX DLL。

4 建立ActiveX DLL

在 File 功能表中,點選53 New Project 。
在 New Project 視窗中,點選 ActiveXDLL ,然後按下54 Open 來開啟新專案。
在 project 功能表中,點選 Project1 Properties 。55
會出現 Properties 視窗。
在 Project Name 方塊中,輸入『CIPMReceiveUI』,然後按下 OK56 。
在 Project Explorer 視窗中,利用滑鼠右鍵點選 Class1 。
在57 Save File As 視窗中,點選 Save Class1 As 。
在 File name 方塊中,輸入『ComponentUI』,然後按下58 Save 。
選擇管線的參照


4 選擇管線參照

在 Project59 功能表中,點選 Reference 。
在 Reference-CIPMReceiveUI 選單中,點選 Browse60 。
瀏覽至路徑Microsoft Site Server\Bin\MscsCore.dll,然後點選 Open 。
點選 Browse ,瀏覽至路徑Microsoft Site Server\SiteServer\Commerce \SDK\Commerce\ i386\pipecomplib.tlb,點選61 Open ,然後按下 OK 。
建立介面


在你建立ActiveX DLL之後,你必須製作元件的使用者將會看到的表單。在這個例子中,你將使用文字盒來讀取使用者的輸入。欲展示使用者介面,元件必須實作IPipelineComponentUI。

462 建立使用者介面

在專案中加入表單,並將表單的Name屬性設定成 ComponentUIForm。
加入Label控制項到表單上,並將Caption屬性設定成 Filename 。
加入TextBox控制項到表單上,並將Name屬性設定成63 txtFilename 。
加入CommandButton控制項到表單上,並將Name與Caption屬性分別設定成 fOK 與 OK 。644 實作IPipelineComponentUI

在ActiveX DLL中加入以下的程式碼:



Option Explicit
Implements IpipelineComponentUI

IPipelineComponentUI的ShowProperties方法負責展示使用者介面。
建立自訂類別


465 建立自訂類別

加入下面的程式碼來宣告用來呼叫ShowProperties方法的程序:

Private Sub
IPipelineComponentUI_ShowProperties(ByVal _
pdispComponent As Object)
End Sub
加入下面的程式碼來追蹤並處理錯誤狀況:

On Error GoTo HandleError
HandleError:
MsgBox Err.Description & " " & Err.Number
加入下面的程式碼在使用者介面與元件之間建立介面:

Dim pdispPCA As IpipelineComponentAdmin66
加入下面的程式碼將辭典與元件設定放在一起:

set pdispPCA=pdispComponent
Dim dictConfig As Cdictionary
Set dictConfig=pdispPCA.GetConfigData
加入下面的程式碼來建立表單以讀取使用者的輸入:

Dim frm As New ComponentUIForm
frm.txtFilename.Text = dictConfig("filename")
frm.Show 1
If frm.fOK Then
dictConfig("filename") =
frm.txtFilename.Text
pdispPCA.SetConfigData dictConfig
End If
在資料庫的部分,將前面的程式碼換成以下的程式:



Dim frm As New ComponentUIForm
frm.txtDSNname.Text = dictConfig("dsnname")
frm.txtTablename.Text = dictConfig("tablename")
frm.Show 1
If frm.fOK Then
dictConfig("dsnname") = frm.txtDSNname.Text
dictConfig("tablename") =
frm.txtTablename.Text
pdispPCA.SetConfigData dictConfig
End If

使用者將使用表單來用輸入路徑與檔案名稱,用以儲存企業文件。67
加入下面的程式碼釋放變數所使用的記憶體並跳出程序:

Set pdispPCA = Nothing
Set dictConfig = Nothing
Exit Sub
現在你已經建立一個管線元件與第二個元件來實作使用者介面以編輯元件屬性。然而,這兩個元件還未連結。同樣地,管線元件將不會出現在CIP Manager的下拉式列表中。要達成這項工作,元件必須支援某些介面。在下一個主題中,你將學習整合這兩個元件的方法。

為元件連結屬性頁面


首先,重新開啟你所建立的ActiveX DLL專案來建立屬性頁面。要將屬性頁面連結到元件上,必須在專案中加入下列的參照:

Commerce - MSCSCore Type Library

Microsoft Commerce Pipeline Components Type Library68

要提供必需的功能,元件必須支援額外的介面


--------------------------------------------------------------------------------
注意
如果函式庫的名字未列在 References 對話盒中,點選 Browse , 尋找mscscore.dll及pipecomplib.tlb,並且在專案中參照兩者。


--------------------------------------------------------------------------------

469 為介面實作必要的類別

在檔案中找出下面的程式:

Implements IpipelineComponentUI
加入下面的程式來實作介面:

Implements IspecifyPipelineComponentUI
Implements IpipelineComponentDescription
Implements IpipelineComponentAdmin
Implements IPersistDictionary
要為那些替Pipeline Editor或CIP Manager實作編輯使用者介面的DLL的傳回progID,你必須實作IspecifyPipelineCompoenetUI。

470 實作IspecifyPipelineComponentUI

在檔案的尾端,加入以下的程式碼來建立必要的函式:


Private Function _
ISpecifyPipelineComponentUI_GetPipelineComponentUIProgID(_
) As String
ISpecifyPipelineComponentUI_GetPipelineComponentUIProgID =
"CIPMReceiveUI.ComponentUI"
End Function
GetPipelineComponentUIProgID方法會傳回相關元件的程式ID,讓這個元件的使用者介面能有效運作。該方法能夠讓呼叫應用程式,如CIP Manager,來決定哪個使用者介面與元件相關聯。在這個範例中,介面元件是CIPMReceiveUI.CompoenetUI。

4 實作IPipelineComponentDescription介面

IPipelineComponentDescription介面讓管線元件能夠發佈它們從管線裡所讀到的值,以及從傳輸辭典所讀到的名/值對或要寫入傳輸辭典的名/值對。相反地,元件從傳輸辭典讀取作業資料,但並不會將資料寫回傳輸辭典。71
ContextValuesRead方法會識別元件讀取的管線本文元素。

在檔案的尾端,加入下面的程式碼來實作ContextValuesRead方法:

Private Function _
IPipelineComponentDescription_ContextValuesRead() _

As Variant
IPipelineComponentDescription_ContextValuesRead = Array("None")

End Function
ValuesRead方法會識別元件從OrderForm中讀取到的名/值對。

在檔案的尾端,加入下面的程式碼來實作ValuesRead方法:

Private Function IPipelineComponentDescription_ValuesRead _
() As Variant
IPipelineComponentDescription_ValuesRead = _
Array("working_data")

End Function
ValuesWritten方法會識別元件在OrderForm修改過的名/值對。72
在檔案的尾端,加入下面的程式碼來實作ValuesWritten方法:

Private Function_
IPipelineComponentDescription_ValuesWritten()As Variant
IPipelineComponentDescription_ValuesWritten = _
Array("None")

End Function
IpipelineComponentAdmin元件的GetConfigData與SetConfigData方法在CIPMReceiveUI.ComponentUI中被呼叫。GetConfigData讓使用者介面元件能夠從元件讀取目前的值,並且在一開始就將它展示在屬性頁。SetConfigData則是在使用者改變數值後並按下 OK 時,從屬性頁面將更新過的值寫回元件。

4 實作IpipelineComponentAdmin元件73

在檔案的尾端,加入下面的程式碼來實作GetConfigData方法:

Private Function IPipelineComponentAdmin_GetConfigData() _
As Object
Dim objectConfig As New Cdictionary

objectConfig.Value("filename") = strFilename

Set IPipelineComponentAdmin_GetConfigData = objectConfig
End Function

在資料庫的部分,將上面的程式置換成下列程式:

Private Function IPipelineComponentAdmin_GetConfigData() _
As Object
Dim objectConfig As New Cdictionary
objectConfig.Value("dsnname") = strDsnName
objectConfig.Value("tablename") = strTableName
Set IPipelineComponentAdmin_GetConfigData = objectConfig
End Function
在檔案的尾端,加入下面的程式碼來實作SetConfigData方法:

Private Sub IPipelineComponentAdmin_SetConfigData(ByVal _
pDict As Object)
strFilename=pDict.Value("filename")
End Sub

在資料庫的部分,將上面的程式置換成下列程式:74

Private Sub IPipelineComponentAdmin_SetConfigData(ByVal _
pDict As Object)
strDsnName = pDict.Value("dsnname")
strTableName = pDict.Value("tablename")
End Sub
如果你是在建立專案,元件會出現在CIP Manager的元件列表中,而且屬性頁面會正確地出現。然而,當屬性值在屬性頁面中被編輯,CIP Manager無法紀錄該屬性值。

要解決這項問題,你必須加入對IPersistDictionary介面的支援。

GetProgID方法被用來指定將使用哪個元件。

4 實作GetProgID方法

在檔案的尾端,加入下面的程式碼:75


Private Function IPersistDictionary_GetProgID() As String
IPersistDictionary_GetProgID = "CIPMReceive.CIPMRcv"
End Function
InitNew方法是用來對屬性值做初始化的動作。

4 實作InitNew方法

在檔案的尾端,加入下面的程式碼:


Private Sub IPersistDictionary_InitNew()
strFilename = ""
fDirty=False
End Sub
在資料庫的部分, 將上面的程式置換成下列程式:76


Private Sub IPersistDictionary_InitNew()
strDsnName = ""
strTableName = ""
fDirty = False
End Sub
IsDirty方法是用來表示屬性值是否被更改過。

4 實作IsDirty方法

在檔案的尾端,加入下面的程式碼:


Private Function IPersistDictionary_IsDirty() As Long
IPersistDictionary_IsDirty = fDirty
End Function
IpersistDictionary的Save方法會將元件的屬性值複製到辭典中,然後再寫入磁碟。77
4 實作Save方法

在檔案的尾端,加入下面的程式碼:


Private Sub IPersistDictionary_Save(ByVal pdispDict As _
Object,A ByVal fSameAsLoad As Long)
pdispDict.Filenm = strFilename
End Sub
在資料庫的部分,將上面的程式置換成下列程式:



Private Sub IPersistDictionary_Save(ByVal pdispDict As _
Object,A ByVal fSameAsLoad As Long)
pdispDict.Dsnnm = strDsnName
pdispDict.Tablenm = strTableName
End Sub
Load方法會從已完成資料核對的辭典取得元件的屬性值,並將值複製到元件的屬性。78
4 實作Load方法

在檔案的尾端,加入下面的程式碼來實作Save方法:


Private Sub IPersistDictionary_Load(ByVal pdispDict _
As Object)
strFilename = pdispDict.Filenm
End Sub
在資料庫的部分,將上面的程式置換成下列程式:



Private Sub IPersistDictionary_Load(ByVal pdispDict _
As Object)
strDsnName = pdispDict.Dsnnm
strTableName = pdispDict.Tablenm
End Sub
現在元件擁有在應用程式整合階段中CIP Manager與Pipeline Editor中需要使用到的所有介面。然而,對CIP Manager與Pipeline Editor中所列出的元件而言,它必須先註冊,而且元件的族群關係必須在電腦上被建立,則該元件才能被使用。79
為元件註冊族群關係


要在管線中使用元件,首先你必須為所有管線元件以及會使用在管線的哪個階段,將元件與目錄ID進行註冊。

一旦建立元件之後,你必須將專案的屬性設定成二進位相容。這個模式確保每一次你對DLL進行編譯時,你不會為物件產生一個新的全域唯一識別代號(GUID)。

加入族群關係


每一個管線元件必須與兩個目錄ID建立關聯。一個目錄ID會將元件確認成為管線元件。第二個目錄,稱為族群關係,會指定元件將在哪個階段中被使用。

要建立這些關聯,你必須在你建立自訂元件的電腦(接收端電腦)上執行下列的程序。你將使用.reg檔來製作這些關聯。

.reg檔案的第一組指令讓元件在Show All被選定時,可以出現在元件選單中。第二組指令則是讓元件出現在與特定階段相關的元件列表中。80

第一組與第二組指令被用來為你建立的元件設定類別ID。

目錄ID被列在Commerce Server SDK的pipe_stage.h檔案中。其位置在Microsoft Site Server\Commerce\SDK\Commerce\include\pipe_stage.h

設定管線元件被使用時所在階段的目錄ID。該目錄ID值會出現在元件的註解中。複製其值並將之貼在.reg檔案中,來置換catid_stage的值。在這個範例中,因為你建立的是應用程式整合元件,你將使用應用程式整合階段的目錄ID,其值為{D3A71C37-FFC7-11D0-B885-00C04FD7A0F9}。

.reg檔案中的資料記錄如下:

[HKEY_CLASSES_ROOT\CLSID\{ clsid_component}\Implemented
Categories\{CF7536D0-43C5-11D0-B85D-00C04FD7A0FA}]

[HKEY_CLASSES_ROOT\CLSID\{ clsid_component}\Implemented
Categories\{ catid_stage}]
這些資料記錄位於affinity.reg檔案中,你將在實作中用到這些資料。你可以使用Registry Editor或OLE Viewer來取得disk_component的數值。

在註冊區段中,注意下列事項:81


元件的類別ID是clsid_component。

管線元件被執行時所在階段的目錄ID為clsid_stage。

用來確認某個物件為管線元件的元件,其目錄ID為 CF7536D0-43C5-11D0-B85D-00C04FD7A0FA。

最後,要更新Registry,利用滑鼠右鍵點選.reg檔,然後選擇 合併 。如果合併成功,會有訊息代表該資訊已經成功地被加入Registry中。

在元件成功地被註冊之後,它可以在Pipeline Editor或CIP Manager中使用。82
4 使用你所建立的自訂元件

在接收端電腦上,指定你的新元件作為應用程式整合元件。
在匯入文件設定檔中,將你的元件設定成應用程式整合元件。
利用你為元件建立的屬性頁面來設定元件的屬性。
在兩端電腦上設定契約以支援串列資料的進行。
會需要這個步驟是因為應用程式傳輸的是企業資料物件,不是文字。要傳送資料物件,物件必須以稱為83 Object 的欄位出現在傳輸辭典中,而且MapToXML與MapFromXML元件必須分別出現在傳輸與接收管線之中。

實作5:在CIP Manager中建立並使用應用程式整合管線元件


目標


在完成這個實作之後,你將能夠:

使用CIP Manager來設定電腦以便從e-Partner傳送與接收企業文件。

以Microsoft Visual Basic 建立應用程式整合元件。84

為元件建立族群關係。

在您開始之前


先決條件


在開始進行實作之前,你必須具有:

在Visual Basic 6.0環境下的作業知識。

區分工作群組與網域的知識。

環境設定85


本實作需要兩台電腦,一台用來傳輸企業文件,一台用來接收企業文件。兩台電腦都要有同樣的硬體與軟體設定。如果你無法取得兩台電腦的使用權,試著進行實作直到可以從第二台電腦匯入資料時才停止。

要完成本實作,進入目錄<install folder>\Labs\Lab05\StartCode中,並在接收端電腦上註冊CIPMReceiveUI.dll,註冊方法是於執行視窗的開啟欄位中輸入『Regsvr32 <install folder>\Labs\Lab05\StartCode\ CIPMReceiveUI.dll』。

4 預估完成時間:45分鐘

練習1:設定電腦


在這個練習中,你將使用CIP Manager來設定電腦以傳送及接收企業文件。

設定接收端電腦86


4 在接收端電腦上建立網站位址

在Microsoft Windows NT Explorer中,於InterPub\wwwroot\目錄下建立一個新目錄,取名為 CIPM 。

在預設的情況下,這個目錄擁有執行.asp網頁時所需要的script權限。

487 啟動CIP Manager

在 開始 功能表中,指向 程式集 ,選擇 Microsoft Site Server的Commerce88 ,然後點選 CIP Manager 。

4 為接收端電腦設定本部資訊

在console樹狀結構中,利用滑鼠右鍵點選 CIP Manager89 , 然後點選 New Home Organition 。
在Welcome網頁中,點選 下一步 。
於Organization Name and URL網頁,在90 Home organization name 方塊中輸入『Ramona』,然後點選 下一步 。
在Interchange Identifier網頁中,選取 Use Dun & Bradstreet number to identify my organiztion ,在D-U-N-S Number方塊中輸入『123456789』(九位元)當作往來識別代號,然後點選91 下一步 。
將所有地址與聯絡資訊網頁中的欄位保持空白。
點選 完成 來結束Home Information Wizard。
492 在接收端電腦建立匯入文件設定檔

在console樹狀結構中,展開 CIP Manager ,展開 CIP Manager(local) ,展開 Ramona93 ,利用滑鼠右鍵點選 Document Profiles ,然後選擇 New Document Profile 。
在Welcome網頁上,點選 下一步94 。
在Incoming or Outgoing Document網頁中,選取 Create a new incoming document profile ,然後點選 下一步 。
在Incoming Document Profile Name網頁中,於95 Incoming document profile name 方塊中輸入『FiveLakesPO』,然後點選 下一步 。
在Document Header Type網頁中,從 Document header type 中選擇96 CIP XML ,然後點選 下一步 。
在Encryption Certificate網頁中,確定選項 Sending partner will encrypt this document、using this certificate 未被選取,然後點選97 下一步 。
在Application Interchange Component網頁中,於 Application Interchange Component 中選擇 PotoFile(Write to File) ,然後點選98 下一步 。
按下 完成 來結束Home Document Profile Wizard。
4 在接收端電腦上建立標準接收位址99

於CIP Manager的console樹狀結構中展開節點,利用滑鼠右鍵點選 Receive Loactions ,然後選擇 New Receive Location 。
在Welcome網頁上,點選 下一步100 。
在Receive Location Name網頁中,於 Receive location name 方塊中輸入 Seattle ,然後點選 下一步101 。
在Receive Location Transport網頁中,選取 Receive using a Web Server(IIS) 作為傳輸型式,然後點選 下一步 。
在Your Internet Address方塊中,輸入『http://Studentxx/CIPM/ ReceiveStandard.asp 』 (Studentxx為被設定成接收端電腦的電腦名字),並確定102 Copy Receive Standard Script to Web server 核取方塊被選取。按下Local file patch and name方塊的 Browse ,並且跳到之前步驟所建立的CIPM目錄。將檔名指定為ReceiveStandard.asp,點選 存檔 ,然後點選 下一步103 。
精靈會將ReceiveStandard.asp的script從Microsoft Site Server\Bin\CIP Manager目錄複製到特定目錄之下。
點選 完成 。
4 匯出交易設定檔104

在CIP Manager的console樹狀結構中,利用滑鼠右鍵點選 Ramona 。
選擇 Export Profile 。在Welcome網頁上,點選 下一步105 。
在 Available Certificates、Available Document Profiles 以及 Available Receive Locatio n網頁上點選 下一步106 。
在Export Path and Internet Address網頁中,點選 Browse 。
瀏覽至InterPub\wwwroot\CIPM目錄。在 檔名 方塊中,將名字改成107 RamonaProfile.tpp ,然後點選 存檔 。
在Internet Address(URL)方塊中,輸入位址『http://Studentxx/CIPM/RamonaProfile.tpp』(Studentxx被設定成接收端電腦的名字)來從別台電腦接收這個交易設定檔。
點選 下一步108 ,然後點選 完成 。
--------------------------------------------------------------------------------
注意
你需要在完成接收端電腦的設定之前為傳送端電腦進行設定。


--------------------------------------------------------------------------------

設定傳送端電腦


在下列的程序中,你將設定一台電腦用來傳輸企業文件。但這個練習必須要兩台電腦方能完成,因為兩個「區域的(Local)」設定並不能建構在相同的電腦上。如果你只有一台電腦,請開啟位於CIPM目錄下的ReceiveStandard.asp檔,並且在這裡進行設定檔的匯出。

4109 在傳送端電腦上設定網站位址

在Windows檔案總管中,於目錄InterPub\wwwroot\檔案夾下,建立名為 CIPM 的新目錄。

預設的情況下,這個目錄擁有執行.asp網頁的script權限。

4 啟動CIP Manager110 。

在 開始 選單,指向 程式集 ,選擇 Microsoft Site Server111 的 Commerce ,然後按下 CIP Manager 。

4 為傳送端電腦設定本部資訊112

在console樹狀結構中,利用滑鼠右鍵點選 CIP Manager ,然後選擇 New Home Organization 。
在Welcome網頁上,點選 下一步113 。
在Organization Name and URL 網頁上,於 Home organization name 方塊中輸入『FiveLakes』,然後按下 下一步 。
在Interchange Identifier網頁中,選取114 use Dun & Bradstreet number to identify my organiztion ,在 D-U-N-S Number 方塊中輸入『999999999』(九位元)當作往來識別代號,然後點選 下一步 。
將所有地址與聯絡資訊步驟中的欄位保持空白。115
點選 完成 來結束Home Information Wizard。
4 建立匯出契約

在console樹狀結構中,展開 CIP Manager116 ,展開 CIP Manager(local) ,展開 FiveLakes ,利用滑鼠右鍵點選 Agreements ,然後選擇117 New Outgoing Agreement 。
在Welcome網頁上,點選 下一步 。
在Agreement Name網頁中,於 Outgoing agreement name118 方塊中輸入 Ramona ,然後點選 下一步 。
於Trading Partner網頁中,點選 New119 來啟動Partner Information Wizard。
在Partner Information Wizard的Welcome網頁上,點選 下一步 。
選取 Import the partner from a trading profile 。在下面的方塊中,為接收端電腦輸入交易設定檔的位址為『http://Studentxx/CIPM/RamonaProfile.tpp 』(Studentxx為成接收端電腦的電腦名字),然後按下120 下一步 。
點選 完成 來結束Partner Information Wizard。
Outgoing Agreement Wizard將會繼續。

在Trading Partner網頁中,點選121 下一步 。
Trading Partner目前是設定成Ramona。

在Outgoing Agreement Wizard的Document Profile網頁中,點選 New 來指定文件設定檔。
此時會出現Home Document Profile Wizard,點選122 下一步 。
在Outgoing Document Profile Name網頁中,於 Outgoing document profile name 方塊中輸入『PotoRamona』,然後點選 下一步 。123
在Document Header Type網頁中,從 Document header type 方塊中選擇 CIP XML , 然後按下 下一步 。124
在Signature Certificate網頁中,確定 Digitally sign this document、using this signature certificate 核取方塊沒有被選取,然後按下 下一步 。
按下 完成125 完成Home Document Profile Wizard。
會出現Outgoing Agreement Wizard。

選擇 FiveLakesPO 當作交易夥伴的匯入文件設定檔。這個夥伴文件設定檔會從接收端電腦的設定檔匯入。選取 Transaction / Serialization Required 核取方塊,確定在下拉式選單中MaptoXML元件有被選定,並點選126 下一步 。
在Transmit Profile網頁中,選擇接收端電腦的設定檔,該設定檔是從夥伴的設定檔匯入的。
在Transmit Profile網頁中,點選 下一步 ,然後點選 完成127 。
4 匯出交易設定檔

在CIP Manager的console樹狀結構中,利用滑鼠右鍵點選 FiveLakes ,然後選擇 Export Profile128 。
Export Trading Profile Wizard會出現。

在Welcome網頁上,點選 下一步 。
在 Available Certificates、Available Document Profiles129 ,以及 Available Receive Locations 網頁中點選 下一步 。
在Export Path and Internet Address步驟中,點選 Browse130 。
瀏覽至InterPub\wwwroot\CIPM目錄下。在 檔名 方塊中將名字改為 FiveLakesProfile ,然後按下 存檔131 。
輸入位址來從別台電腦上接收交易設定檔,位址是 http://Studentxx/CIPM/ FiveLakesProfile.tpp (其中Studentxx為傳送電腦的電腦名稱),然後按下 下一步 。
點選 完成 。132完成設定接收端電腦


4 在接收端電腦執行Incoming Agreement Wizard

在console樹狀結構中展開 CIP Manager ,展開 CIP Manager(local)133 ,展開 Ramona ,利用滑鼠右鍵點選 Agreement ,然後選擇 New Document Profile 。134
在Welcome網頁上,點選 下一步 。
在Agreement Name網頁中,於 Incoming agreement name 方塊中輸入 FiveLakes135 。
在Trading Partner網頁中,點選 New 來啟動Partner Information Wizard。
在Partner Information Wizard的Welcome網頁上,點選 下一步 。136
選取 Import the partner from a trading profile 。在下面的方塊中,為傳送端電腦 輸入交易設定檔的位址為http://Studentxx/CIPM/FiveLakesProfile.tpp (其中Studentxx為接收端電腦),然後點選 下一步 。
按下 完成137 結束Partner Information Wizard。Incoming Agreement Wizard出現。
在Trading Partner網頁中,點選 下一步 。
在Document Profile網頁中,選擇 PotoRamona 作為夥伴的匯出文件設定檔,以及138 FiveLakes 作為你的匯入文件設定檔。選取 Translation / Description required 核取方塊, 確定下拉式對話盒中的 MapFromXML 元件有被選定,然後按下 下一步139 。
在Available Receive Location網頁中,注意之前建立的接收位址有顯示出來。點選 下一步 ,然後點選 完成 。
練習2:建立管線元件140


這個練習是在被設定成接收企業文件的電腦上執行。

在這個練習中,你將用Microsoft Visual Basic建立應用程式整合管線元件。該管線元件將會擁有自訂的屬性頁面,屬性頁面是在不同的Microsoft ActievX DLL專案中實作。這個元件將在你的電腦上被註冊,且專案名稱為CIPMReceiveUI,類別名稱為ComponentUI。你將同時利用屬性頁面來寫入或讀出管線元件的屬性值。

4 啟動Visual Basic 6.0

點選 開始 ,指向141 程式集 ,選擇 Microsoft Visual Studio 6.0 ,然後點選 Microsoft Visual Basic 6.0 。

4142 開啟一個ActiveX DLL專案

在 File 功能表中,點選 Open Project 。瀏覽至目錄<install folder>\Labs\Lab05\StartCode,然後選擇 CIPMReceive.vbp143 專案。

4 設定元件

在 Project 功能表中,點選 CIPMReceive Properties144 。
在 General 標籤頁中,將 Threading Model 設定為 Apartment Threaded145 。
在專案樹狀結構視窗中,點選類別模組 CIPMRcv 。在 Properties 視窗中,將 MTSTransactionMode146 屬性設定成 3-Uses Transactions 。
在 File 功能表中,點選 Save Project As147 。在 Save File As 對話盒中,瀏覽至目錄<install folder>\Labs\Lab05\StartCode\,點選 存檔 來儲存類別,然後點選 存檔 來儲存專案檔案。1484 為元件加入參照

在 Project 功能表中,點選 References 。149
選取 pipeline 1.0 Type Library or pipeline.dll、Commerce - MSCSCore Type Library、mscscore.dll 以及 Microsoft Commerce Pipeline Component Type Library 或 pipecomplib.tlb 核取方塊。1504 支援管線介面並建立屬性

在Project Explorer視窗中,利用滑鼠右鍵點選 CIPMRcv 類別模組,然後在出現的選單中選擇 View Code 。151
在類別模組的開頭加入下面的程式碼:

Implements IpipelineComponent
Dim strFilename As String
Dim fDirty As Boolean
Private Sub
IPipelineComponent_EnableDesign(ByVal fEnable _
As Long)

End Sub

Private Function IPipelineComponent_Execute(ByVal _
dictTransport As Object,ByVal pdispContext As Object, _
ByVal lFlags As Long) As Long
Dim I
Dim BookOrder
Dim item
Set BookOrder = dictTransport.object
On Error GoTo Error
If strFilename = "" Then
GoTo Error
End If
Open strFilename For Output As #1
Write #1, "Customer Details"
Write #1, BookOrder.Customer
Write #1, BookOrder.Address
Write #1, BookOrder.City & ", " & BookOrder.State _
& " " & BookOrder.Zip
Write #1, "BookOrder Details"
Write #1, "Number of items =" & _
Str(BookOrder.Items.Count)

For Each item In BookOrder.Items
Write #1, item.ISBN & ", " & item.Title
Next
Close #1
IPipelineComponent_Execute = 1
Exit Function
Error:
IPipelineComponent_Execute = 3
End Function
4 讀取元件屬性

在程式的尾端,加入下面的程式:


Private Function IPersistDictionary_GetProgID() As String
IPersistDictionary_GetProgID = "CIPMReceive.CIPMRcv"
End Function
Private Sub IPersistDictionary_InitNew()
strFilename = ""
fDirty = False
End Sub

Private Function IPersistDictionary_IsDirty() As Long
IPersistDictionary_IsDirty = fDirty
End Function

Private Sub IPersistDictionary_Load(ByVal pdispDict As _
Object)
strFilename=pdispDict.Filenm
End Sub

Private Sub IPersistDictionary_Save(ByVal pdispDict As _
Object, ByVal fSameAsLoad As Long)
pdispDict.Filenm = strFilename
End Sub
4152 建立專案

在 File 功能表中,點選 Save Project 。
在153 File 功能表中,點選 Make CIPMReceive.dll 。
將.dll檔儲存在目錄<install folder>\Labs\Lab05\StartCode中。
練習3:註冊族群


在這個練習中,你將在應用程式整合階段中註冊管線元件。該元件會在應用程式整合步驟中使用。你將分派及測試族群關係。154
4 編輯affinity.reg檔

在Microsoft Windows NT Explorer中,瀏覽至Lab\Lab05\StartCode包含Affinity.reg檔的目錄中,利用滑鼠右鍵點選Affinity.reg,然後點選 編輯 。

4 啟動Registry Editor並在Registry中找到元件的資料記錄155

在 開始 功能表中,點選 執行 , 接著在 開啟 方塊中輸入『Regedit』。156
在Registry Editor中,按下 F3 ,開啟 Find 對話盒。
在尋找目標欄位中,輸入『CIPMReceive.CIPMRcv』。取消 機碼157 與 值 (只搜尋 資料 )核取方塊,然後按下 尋找下一個 直到你找到擁有該clsid元件的資料區段。158
在左邊部分,利用滑鼠右鍵點選你元件的clsid,然後從選單中按下 Copy Key Name 。
關閉Registry Editor。
4 修改Affinity.reg的值並更新Registry

在Affinity.reg檔案中,將第一行的HKEY_CLASSES_ROOT\CLSID\{xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}部分標示起來,接著指向筆記本的159 Edit 功能表的 貼上 ,將元件的clsid複製到文字檔中。
重複這個程序,將相同的clsid貼到第二行。在應用程式整合步驟中的目錄ID已經完成了。
儲存檔案並關閉筆記本。
在Microsoft Windows NT Explorer中,利用滑鼠右鍵點選160 Affinity.reg ,然後選擇 合併 來更新註冊資料。

--------------------------------------------------------------------------------
注意
接下來的程序是在接收端電腦上執行。雖然無法利用單一電腦來完成後序動作,但元件仍可以被建立、安裝,然後被加入管線中。


--------------------------------------------------------------------------------

4 測試元件161

在 開始 選單中,指向 程式集 ,選擇 Microsoft Site Server的Commerce ,然後按下162 CIP Manager 。
在console樹狀結構中,展開 CIP Manager ,展開 CIP Manager(local)] ,展開163 Ramona ,點選 Document Profile 目錄,利用滑鼠右鍵點選 incoming document profile ,然後選擇 Properties164 。
在 General 標籤頁,在 Application Integration component 部分,選擇 CIPMReceive.CIPMRcv165 ,然後點選 Properties 。
在屬性頁面中,在對話盒輸入『C:\TestApp.txt』,然後點選 OK 。再一次點選 OK166 來套用設定。
4 檢視傳送端電腦的結果

瀏覽至目錄<install folder>\Labs\Lab05\TransmitApplication,雙擊 CIPMTransmit.exe 。
為表單中的欄位填入資料,加入書本至購物籃內,然後點選167 Place Orde r以傳送購買的明細。
4 檢視接收端電腦的結果

在Microsoft Windows NT Explorer中,在C磁碟機的根目錄下,雙擊 TestApp.txt 來檢視傳輸端電腦傳送給你的資料。168
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:06 PM   #7 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

XML語言


XML是SGML的簡化,讓開發人員與網站管理員可以有系統地在網頁上建構資料。

從HTML進化到XML


超文字標記語言(Hypertext Markup Language),又稱HTML,廣為網站開發人員使用,並且為大多數的網頁瀏覽器所識別。雖然HTML讓你可以控制資料出現在螢幕上的方式,但它不允許你定義標籤。當網站開發者想要從標記(markup)中取得資料,便會出現問題。

下面範例描述本章中討論的XML,其HTML輸出結果。




參考一下下面的HTML標記。它是書籍說明網頁的一部份,並顯示了書籍的出版商。3
<tr>
<td align="left" bgColor="#D7FFD7" width="391" colspan="2">
<font face="Arial" size="2">
<strong>Publisher& nbsp;</strong>
& nbsp;& nbsp;& nbsp;
</font>
</td>
</tr>
<tr>
<td align="left" bgColor="#FFFFD0" width="391" colspan="2">
<blockquote>
<p>
<font face="arial" size="2">Prentice Hall</font>
</p>
</blockquote>
</td>
</tr>
前述的HTML標記並不允開發人員建立搜尋程式,根據出版商的名稱進行搜尋。因此,開發人員必須建立程式來移植標籤並只傳回出版商的名稱,在這個範例中是Prentice Hall。因為不同的書籍說明網頁可能有不同的標記,所以搜尋程式必須非常具有彈性。

使用XML的優點


HTML為標準通用標籤語言(SGML)簡化指令集合的一個例子。XML則是一個比HTML更具威力的語言,因為它實作了更多SGML的功能。XML優於HTML的項目列在下面的表格中。

HTML XML
標籤描述了資料在瀏覽器中被展現4 標籤描述的是資料本身
開發人員必須使用事先定義的標籤。 開發人員可以建立標籤,因此可以描述任何型態的資料。
搜尋與更新資料的進行很困難,因為同一組標籤可以用在不同型態的資料上 搜尋與更新資料非常容易,因為每一種型態的資料都擁有一組唯一的標籤來定義它。
資料在瀏覽器中展示的方式是受到控制的 XML對資料的展示並沒有任何控制權。5

在瀏覽器中展示XML


雖然XML賦予開發人員控制資料的權力,但它並不能控制資料出現在瀏覽器的方式。要呈現資料,XML文件必須連結到樣式表。XML的原始樣式表語言是XSL。XML同時也支援CSS。

XML文件的需求


一個形成XML文件的資料物件必須符合兩項基本的要求。首先,它必須是格式正確的。第二,資料物件必須是有效的。要形成XML文件,資料物件必須實踐在XML技術中所謂的格式正確,以及符合有效性的限制。(一個無效的XML文件並不會被XML處理器視為毀滅性錯誤。)

底下的程式片段描述了XML文件的基本結構。

<? xml version="1.0" standalone="yes" ?>
<root_tag>
<element_1>
This is a sample XML Document
</element_1>
<message text="Hello World" />
</root_tag>
XML文件必須是格式正確的6


要讓資料物件成為格式正確,必須符合以下標準:

文件必須以XML宣告<?xml version="1.0"?>開始。

文件必須擁有單一根元素。

其他元素必須包含在這個根元素與其結束元素之下。

文件的元素必須是有效的巢狀組織。

要符合規則以達成格式正確,文件必須符合文件結構、XML的大小寫區別、屬性值,以及換行鍵的處置等相關規則。
所有的XML文件都必須是結構化的。意指處理器要求所有起始標籤都有相對應的結束標籤。錯誤的標籤巢狀組織以及不相對的結束標籤都會被XML處理器紀錄成毀滅性錯誤。例如,下面的標籤將會造成XML處理器引發毀滅性錯誤。7


<book_description>
<author> Ralph E. Droms
</book_descripton>
</author>


--------------------------------------------------------------------------------
注意
<cover_image url="cover.gif" />標籤是一個空白標籤。XML要求空白標籤的最後一個字元(在結尾的>符號前)必須是「/」。這個字元通知處理器標籤為空白,因此不需要結束標籤。


--------------------------------------------------------------------------------

XML是區別大小寫的。因此標籤<book_decription>與</Book_description>為不同元素的起始與結束標籤。下面的標籤將會造成XML處理器引發毀滅性錯誤。


<book_description>
<author>Ralph E. Droms</author>
</Book_descripton>
在空白標籤<cover_image url="cover.gif" />中,請注意屬性url的值為"cover.gif",被放置在引號內("")。這是XML文件的需求。如果屬性值不放在引號中,XML處理器將會引發毀滅性錯誤。

在XML文件中,標籤負責定義資料。不像HTML會將換行鍵忽略,XML會保留換行鍵。因此,下面的標籤表示不同的資料:


<book_title>Computer Networks and Internet</book_title>
<book_title>Computer Networks and
Internet</book_title>8
XML文件的有效與否


因為網站的開發人員通常在一個網站應用程式中會處理幾百個網頁,所以很容易就會疏忽網頁裡的關鍵資料。例如,在書籍說明網頁中,包含在標籤<book_title>中的資料可能會不慎遺失。XML的有效性限制就是用來檢查資料遺失與通知開發人員發生資料遺失。可以藉著在文件型態宣告(DTD)中定義網頁所需資料來達成這項功能。

於Microsoft Internet Explorer 5.0中驗證XML有效性


Internet Explorer 5.0的最後版本使用兩種屬性來控制DTD處理 :

ValidateOnParse

決定是否將驗證錯誤通報給使用者。9
ResolveExternals

決定是否載入DTD或XML結構,以及是否實踐資料型態、預設值,與其他相關事物。
在Microsoft Internet Explorer 5.0中ValidateOnParse的預設值為False。
使用者必須用scripting語言如Microsoft JScript 將該值設定為True。
XML中的邏輯結構與預設標籤


下面的部分將說明XML中的邏輯結構與預設標籤。

邏輯結構10


每一份XML文件都是由一個或多個元素所建構。這些元素被封包在起始標籤與結束標籤中,或者是空白元素標籤中。邏輯結構負責處理這些元素、元素的型態宣告,以及屬性宣告。

起始標籤、結束標籤,與空白元素標籤


在XML文件中每一個元素都是以起始標籤開始,並包含相對的結束標籤。結束標籤會以右斜線「/」開頭,並且擁有和起始標籤相同的名字及大小寫格式。放置在兩個標籤之間的文字是元素的內容。而沒有內容的元素則稱為空白元素。例如,看看下面的程式碼:

<book_description>
<cover_image url="cover.gif" />
</book_description>
標籤與其限制的說明列在下表中:

限制 說明11
唯一的屬性spec 在相同的起始標籤與空白元素標籤中沒有任何屬性名稱可以出現一次以上。下面的標籤將傳回毀滅性錯誤,因為屬性name在標籤book_name中重複出現。
<book_name name="..." author="..."_name="...">
......
</book_name>

沒有外部實體的參照 屬性值不能包含對實體直接或間接的參照,它必須在作用中文件或DTD中被宣告。因此,除非實體&mr;已經在作用中文件或其DTD中作過宣告,否則下面的標籤將會從XML處理器傳回毀滅性錯誤。
<book name="..." publisher=&mr;>
...
</book>

屬性值中沒有「<」字元12 在屬性值中任何直接或間接參照到實體的替換文字都不能包含字元「<」。唯一的例外是& lt;的替換文字。
屬性值的型態 屬性必須被宣告且其值必須符合其宣告型態。

上述表格中所列的前三個限制被定義成格式正確的限制。如果這些屬性限制沒有被遵守的話,XML處理器會傳回毀滅性錯誤。第四項限制為有效性驗證限制,除非指定,否則處理器會將之忽略。

預設標籤


雖然XML讓你使用標籤來定義資料,但還是有一些預先定義的結構。包括了註解、處理指令,以及語言識別標籤等。

註解標籤會被XML處理器忽略,如同在HTML文件中一樣。在XML中註解的宣告與在HTML文件中的宣告一樣。13


<!- This is a comment line ->
處理指令(PIs)是為應用程式提供的指令。這些指令被包含在XML的標籤中。例如,下面的標籤指出文件是以由World Wide Web Consortium所公佈的XML 1.0規格所編譯的:


<?xml version="1.0" standalone="yes"?>

--------------------------------------------------------------------------------
注意
宣告standalone="yes"表示沒有其他文件被用來驗證或修改XML文件。如果要使用DTD來驗證文件有效性,或使用樣式表來作轉換,那麼standalone的宣告應設定成standalone="no"。


--------------------------------------------------------------------------------

在XML中的語言識別是由xml:language屬性來指定。這個選擇性的屬性會接收指定資料以何種語言進行編碼的程式碼。

例如,下面的標籤可以用來指定資料片段是以英文編碼:

<p xml:language="en"> ... </p>14
有關核准的語言程式碼的完整參照來源可以在ISO 639文件<Codes for the representation of names of languages>中找到。

程式導覽:以XML製作的書籍說明文件


在下面的章節中,你將學習XML文件的基礎結構。

以HTML建立的書籍網頁


下圖說明下面XML程式碼的HTML輸出結果。




XML文件的範例15


在這裡所展示的HTML書籍說明網頁可以用XML來撰寫,如下:

<?xml version="1.0" standalone="yes" ?>
<book_description>
<book_title>Computer Networks and Internet</book_title>
<author>Douglas E. Comer</author>
<author>Ralph E. Droms</author>
<publisher>Prentice Hall</publisher>
<edition>October 1996</edition>
<price>77.25</price>
<cover_image url="cover.gif"/>
<review written_by="Publisher">
This book provides a thorough state-of-the-art overview
of networking and Internet technology and is ideal for
those with little or no background in the subject.
</review>
</book_description>
在前面的程式範例中,注意是否符合以下的要求:

文件的第一個宣告部份為處理器指令<?xml version="1.0" standlone="yes" ?>。這表示XML處理器是XML 1.0版相容,而且沒有其他附屬文件。

文件的根標籤為<book_description>,而且所有其他的標籤則是安置在這個根標籤之內。

每一個起始標籤都有一個相對的結束標籤。唯一的例外是<cover_image url="cover.gif" />。因為這是一個空白標籤,由字元「/」宣告,所以它不需要結束標籤,且是有效的。

所有的標籤內都有資料。16

所有上述的要求都符合,文件才能成為格式正確且有效的XML文件。

XML文件型態宣告(DTD)


在你建立一份XML文件之後,你可能想要確認你的文件是否有效。文件型態宣告(DTD)就是用來達成這項目標。DTD會宣告所有要放置在文件內的元素,同時還有管理元素出現的頻率與必須性,以及允許屬性值等事宜的規則。在這個部分,你將學習宣告DTD與元素的規則。

XML中的實體結構


除了本章前面所討論的邏輯結構,XML還擁有眾多的實體結構。它們包括了元素型態、屬性串列,與實體宣告。

元素型態宣告與屬性串列宣告


元素型態與屬性串列(attribute list)是在文件型態宣告(DTD)中進行宣告,並用來驗證XML文件的有效性。17
元素型態宣告於元素的內容上套用限制。屬性串列的宣告為給定的元素型態定義了一組屬性,並為這些屬性提供限制與預設值。在本章接下來的部份,你將學習更多有關元素型態與屬性串列的宣告資訊。下面的標籤提供元素型態宣告與屬性串列宣告的範例:

<!ELEMENT br EMPTY>
<!ATTLIST list
type "ordered">
實體宣告


XML文件的實體結構是由一個或多個的實體組成。這些實體可能是經過解析,或未經解析,並且可以被宣告成內部或外部的實體。

內部實體


內部實體通常都是解析過的實體。它們沒有個別值儲存物件。這些實體的內容都是在實體本身的宣告區中進行宣告,如下面的範例所示:

<!ENTITY Edition "This is a First Edition Collectors issue">18
外部實體


所有不是內部實體的實體都被視為外部實體。這些實體擁有屬性值的限制,標籤名稱必須與宣告中的名稱相符合,如下面的範例所示:

<!ENTITY cover-pic SYSTEM "../images/cover.gif">
未經解析實體


未經解析實體的內容可能是文字。如果內容的型態為文字,則內容可能是或可能不是XML。只有在為用在應用程式的實體及標籤辨別有效性時才需要使用XML處理器。而未經解析的實體則沒有任何限制。

已解析實體


已解析實體的內容稱為實體的替換文字。該文字是XML文件中不可缺少的一部份。已解析實體必須是格式正確的。所以XML文件中的邏輯與實體結構都適當地被安置。。19
<!ENTITY file1 SYSTEM "file1.xml">
每一個外部已解析過的實體可能使用不同的編碼方式來處理字元。XML處理器因而需要以UTF-8或UTH-16的編碼格式來識別實體。以另一種編碼方式儲存的已解析實體必須以內含編碼格式宣告的文字宣告開始。下面的範例為編碼方式宣告:

<?xml encoding='EUC-JP'?>
程式導覽:書籍說明文件的DTD範例


文件型態宣告可以被宣告成XML文件的一部份,或者它也可以被宣告成不同的文件,被許多XML文件引用。如果DTD被宣告成內部的,則它需遵行上述的規則。然而,宣告為外部的DTD將不會有以下的宣告:

<!DOCTYPE book [
...
]>
取而代之的,呼叫外部DTD的XML文件將會擁有下面型態的宣告:20
<? xml version="1.0" standalone="no" ?>
<!DOCTYPE book_description SYSTEM "book.dtd">
書籍說明文件範例的外部DTD


<!ELEMENT book_description (book_title,_author+,publisher, edition?,_
price, cover_image?, review*)>
<!ELEMENT book_title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT edition (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT cover_image (#PCDATA)>
<!ELEMENT review (#PCDATA)>
在上面的DTD中,注意下面的宣告:

<!ELEMENT book_description (book_title,_author+, publisher, edition?,_
price, cover?, review*)>
這個宣告表示參考到DTD的XML文件擁有一個根元素稱為book_description。該宣告同時也指出允許的子元素包括有book_title、author、publisher、edition、price、cover與review。

藉著使用下面所定義的符號,相同的標籤為子元素宣告了有效性規則。21
符號 意義
十 後面緊接這個符號的元素必須在XML文件中出現一次或多次。
? 後面緊接這個符號的元素只能在XML文件中出現零次或一次。
*22 後面緊接這個符號的元素在XML文件中能出現零次、一次或無限多次。

在前面所展示的XML DTD中,注意下面的宣告部分:

<!ELEMENT book_title (#PCDATA)>
這個宣告表示元素<book_title>並沒有包含任何子元素。它同時也表示元素中的資料可以由文字與標籤組合而成。如果資料是只由文字組成,將使用下面的宣告:

<!ELEMENT book_title (#CDATA)>
前述的DTD範例中宣告的元素沒有一個擁有子項目。因此標籤便包含PCDATA。例如,如果書籍敘述文件中,一個名為「book」的元素擁有兩個子元素,「ISBN」與「Title」,下面則為它們在DTD中被宣告的方式:

<!ELEMENT book_description (book, ...)>
<!ELEMENT book (ISBN, Title)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT Title (#PCDATA)>23
下面的程式碼示範了所有本章討論過的XML:

<!DOCTYPE book[
<!ELEMENT book_description (book_title);
author+, publisher, edition?,
price, cover_image?, review*)>
<!ELEMENT book_title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>

<!ELEMENT edition (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT cover_image (#PCDATA)>
<!ELEMENT review (#PCDATA)>
]>
DTD中的屬性串列與實體宣告


XML DTD不只定義了XML文件中允許的元素,以及應用在元素上的限制,同時也藉著允許屬性串列與實體宣告來延伸了XML的威力與用途。

DTD中的屬性串列宣告


屬性串列的宣告有效地被用來加強資料取得與確保文件有效。下面的程式為書籍檢視的標籤:

<review>
By Publisher: This book provides a thorough state-of-the-art
overview of networking and Internet technology and is ideal
for those with little or no background in the subject.
</review>24
前面的標籤包含了檢視,但並不賦予任何有關作者資料上的控制權。下面的標籤可以用來存取作者資料:

<review written_by="publisher">
This book provides a thorough state-of-the-art overview
of networking and Internet technology and is ideal for those
with little or no background in the subject.
</review>
屬性名稱written_by將只在應用程式讀取其值時有用。

在屬性被含括成為有效XML文件的一部份之前,它必須先在DTD中使用屬性串列宣告來進行宣告。例如,在本節之前所宣告過的DTD,會使用下面的宣告程式:

<!ELEMENT review #PCDATA>
<!ATTLIST review written_by CDATA #REQUIRED>
上面的宣告表示元素「review」擁有一個稱為written_by的屬性,負責接受字元資料(CDATA),且不是選擇性的。

下面的表格包含一些用來宣告屬性的關鍵字列表:25
關鍵字 涵義
#REQUIRED 元素必須擁有一個屬性所指定的值。如果並未指定值,文件將不會被處理。
#FIXED 屬性擁有一個在文件中保持不變的值。
#IMPLIED26 屬性可能擁有一個宣告過的值,或者保持空白。
Default Value 該值在標籤<!ATTLIST>中的關鍵字部分被指定。如果其值在文件中被指定,預設值會被置換。然而,如果文件將屬性值保持空白,則預設值會被採用。


要編輯已存在的DTD,你必須知道屬性的四大基本型態。下表列出這些型態的說明。

屬性型態 說明
CDATA27 表示處理器預期文字為其屬性值。
ID 為屬性指定一個唯一的識別代號。ID名稱必須以字母或底線開頭,且不能包含空白字元。
NMTOKEN 指定屬性必須以字母或底線開頭,且不能包含空白字元。然而,在NMTOKEN的例子中,重複的數值是允許的。
Enumerated 這種型態並沒有關鍵字。它由一串放置在括弧內並由「I」符號分隔的所有可能數值組成,如下列範例所示:28
<!ATTLIST Binding (soft|hard) #REQUIRED>



--------------------------------------------------------------------------------
注意
想取得更多有關XML DTD的資訊,請參考World Wide Web Consortiums網站上( http://www.w3.org/ )的白皮書。


--------------------------------------------------------------------------------

DTD中的實體


4 定義實體29

XML擁有五個預先定義好的實體,詳述於下:

字元 實體宣告
& & amp;
< & lt;30
> & gt;
" & quot;
' & apos;

XML也允許其他實體在DTD中定義。例如,如果單字「Five Lakes」經常在網站中使用,它們可以被宣告成由實體「&fl」來表示。這樣的宣告如下所示:31
<!ENTITY fl "Five Lakes">
4 將資料存入檔案

資料的大型字串可以存在不同的檔案並且藉由在檔案的實體名稱與URL之間指定XML關鍵字「SYSTEM」來進行宣告,如下面範例所示:

<!ENTITY text SYSTEM "http://list.txt">
4 延伸參數實體32

如果實體宣告包含分項或選項,則該實體無法在DTD中延伸。要完成這項工作,你必須在實體名稱之前插入字元「%」來宣告實體。要延伸參數實體,百分比符號與分號必須包圍該實體。下面的範例示範這種型態在觀光卡(visiting card)中的用法:

<!ELEMENT visiting_card (%property.man;, (%property.personal;
| property.business
當你定義根元素,卡的資訊被儲存在不同的參數實體。下面的標籤被用來定義實體「property.personal」:

<!ENTITY %property.personal "(nickname | photograph |
birthdate)">
將資訊宣告成參數實體,讓元件的宣告更容易閱讀。

XML資料


XML文件是一個格式正確的資料物件,因此讓不同型態的資料可以輕易地用XML來表達。在這個部分,你將學習某些常用的資料型態如何以XML來表達。其中的一種資料型態被稱為XML資料結構(Schema)。這種資料型態可以用來定義XML文件,因此可以用來置換DTD。這一節將詳細地討論這種資料型態。33
XML中的資料呈現


傳統的資料型態可以輕易地利用XML來呈現,包括下列資料型態:

資料

中繼資料(Matadata)

數位簽名

資料庫資訊

圖形結構34

非連續性資訊(propertyOf)

結構(Schema)

延伸型態

在下面的章節中將只討論三種資料型態。

資料


XML資料在結構上可以是異質的,也就是說,由不同成分形成的。例如,書籍、紀錄與咖啡可以編碼在銷售訂單中,如下所示:

<order>
<customer>
<last_name>Doe</last_name>
<first_name>John</first_name>
</customer>
<item type="book">
<title>Computer Networks and Internet</title>
<price>77.25</price>
</item>
<item type="record">
<media>Compact Disc</media>
<album>I could have coded all day</album>
<artist>The debuggers</artistgt; <price>25.75</price> </item>
<item type="coffee">
<type>Decaff</type>
<cups>1</cups>
</item>
</order>35
中繼資料(Metadata)


XML可以表達複雜的、自我包含的資料結構。它也可以描述有關遠端網站資源的資訊,大多是資料本身。參考下面的程式:

<e-partner>
<item href="http://www.abc-press.com/welcome.htm">
<a href="http://www.abc-press.com/instock.htm">
Check e-partner for available stock
</a>
<title>Welcome to the ABC Press site</title>
</item>
</e-partner>
在這段程式中,XML文件會參照一個e-Partner的網站當作資料。

資料庫資訊


XML可以表達複雜與簡單的資料結構。例如,下面的標籤可以用來表示一連串的資料庫記錄:

<out_of_stock>
<item type="book">
<name>Programming Visual C++,</name>
<vendor>Microsoft Press</vendor>
</item>
<item type="records">
<name>Wounded Knees and Broken Elbows</name>
<vendor>The Garage CD-dump</vendor>
</item>
</out_of_stock>36
藉著Active Server Pages(ASP)技術,資料可以被轉換成XML資料結構。利用ASP建立的資料來源將維持ASP網頁的形式。然而,ASP網頁將會在伺服端輸出可存取的XML。

利用ASP網頁參照資料庫來建立XML資料來源有兩個優點。首先,當移植資料來源時script可以轉換大量的資料。第二,當你更新資料庫時資料來源會自動更新。

DTD的限制


DTD主要的缺點為它們不是以XML為基礎的。結果,要用DTD來驗證XML文件有效性時,程式人員必須學習XML,以及如何在DTD中寫出有效的規則。而且DTD並不賦予程式人員對元素可以接受的資料型態的控制權。XML資料結構(Schema)克服了這些DTD的缺點。

在本節中,你會看到一個XML資料結構的範例。你將在更進階的課程中學習更多有關資料結構的宣告。

<xml:schema ID="ArtSchema">
<elementType id="artistic-work">
<relation href="#title" />
</elementType>
<elementType id="book" extends="#artistic-work">
<relation href="author" />
</elementType>
<relationType id="author">
<pcdata />
</relationType>
瞭解結構(Schema)37


在前面的範例中,注意下列事項:

<elementType id="book" extends="artistic-work">宣告表示書籍是藝術工業的一個子集。

<relation href="author">宣告代表元素書籍擁有一個子元素,名為「author」,接受PCDATA作為輸入。

相關導讀


要作更進一步的研究,你可以參考下列網址:

http://msdn.microsoft.com/xml/default.asp

http://www.xml.com/pub38

http://xmlephant.com/

http://www.oasis-open.org/

http://vbxml.com/

http://xmlinfo.com/

實作6:以XML來建立與驗證書籍敘述文件


目標


在完成本實作之後,你將能夠:39
為書籍說明網頁中的資料建立一份XML文件。

撰寫文件型態宣告(DTD)來驗證你所建立的XML文件。

連結XML文件與DTD。

在您開始之前


先決條件


在開始實作之前,你必須擁有:

HTML的知識。40

熟悉Microsoft Internet Explorer 5.0以上的版本。

情境


Ramona Publishing網站將從HTML轉換成XML。你將從網站上取得一個書籍說明網頁。首先,你將收集網頁上的資料,並將之轉換為XML文件。接著,你將建構DTD來驗證XML文件。最後,你將連結DTD與XML文件。


--------------------------------------------------------------------------------
注意
在這個實作中,使用→當作連接符號用。


--------------------------------------------------------------------------------

4 預估完成時間:15分鐘

練習1:建立XML文件41


在這個練習中,你將開啟以HTML建立的書籍說明網頁並將內含的資料複製到XML文件。

4 開啟HTLM書籍敘述網頁

在Microsoft Windows NT Explorer中,檢視Labs\Lab06\StartCode目錄,然後點選 book.htm 。

442 開啟XML文件

在 開始 功能表中,指向 程式集 ,選擇 附屬應用程式43 ,然後點選 記事本 。
開啟目錄Labs\Lab06\StartCode下的 book.xml 。
444 完成XML文件

在book.htm中,為定義在book.xml中的標籤尋找適當數值。
複製每一個數值並將之貼到book.xml適當的標籤中。
加入適當的結束標籤到XML文件中。
將book.xml儲存在目錄Labs\Lab06下。
4 觀察結果45

在Windows NT Explorer中,在目錄Labs\Lab06目錄中開啟 book.xml 。XML文件會出現在瀏覽器中。

練習2:建立XML DTD


在這個練習中,你將為你在之前的練習中建立的XML文件建立一份DTD。

4 建立DTD46

在記事本中建立一個新檔案,並將下面的宣告加入檔案中:

<!ELEMENT book_description (Book_Title, Author+,→
Edition?, Price, Cover_image?, About_the_Book*)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Edition (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Cover_image (#PCDATA)>
<!ELEMENT About_the_Book (#PCDATA)>
於Labs\Lab06目錄中將檔案存成 book.dtd 。
練習3:連結XML文件與DTD


在這個練習中,你將所建立的XML文件連結到前面所建立的DTD。47
4 開啟XML文件。

在記事本中,開啟目錄Labs\Lab06中的 book.xml 檔案。

4 將文件連結至DTD48

在文件中,找出下面的標籤:

<?xml version="1.0" ?>
於上面程式的下一行,加入下面的程式碼:

<!DOCTYPE book_description SYSTEM "book.dtd">
儲存並關閉檔案。
4 檢視結果49

在Internet Explorer中,開啟 Labs\Lab06\book.xml 。

XML文件會以收縮的樹狀結構出現在瀏覽器中。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:08 PM   #8 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

有效地放置XSL


雖然XML讓你格式化資料,但它並不賦予你控制展示資料的權力。XSL樣式表語言藉著讓你定義XML資料如何被格式化來解決這個問題。在這個部分,你將學得使用XSL所帶來的好處。你也將學到XSL如何修正CSS與DSSSL等樣式表語言的缺點。

XSL的優點


XSL讓網站管理與資料表達變得更簡單,也比以前更具威力。

瞭解XSL


XSL由兩部分組成。第一部份是XSL轉換(XSLT),是一種用來轉換XML文件的語言。第二部分是XML辭典,用來定義格式化的語法。

使用XSL的優點3


XSL語言在本書撰寫時仍處於設計階段,且其最後定版日期也尚未公佈。然而當它完

XSL是特別為符合XML的需求而發展的樣式定義語言。透過XSL處理器傳輸的資料會被評估、重新安排,以及重新組合。因此資料來源便會充滿彈性,容易修改、紀錄,與更新。

XSL文件為有效的XML文件。因此,XSL會以標籤的形式呈現在網路開發人員面前。因此,任何想要在SGML子集合如HTML上作業的網站開發人員可以輕易地學習XSL。

XSL讓你可以免除使用不同script語言如:Perl、Microsoft Visual Basic Scripting Edition,與Microsoft JScript 的困擾,擁有幾近無限制的擴充性

XSL的演化


XSL建構在串接樣式表(CSS)、文件樣式語彙與規則語言(DSSSL)之上。超過百分之九十以上的XSL屬性都在CSS中定義。XSL也支援所有CSS1的規格。

XSL與CSS及DSSSL的不同之處4


CSS最大的缺點是它缺乏編輯頁碼的支援。為要控制編輯頁碼,XSL延伸了制定物件格式與制定屬性格式的CSS集合。

在設計CSS的延伸上,DSSSL被用來當作延伸內容的第一來源。然而,真正的延伸並不一定看起來像DSSSL。為了更緊密地符合CSS定義,或比DSSSL更輕易地處理個案,某些延伸是由DSSSL所衍生出來。

CSS目錄的改變


在XSL中,對CSS目錄作了兩種改變:修改目前目錄屬性,或完全建立新的屬性。這些改變賦予XSL具有CSS在網頁邊界上所缺乏的控制權,同時也賦予CSS在可捲動式文件上所缺乏的控制權。如此讓XSL成為XML優先選擇的樣式表語言。

XSL觀念


當閱讀XML文件時,處理器會建立一個稱為來源樹的樹狀結構。這個樹狀結構擁有下列型態的節點

節點型態5 說明
Root 這是樹狀結構的根節點。它不能出現在樹狀結構中的其他位置。
根節點只有一個子節點, 為XML文件的文件元素的元素節點。
Esement 這種型態的節點是針對文件中每一個元素所建立的。
元素節點的子節點可能是元素節點、註解節點、處理資訊節點,以及文件內容的文字節點。6
Text 所有在文件中呈現的文字都會被集合在文字節點內。文字節點的前一個或後一個兄弟節點不能是另一個文字節點。
Attribute 每一個元素節點都擁有一組附帶的屬性節點。預設的屬性值是以與特定屬性等同的方式處理。
這些節點都沒有子節點。
Namespace 每一個元素對於以xlmns:為起始的元素及其所有屬性節點都擁有一個namespace節點。7
這些節點沒有子節點。
Processing 每一個處理指令擁有一個個別的節點
。 Instruction 這些節點沒有子節點。
Comment8 每一份註解擁有一個註解節點。這些節點沒有子節點。

下面概念的說明了XSL樣式表的結構。




XSL樣式表被套用在這種樹狀結構中會產生結果樹。這種程序所產生的結果是,來源樹的節點可以被記錄或複製。新元素及流程物件也可以被建立。XSL樣式表所產生的結果樹可以是樣式流程物件,如HTML網頁,或者可以是另一個來源樹。

程式導覽:XSL的樣式表


XML書籍說明文件將使用XSL樣板來讓文件可以在瀏覽器中展示。下面是可能用到的樣板範例:

<xsl:stysesheet
xmlns:xsl="http://www.w3c.org/TR/WD-xsl"
default-space "strip">
<xsl:template match="/">
<HTML>
...
<!-- Some HTML Markup -->
...
<xsl:apply-templates sesect="book_description/booktitle " />
<xsl:apply-templates sesect="book_description/author" />
<xsl:apply-templates sesect="book_description/publisher " />
<xsl:apply-templates sesect="book_description/edition" />
<xsl:apply-templates sesect="book_description/price" />
<xsl:apply-templates sesect="book_description/review " />
...
<!-Some HTML Markup -->

</HTML>
</xsl:template>
<xsl:template match="edition">
<TD BGCOLOR="#FFFFD0" STYSE="width:391;text-align:left;
font-family:Arial;font-size:10pt;" >
<BLOCKQUOTE>
<xsl:value-of />
</BLOCKQUOTE>
</TD>
</xsl:template>

<!-- The Other Templates -->
</xsl:stysesheet>
</TD>
</xsl:template>
<!-- The Other Templates ->
</xsl:stysesheet>9
在上面的xsl樣式表中,請注意下列事項:

xsl:stysesheet元素

xsl:template元素

xsl:value-of元素

xsl:stysesheet元素


元素「xsl:stysesheet」是在樣式表中宣告的第一個元素。它擁有下列屬性:

xmlns:xsl=10 "http://www.w3c.org/TR/WD-xsl" 告訴處理器每一個以宣告「xsl:」為起始的元素都應該根據XSL規格來進行解譯。換言之,所有以「xsl:」為起始的元素都屬於XSL命名空間(Namespace)。


--------------------------------------------------------------------------------
注意
XSL文件所參考的命名空間必須是 http://e-msbooks.com/XML/www.w3c.org 。如果與預設命名空間不同,處理器並不會傳回錯誤。然而,處理器將無法有效地讀取樣式表並且產生不一致的結果。


--------------------------------------------------------------------------------

default-space宣告是在XSL中用來在XML文件中移除或保留空間。不使用這項宣告代表空間將被保留,因為這是XML的預設值之一。

xsl:stysesheet元素允許的元素11


下列是xsl:stysesheet元素中允許的元素。

元素 語法
xsl:import <xsl:import href="... " />

xsl:include <xsl:include href="..." />12

xsl:strip-space <xsl:strip-space esements=" ..." />

xslreserve-space <xslreserve-space esements="... " />

xsl:key <xsl:key name="..." match="..." use="..." />

xsl:functions13 <xsl:functions ns="..." > ...
</xsl:functions>

xsl:locase <xsl:locase name="..."> ... </xsl:locase>

xsl:attribute-set <xsl:attribute-set name="..."> ...
</xsl:attribute-set>

xsl:variabse <xsl:variabse name="..."> ... </xsl:variabse>14

xslaram-variabse <xslaram-variabse name="..."> ...
</xslaram-variabse>

xsl:template <xsl:template match="..."> ...
</xsl:template>

<xsl:template name="..."> ...</xsl:template>


在上表所列的元素之中,xsl:functions、xsl:locase、xsl:attribute-set、xsl:variabse、xsl:param-variabse,以及xsl:template等元素可以於自身之中定義其他元素。這些元素必須是來源樹上有效的節點,如同前面章節中所介紹的來定義。

xsl:template元素


xsl:template元素為XSL樣式表的基礎。這個元素會建立一個樣板,讓使用者代理程式(user-agent)從來源節點上建構一個樣式化結果節點。該樣板實際上擁有兩個部分:「matching」與「processing」兩部分。15
matching部分會識別來源節點以決定要套用何種處理程序。Matching的資訊儲存在屬性之中。例如,在前面的樣式表中,注意下列標籤:


<xsl:apply-templates sesect="book_description/edition" />
processing部分定義了子節點將如何被處理以及運用何種樣式。這項資訊包含在子元素之中。例如,在前面的樣式表中,注意下列元素:


<xsl:template match="edition">
...
</xsl:template>
以XSL樣板搜尋


XSL樣板使用了不同的Patterns來搜尋來源樹上的節點,如下列敘述所示:

最簡單的搜尋就是使用名字,也就是來源節點透過使用符合屬性的名稱來搜尋。例如,下面的樣板將會搜尋所有稱為「edition」的元素。16


<xsl:template match="edition">
在原始搜尋的結果中,元件必須以其父層的名稱來識別,如同自身擁有的名稱一樣。例如,下例的樣板會搜尋所有名稱為「Book_Titse」,且上一層名稱為「Book_Description」的元素。


<xsl:template match="Book_Description/Book_Titse">
要搜尋數個名稱,則該名稱必須在XSL中使用「|」來分隔,如下列樣板中所示:


<xsl:template match="Author|Publisher|Distributor">
為了要搜尋來源樹的根節點,應宣告如下:


<xsl:template match="/">17
XSL允許使用ID來進行搜尋。下面的樣板將找出並搜尋所有來源樹中ID為「Important」的所有節點。


<xsl:template match="id(Important)">
XSL同時也允許使用節點屬性來進行搜尋。例如,如果來源樹中名為「Name」的節點擁有「Given」屬性,則該樣板將會搜尋,如下所示:


<xsl:template match="Name[Given]">
實作7:建立XSL樣式表


目標


在完成本實作之後,你將能夠:18
建立XSL樣式表。

將XSL樣式表連結至XML文件。

在您開始之前


先決條件


在開始進行實作之前,你必須:

熟悉Microsoft Internet Explorer 5.0。

熟習XML。19

情境


在你建立一組XML文件之後,你必須建立一個樣式表,以便在瀏覽器中檢視文件。在本實作中,你將完成樣式表來展示書籍說明網頁。然後你將連結XML文件至樣式表中。


--------------------------------------------------------------------------------
注意
在實作中,使用「→」符號作為連接字元。


--------------------------------------------------------------------------------

4 預估完成時間:15分鐘

練習1:建立XSL樣式表


在本練習中,你將為書籍說明文件建立一個XSL樣式表。20
4 建立XSL樣式表

在筆記本中,於目錄<install folder>Labs\Lab07\StartCode\中開啟檔案book.xsl。

4 為price元件宣告樣式表

在檔案book.xsl中,找出下列元素:

<!- Price Template ->21
在步驟1中的標籤下面加入下列程式:

<xsl:template match="price">
<TD BGCOLOR="#FFFFD0" STYSE="width:391;→
text-align:seft;font-family:Arial;font-size:10pt;" >
<BLOCKQUOTE>
$<xsl:value-of />
</BLOCKQUOTE>
</TD>
</xsl:template>
4 將完成宣告的樣板連結至目前樣板中

在檔案book.xsl中,找出下列標籤:

<xsl:apply-templates sesect="book_description/edition" />
在步驟1的標籤下面加入下列程式:22

<xsl:apply-templates sesect="book_description/price" />
儲存並關閉檔案。
4 將樣式表鏈結XML文件中

在筆記本中,於目錄<install folder>Labs\Lab07\StartCode\中開啟檔案book.xml
在檔案中找出下面的宣告:

<!DOCTYPE book_description SYSTEM "book.dtd">23
在步驟2宣告的下一行加入下列處理指令:

<?xml-stysesheet type="text/xsl" href="book.xsl" ?>
儲存並關閉檔案。
4 檢視結果

在Windows檔案總管中,瀏覽至<install folder>\Labs\Lab07\StartCode目錄中,然後雙擊 book.xml24 。書籍說明網頁的結果將會展示在瀏覽器中。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:09 PM   #9 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

在XML中建立COM物件2


在這個部分,你將學習有關XML scriptlets的架構,以及XML scriptlets與DHTML scriptlet的不同之處。

DHTML與XML Scriptlets


Scriptlets是以動態元件方式運作並展露屬性與方法的HTML網頁。它們擁有泡泡式(譯者註:事件會如同泡泡般往上傳遞)系統事件及觸發所屬通告的能力。Scriptlets透過提供跨Web可重複使用元件的方式簡化了網站開發者的工作。

XML scriptlets與DHTML scriptlets


DHTML與XML Scriptlets都是軟體元件-可自我包含、可程式化、可重複使用、語言獨立-可以輕易地放入應用程式中。它們提供了屬性與方法、觸發事件,並透過名字及(或)ID進行唯一識別。DHTML與XML Scriptlets的不同之處為XML scriptlets完全倚靠COM,而DHTML scriptlets則採用了完全不同的實作方式以接近COM特性。

兩種型式scriptlets不同之處展示於下表之中:

特性3 DHTML_scriptlet XML_scriptlet
程式設計介面 透過Microsoft Jscript函式 型態函式庫
建構機制 一個稱為public_description的Microsoft Jscript函式4 DllGetClassObject()函式
方法與屬性 public_description方法 COM自動化介面
事件 DHTMLs視窗,外部物件 COM連結指標介面5
開發語言 含有script的HTLM XML文件中的VBScript或JScript
物件識別 檔案名稱與MIME型態 ProgID與CLSID
註冊6 不支援。檔案名稱唯一地定義script 系統註冊區
安裝於網站 MIME型態的<OBJECT>標籤 含有CLASSID屬性的 網頁<OBJECT>標籤
安裝於桌上型應用程式 透過Microsoft ActiveX控制項安裝7 直接安裝

XML Scriptlet架構


你可以藉著使用Microsoft Jscript開發軟體、Microsoft Visual Basic Scripting Edtion、Perl,或任何其他內含ActiveX script相容編譯器的語言來撰寫XML scriptlet。COM元件元素如類別代理(class factories)與IUnknown,都儲存在一個稱為scrobj.dll的系統執行時期dll中。Scriptlets使用中繼資料來描述元件,如同COM+使用中繼資料來描述元件的方式一樣。你所需提供的只有一個中繼資料,用來描述你所實作的介面及實作不同方法的程式碼。

下圖介紹了XML scriptlet的架構。




XML Scriptlet的元件


XML scriptlet是一個副檔名為.sct的ASCII檔案。它擁有三個主要標籤:<registration>、<implements>與<script>。所有XML scriptlet的原始程式碼都包含在標籤<scriptlet>中。8
<registration>標籤包含所有有關的元件識別,如ProgID與CLSID等的資訊。當你開發XML scriptlet時,你通常會在註冊元素中包含一份描述與版本號碼,如下面範例所示:


<scriptlet>
<registration
Description="This is a bare-bones Scriptlet."
ProgID="BareBones.Scriptlet"
Version="1.00"
ClassID="{00000000-1010-1010-83d1-f49604c10010}"
>
</registration>
</scriptlet>


--------------------------------------------------------------------------------
注意
ClassID必須是唯一的,而且可使用應用程式如Guidgen.exe來產生。


--------------------------------------------------------------------------------

在<implements>標籤中,你會定義元件將實作的介面。每一個你加入的<implements>標籤會對應到一個COM介面,讓使用者透過QueryInterface來接收與呼叫。介面並不是以CLSID或程式名稱來作識別。相反地,它們是利用一個名為Type的屬性來進行識別,其內容類似關鍵字,告訴執行時期模組哪個COM server會被呼叫來處理客戶端的要求。介面也擁有一個ID屬性讓你可以在程式中將之視為物件。下面就是一個典型的<implements>標籤。


<implements type="Automation" id="dispatcher">
<method name="Hello">
<parameter name="numHello" />
</method>
</implements>
<script>標籤包含所有用來實作,並由全部介面所展示的不同函式所需的原始程式碼。例如,在前面範例中的scriptlet可以在傳回特定次數「Hello」字串的方法中加入<script>標籤:


<script language="JavaScript">
function Hello (numHello) {
var strText = "";
for( i=0; i<numHello; i++ )
strText += strText + "Hello";
return strText;
}
</script>9
介面處理程序


介面處理程序為一個程序內的COM伺服器端元件,為給定的介面提供了標準的實作。它是XML scriptlet中最重要的特性。介面處理程序的集合會列出scripelet將實作的所有COM介面。

事件處理程序讓scriptlet可以觸發事件。這些處理程序藉著完成IconnectionPoint與IConnectionPointContainer的標準實作來提供所需的COM底層構造。

Automation處理程序負責Automation介面。它們實作了IDispatchEx。事件處理程序提供了觸發事件所需的連接指標介面。在處理程序與介面之間是一對多的關係。

下面為在程式碼中如何觸發事件的範例:

<script language="JScript">
function DoWork() {
MyScriptlet.fireEvent("BeginWork")
// place code here
MyScriptlet.fireEvent("WorkCompleted")
}
</script>
程式導覽:在XML中建立COM物件10


電子商務的交易資料會被輸入到線上表單中,線上表單只是暫時的儲存單元。要永久地儲存資料,你必須將資料寫入資料庫或文字檔中。在這個單元,你將學習如何建立並註冊將資料從線上表單寫入文字檔的XML scriptlet。你也將學習如何在ASP網頁上使用scripelet。

XML scriptlet


在電子商務的交易中,你必須能夠確認跟你進行交易的使用者。你也可能需要檢視該使用者過去的交易紀錄。要完成這些工作,首先你必須紀錄使用者的信用狀況。

現在你將學習如何撰寫scriptlet來從表單上讀入使用者的名字、住址以及信用卡號碼,並將資料存入電腦磁碟機C槽的文字檔中。

<scriptlet>
<registration
Description="This scriptlet is used to write data from _
a form to a text file"
ProgID="Storage.Scriptlet"
Version="1.0"
classid="{8D9CC880-D79F-11d2-B7C8-00C0DFE39737}"
>
</registration>

<implements type="ASP" />
<public>
<method name="whoAreYou" />
</public>

<script language="VBSCript">
public function whoAreYou(who, where, number)
dim usr_name, usr_address, usr_credit
usr_name=who
usr_address = where
usr_credit = number

Set fso = CreateObject("Scripting.
FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\credibility.txt", True)
MyFile.WriteLine(usr_name)
MyFile.WriteLine(usr_address)
MyFile.WriteLine(usr_credit)
MyFile.Close
end function
</script>

</scriptlet>
註冊元素


前面範例中所展示的註冊元素擁有以下的屬性:11
Description

用來描述scriptlet,如此任何人只需觀看.sct檔即可決定該scriptlet提供了哪些功能。
ProgID

當scriptlet實作完成時用來呼叫scriptlet用。
Version

用來識別scriptlet的版本號碼。
ClassID12

在將執行scriptlet的電腦上用來註冊scriptlet。
實作元素


實作元素宣告了下列事項:

scriptlet將在ASP檔案中被呼叫。

scriptlet支援一個名為whoAreYou的方法。

script元素


script元素宣告了下列事項:13
whoAreYou方法接受三個參數,分別是:who、where以及number。

該scriptlet會在電腦C槽的根目錄下建立一個名為credibility.txt的檔案,並將資料寫入檔案中。

在你建立scriptlet之後,必須將scriptlet註冊在欲執行scriptlet的電腦上。要完成這項工作,你必須透過Windows檔案總管瀏覽至scriptlet上,利用滑鼠右鍵點選scriptlet,然後選擇 註冊 。這會在電腦中將scriptlet註冊成COM物件。


--------------------------------------------------------------------------------
注意
有關註冊COM元件更詳細的資訊,請參閱MSDN。


--------------------------------------------------------------------------------

在scriptlet完成註冊之後,可以使用ASP檔案以物件的形式呼叫它。用來呼叫scriptlet的ASP範例如下:14
<%
Set oData = CreateObject("Storage.Scriptlet")
rs=oData.tell(request.form("name"),request.form("address" _
), request.form("phone"))
%>

--------------------------------------------------------------------------------
注意
想取得更多有關XML Scriptlets的資料,請參考<<Writing COM Objects with Scripting Languages>>一書中的附錄C。


--------------------------------------------------------------------------------

實作8:在XML中建立及使用COM物件


目標


在完成本實作之後,你將能夠:

在XML中建立並註冊COM物件

使用ASP檔案來呼叫COM物件。15

在您開始之前


先決條件


在開始實作之前,你必須具有:

HTML與Microsoft Active Server Pages (ASP)技術的經驗。

Microsoft Visual Basic Scripting Edition的知識。

元件物件模型(COM)的基本知識。

熟悉Microsoft Internet Explorer 5.0。16

環境設定


要完成這個實作你必須將Lab\Lab08\StartCode目錄下的檔案複製到C:\InetPub\wwwroot。

情境


在使用者發出訂單後,必須建立採購訂單。這個步驟包括了接收使用者的輸入並將所需欄位送至檔案中。

在這個實作中,你將使用item code、item name與quantity ordered作為傳入採購訂單中的必要欄位。

4 預估完成所需時間:15分鐘17

練習1:在XML中建立並註冊COM物件


在這個練習中,你將在XML中建立並註冊一個COM物件。

4 加入註冊資訊到scriptlet中

在目錄C:\InetPub中,於筆記本中開啟purchase_order.sct檔案。
找出註冊標籤。在標籤中,於字彙「registration」後面,加入下面的程式碼:

Description="This scriptlet is used to write a purchase order from
form input"
ProgID="Purchase_order.Scriptlet"
Version="1.0"18
儲存檔案。
4 加入ClassID到scriptlet中

在 開始 選單中,點選 執行19 。
瀏覽至C:\InetPub\wwwroot目錄下,然後雙擊 Guidgen.exe 。
點選 確定 來執行程式。20
在Create GUID視窗中,點選 Registry Format 。
點選 New GUID ,然後按下 Copy21 來產生新的ClassID並將之複製到筆記本中。
按下 Exit 關閉Create GUID視窗。
在檔案purchase_order.sct中,找出區段「 class=」,然後將游標移至兩個引號之間。
在 編輯22 功能表中,點選 貼上 將ClassID複製到scriptlet。
4 撰寫建立物件的script

找出<script language="VBScript">與</script>標籤。在標籤之間加入下面的程式碼:

public function hello(code, name, howmany)
dim pur_code, pur_nam, pur_quant
pur_code = code
pur_nam = name
pur_quant = howmany

Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = _
fso.CreateTextFile("c:\purchase_order.txt", True)
MyFile.WriteLine(pur_code)
MyFile.WriteLine(pur_nam)
MyFile.WriteLine(pur_quant)
MyFile.Close
end function23
儲存並關閉檔案。
4 註冊COM物件

在 開始 選單中,指向 程式集24 ,選擇 附屬應用程式 然後按下 Windows檔案管理員 。
瀏覽至路徑C:\InetPub\wwwroot,然後利用滑鼠右鍵點選purchase_order.sct。
在快顯功能表中,點選25 註冊 。
會出現一個訊息方塊,說明元件已經成功地註冊。
練習2:利用ASP網頁來呼叫COM物件


在這個練習中,你將建立ASP網頁來從輸入表單上讀取資料,並使用COM物件來產生採購訂單。

4 開啟指定變數值所在的表單26

啟動Microsoft Internet Explorer,然後於地址方塊中輸入URL位址『http://localhost/Purchase_order.htm』。
在 View 功能表中,點選 Source 。
注意那些用來接收表單輸入的變數:Item_code、Item_name與Quantity。27
關閉檔案。
4 建立需要的ASP網頁

在筆記本中,建立一個新檔案。
在檔案中加入下面的程式碼:

<%
Set oData = CreateObject("Purchase_order.Scriptlet")
rs=oData.hello(request.form("item_code"),request.form _
("item_name"),request.form("quantity"))
response.write("Your purchase has been noted. " & _
"We will be shipping it to you soon.")
%>
於C:\InetPub\wwwroot目錄下將檔案存成purchase_order.asp,並關閉檔案。284 檢視輸出

在Microsoft Internet Explorer,於地址方塊中輸入URL位址『http://localhost/purchase_order.htm』。
在purchase_order.htm網頁中,輸入資料如下:
在 Item Code 方塊中,輸入『ST01』。29
在 Item Name 方塊中,輸入『Pencils』。

在 Quantity 方塊中,輸入『1.5』。

點選30 Submit Form 。
會出現含有訊息「Your purchase has been noted. We will be shipping it to you soon.」的網頁。
在Windows檔案管理員中,瀏覽至C:\purchase_order.txt,然後雙擊該檔案以檢視其內容。
在purchase_order.htm網頁中會出現指定的數值。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:10 PM   #10 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

EDI概論


EDI為電腦之間利用標準格式進行一般商務資訊的往來。因為EDI允許企業即時地交換資訊,它捨棄了紙上作業並讓企業在其內部作業上更有效率,更能顧及到客戶的需求與期望。

什麼是EDI2


EDI,又稱電子資料交換,是一個廣受交易伙伴之間認可的資料傳遞的標準。




EDI為不同公司的電腦系統之間企業文件的電子往來定義了資料格式、資料型態,以及排程指令。這些交易傳統上是透過附加價值網路(VAN)來進行。EDI捨棄了紙張的採購訂單、發票、運輸表單及其他文件等負擔,並以電子化方式取代。這樣可以大幅減少處理成本的三分之一到二分之一。

EDI的名詞介紹


在EDI實作中所用到的詞彙包括有交易夥伴、電子信封與EDI轉換軟體。每個詞彙的介紹如下:

4 交易夥伴3

在EDI的專門用語中,交易夥伴指的是透過線路進行商務的個體。該個體可以是一家企業、代理商或顧客。所有的交易夥伴都會簽署一份交易夥伴協定,確保它們使用EDI交易的合法性。

4 電子信封

在網站間傳送的資訊是封裝在電子信封中。當收到電子信封時,電腦會尋找特定的鑰匙資料(key data)以便對資訊進行識別。這些鑰匙資料的介紹如下:

ISA(Instrument Society of America)宣告代表信封的開頭。而IEA宣告則代表結尾。

一個信封可以包含一個或多個功能群組。起始與結尾功能群組分別由GS(group start)與GE(group end)宣告來代表。

功能群組負責儲存EDI交易集。ST,或稱交易集標題宣告,代表交易集的起始部分,相當於書面文件的標題部分。SE,或稱交易集結尾宣告,代表交易集的結尾部分。4

下面是電子信封的範例。注意信封中的ISA、IEA、GS、GE、ST與SE等宣告。

ISA*00*00*01*0860603544*08*6113240000*940608*0902*U*00303*00E
0000451*0*P>~
GS*IN*086063544*6113240000*940608*0902*1156*X*003030~
ST*850*6541~
BEG*00*SA*09935600*990707~
NTE**GOODS SHIPPED PER EDI INSTRUCTIONS~
REF*1A*053445~
CSH*P2~
DTM*010*990707~
DTM*001*990707~
TD5*****1-200 COPIES~
TD5*****201+ MICROSOFT~
N1*BY*92*08995~
PID*F*99***2T - 4T~
SE*15*6541~
GE*1*1156~
IEA*1*000451~

--------------------------------------------------------------------------------
注意
前面範例中的星狀符號為placeholder。程式用縮排來改善其可讀性。這些縮排並不存在於一般的EDI交易集中。


--------------------------------------------------------------------------------

4 EDI轉換軟體

EDI轉換軟體將資料在透過網路傳送之前由其原始格式轉換成EDI交易集。當接收到EDI交易集,EDI轉換軟體會將資料轉換回原始格式。

EDI的優點5


EDI藉著將所有紙上作業更換成相同的電子化作業,來將交易夥伴之間的基本交易流程予以流暢化。因為EDI文件可以以電子方式傳送,其郵寄成本以及整理時間將縮短。EDI保證了資料的可信度,因為資料可以輸入一次以上且可視需要重複使用。

下面的介紹說明了EDI商務交易裡的各項資訊的流程。




基本的交易流程


下面是一個典型的EDI商務交易流程範例:

顧客傳送訊息給供應商,要求報價單及產品的技術規格。
供應商傳回報價單。6
顧客評估過報價單,然後傳送一份採購訂單給供應商。
當產品已經完成運送準備,供應商會傳送一份發票或運送通知給顧客。
產品被送出。供應商傳送一份貨物運輸帳單給顧客。
當客戶收到產品,供應商會送出一份接收報告。
客戶付款。
在上面的每一步驟中,收據會由接收者傳送給傳送者,造成較高的成本、較長的往返時間,以及較高的錯誤風險。而EDI則大幅地消弭了這些困擾。

在基本的交易流程中使用EDI的結果7


藉著將交易流程予以流暢化,EDI帶來了以下的優點:

在電子商務的規則中,EDI加速了採購訂單-發票付款的週期,因此讓產品能更快速地進入市場。

EDI提供了表單的電子傳輸,因而減少了建立與郵寄紙式訂單的成本,也降低了文件歸檔所需的花費。

EDI要求資料只需輸入一次,然後該資料便可以重複使用。這消除了多次輸入同樣資料的麻煩,且降低資料錯誤的可能性。

EDI讓資訊能夠更快速地更新,進而達成更快速的決策。

EDI允許供應商只傳送必要的東西並藉著傳送給供應商交易資訊來降低批發商的庫存。同時,藉著減短整理時間,EDI讓批發商只需維持較小的庫存。


--------------------------------------------------------------------------------
注意
想獲得更多有關EDI的資訊,請參考DISA Web網站8 http://www.disa.org/ 。


--------------------------------------------------------------------------------

XML與EDI


雖然EDI提供了許多的好處,但實作EDI的成本仍過高。因為這個原因,所以只有大企業會實施EDI。如果有企業並未實施EDI,而想與有實施EDI的企業進行通信,必須將資料轉換成EDI交易集。相反地,企業所接收到的資料必須從EDI格式轉換成接收端企業所使用的資料格式。這類轉換最簡單的方式是將資料儲存在XML文件中。XML允許資料以如此容易瞭解且具有足夠彈性以轉換成EDI相容結構的方式來進行建構。

將資料從XML轉換成EDI


傳統上呈現在紙張文件上的資料,例如貨物訂單,可以藉著使用ASP網頁來轉換成XML格式。然後資料會以方便人們閱讀且方便電腦管理的格式呈現。

將XML文件轉換成EDI9


一張典型的發票包括了有關採購、購買者與開出該發票的企業等的詳細資訊。在XML中,這些可以呈現如下:

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="801.xsl" ?>
<invoice number="1045">
<organization status="send to">
<name>RAMONA PUBLISHING</name>
<street>P.O. BOX 679342</street>
<city>HOUSTON</city>
<state>TX</state>
<zip>77234</zip>
</organization>
<organization status=" charge ">
<name>HANSEL PUBLISHING</name>
<street>101 APPLE PIE ST.</street>
<city>NEW YORK</city>
<state>NY</state>
<zip>00103</zip>
</organization>
<organization status="sent from">
<name>FIVELAKES PUBLISHING</name>
<street>79 RIVER DRIVE</street>
<city>DALLAS</city>
<state>TX</state>
<zip>74564</zip>
</organization>
<shipper >
<name>CONSOLIDATED TRUCK</name>
<street>534 FLAT MEADOWS</street>
<city>HOUSTON</city>
<state>TX</state>
<zip>77544</zip>
</shipper>

<contact>
<name >J.DOE</name>
<phone>2104355445</phone>
</contact>

<order>
<item >
<code>6900</code>
<quantity>3</quantity>
<unit>CA</unit>
<price_per_unit>12.75</price_per_unit>
</item>
<item>
<code>P450</code>
<quantity>12</quantity>
<unit>EA</unit>
<price_per_unit>2.99</price_per_unit>
</item>
<item>
<code>1640</code>
<quantity>4</quantity>
<unit>EA</unit>
<price_per_unit>5.99</price_per_unit>
</item>
<item>
<code>1507</code>
<quantity>1</quantity>
<unit>DZ</unit>
<price_per_unit>2.45</price_per_unit>

</item>
<total_cost>100.54</total_cost>
<date>
<day>20</day>
<month>4</month>
</date>
</order>
</invoice>
使用XSL,則前述的XML程式碼可以輕易地轉換成EDI交易。範例的樣式表如下所示:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
ISA**00*0000000000*01*01*PASSWORDME*01*123456789 _
987654321 890714*2210*U*000000008*O*P*~
GS*IN*012345678*087654321*900509*2210*000001*X*002040~
ST*801*0001~74832
BEG*940606*1045*940606*~
<xsl:apply-templates select="invoice/organization" />
<xsl:apply-templates select="invoice/contact" />
ITD*01*3*2**10~
<xsl:apply-templates select="invoice/order/item" />TDS*
<xsl:value-of select="invoice/order/total_cost" />~
<xsl:apply-templates select="invoice/shipper" />
<xsl:apply-templates select="invoice/order/date" />
SE*21*000001~
GE*1*000001~
IEA*1*000000008~
</xsl:template>

<xsl:template name="org" match="organization">
N1*BT*
<xsl:value-of select="name" />~ N3*
<xsl:value-of select="street" />~ N4*
<xsl:value-of select="state" />*
<xsl:value-of select="zip" />~
</xsl:template>

<xsl:template match="contact">
PER*AD*
<xsl:value-of select="name" />*TE*
<xsl:value-of select="phone" />~
</xsl:template>

<xsl:template match="item">
IT1**
<xsl:value-of select="quantity" />**VC**
<xsl:value-of select="code" />~
</xsl:template>

<xsl:template match="shipper">
CAD*M****
<xsl:value-of select="name" />~
</xsl:template>

<xsl:template match="date">
CTT*
<xsl:value-of select="month" />*
<xsl:value-of select="day" />~
</xsl:template>

</xsl:stylesheet>
4 瞭解樣式表

這個樣式表會在XML文件中被呼叫且是用來將XML資料轉換成發票所需要的格式。該格式是由ANSI ASC X12規格定義。子樣式被定義在樣式表的根區段中。每一個子樣式選擇了所需的資料並傳送EDI所需宣告讓資料變為可讀。10
將EDI交易集轉換成XML


雖然藉著樣式表將文件從XML轉換成EDI非常容易,但是從EDI轉換成XML可能就會產生問題。要將EDI轉換成XML最普通的方法就是使用EDI解析器來轉換。該解析器可以用在高階的程式語言如Microsoft Visual Basic ,或在scripting語言中使用XML等方式來撰寫。下面的程式碼展示了用來將發票從EDI 801交易集轉換成XML文件的XML scriptlet:

public sub makeXML()

Const ForReading = 1
Const TristateUseDefault = -2, TristateTrue = -1, _
TristateFalse = 0

Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\edi.txt")
Set ts = f.OpenAsTextStream(ForReading,TristateUseDefault)
Storage = ts.ReadAll
ts.Close

Dim num, I
num = InStr(1, Storage, "N1*BT*")
num=num-1
t = Left(Storage, num)
Storage = Replace(Storage, t, " ")
leng1 = Len(Storage)
num = InStr(1, Storage, "SE*")
num = leng1 - num + 1
t = Right(Storage, num)
Storage = Replace(Storage, t, " ")
newl = "</organization>" & Chr(13) & "<name t>"
Storage = Replace(Storage, "N1*BT*", newl)
newl = "</name>" & Chr(13) & "<street>"
Storage = Replace(Storage, "~ N3*", newl)
...
Storage = Replace(Storage, "0<item>*", newl)
newl = "</quantity>" & Chr(13) & "<code>"
Storage = Replace(Storage, "*VC* ", newl)
Storage = Replace(Storage, "*", ",")
Storage = Replace(Storage, "~", "")
Set fs = CreateObject("Scripting.FileSystemObject")
Set MyFile = fs.CreateTextFile("c:\edi-new.xml", True)
MyFile.WriteLine ("<?xml version='1.0' ?>")
MyFile.WriteLine ("<invoice>")
MyFile.Write (Storage)
MyFile.Close
End Sub
4 瞭解script

EDI交易集會以文字檔的方式儲存在電腦C槽,名為edi.txt。scriptlet會開啟檔案讀取內容將之放入名為Storage的變數,如下面程式碼所示:

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\edi.txt")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
Storage = ts.ReadAll11
所有後續的處理都是根據儲存在變數裡的值。藉著使用下面的程式碼來進行,交易集的相關部份會被識別並更換成XML標籤:

newl = "<organization>" & Chr(13) & "<name>"
Storage = Replace(Storage, "N1*BT*", newl)
在變數中的數值經過修改以建立正確的XML資料後,藉著下面的程式碼,資料會被寫回位於C槽,名為edi-new.xml的檔案中:

Set fs = CreateObject("Scripting.FileSystemObject")
Set MyFile = fs.CreateTextFile("c:\edi-new.xml", True)
MyFile.WriteLine ("<?xml version='1.0' ?>")
MyFile.WriteLine ("<invoice>")
MyFile.Write (Storage)
全部的程式碼是放在XML scriptlet的script元素中,該scriptlet可以在伺服器端註冊並使用ASP網頁來呼叫。

實作9:將XML文件轉換成EDI


目標12


在完成本實作之後,你將能夠:

撰寫XSL樣式表來將XML文件轉換成EDI交易集。

撰寫XML scriptlet來將EDI交易集轉換成XML文件。

在您開始之前


先決條件


在開始實作之前,你必須:

熟悉XSL。13

熟悉XML。

熟悉Microsoft Visual Basic Scripting Edition。

熟悉Microsoft Internet Explorer 5.0或更新版。

環境設定


要完成本實作你必須將Lab\Lab09\StartCode目錄下的檔案複製到C:\InetPub\wwwroot。

情境


這個實作假設了當未採用EDI的企業欲與採用EDI企業進行通信時所遭遇的狀況。首先你將先完成一個XSL樣式表,用來將XML發票文件轉換成EDI 801交易集。然後你將撰寫一個XML scriptlet用來將EDI交易集轉換回XML。14
4 預估完成所需時間:30分鐘

練習1:建立樣式表


在這個練習中,你將完成一個XSL樣式表,用來將XML文件轉換成EDI交易集。

4 開啟XSL樣式表

在目錄C:\InetPub\wwwroot中,開啟edi.xsl檔案於筆記本中。15

4 在XML樣式表中定義符合組織的樣板

在edi.xsl中,找出下面的標籤:

<xsl:template name="who" match="organization">
在步驟1程式碼下面加入底下的程式碼:

N1*BT*
<xsl:value-of select="name" />~ N3*
<xsl:value-of select="street" />~ N4*
<xsl:value-of select="state" />*
<xsl:value-of select="zip" />~
儲存檔案。164 將樣板結合至樣式表中

在edi.xsl中,找出下面的標籤:

BEG*940606*1045*940606*~
在步驟1程式碼下面加入底下的標籤:

<xsl:apply-templates select="invoice/organization" />
儲存並關閉檔案。17練習2:為樣式表與XML文件建立關聯


在這個練習中,你將把你在練習1中建立的XSL樣式表與XML文件建立關聯。

開啟XML文件


在目錄C:\InetPub\wwwroot中,於記事本中開啟檔案edi.xml。

4 為樣式表與XML文件建立關聯

在文件中,找出下列標籤:18

<?xml version="1.0" ?>
在步驟1的標籤下面加入下面的標籤:

<?xml-stylesheet type="text/xsl" href="edi.xsl" ?>
關閉並儲存檔案。
4 檢視結果

在Windows檔案總管中,瀏覽至目錄C:\InetPub\wwwroot並雙擊19 edi.xml 。

瀏覽器中會出現一份EDI 801交易集。

練習3:建立XML scriptlet


在這個練習中,你將完成一個XML scriptlet,用來將EDI交易集轉換成XML文件。

4 開啟XML scriptle20 t

在目錄C:\InetPub\wwwroot中,於記事本中開啟檔案edi.sct。

4 加入註冊資訊至scriptle t

找出註冊標籤然後在字彙「registration」後加入下面的程式碼:

Description="This scriptlet is used to convert a 801 _
Transaction Set into XML"
ProgID="xmliser.Scriptlet"
Version="1.0"21
在 開始 選單中,點選 執行 。
瀏覽至目錄C:\InetPub\wwwroot中,雙擊 Guidgen.exe22 ,然後點選 確定 來執行程式。
在 Create GUID 視窗中,按下 Registry Format23 ,然後點選 New GuID 來產生一個唯一的ClassID。
點選 Copy 將ClassID複製至剪貼簿,然後按下 Exit24 。
在註冊標籤中,於edi.sct檔案中找出區段「classid=""」, 然後貼上剪貼簿中的ClassID於雙引號中。
儲存檔案。
4 撰寫script來完成scriptlet

在edi.sct檔案中,找出下面的程式碼:

Const ForReading = 1
Const TristateUseDefault = -2, TristateTrue = -1, _
TristateFalse = 0
Dim fs, f, ts, s25
在步驟1的程式碼下面加入下面的程式碼,來從電腦C槽讀取EDI交易集到變數中:

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\Inetpub\wwwroot\edi.txt")
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
Storage = ts.ReadAll
ts.Close
在edi.sct檔案中,找出下面的程式碼:

leng1 = Len(Storage)
在步驟3的程式碼下面加入下面的程式碼,來刪除發票中不需要的EDI結尾資訊:

num = InStr(1, Storage, "SE*")
num = leng1 - num + 1
t = Right(Storage, num)

Storage = Replace(Storage, t, " ")
在edi.sct檔案中,找出下面的程式碼:26

Storage = Replace(Storage, "*VC* ", newl)
Storage = Replace(Storage, "*", ",")
Storage = Replace(Storage, "~", "")
在步驟5的程式碼下面加入下面的程式碼來撰寫XML文件:

Set fs = CreateObject("Scripting.FileSystemObject")
Set MyFile = fs.CreateTextFile("c:\edi-new.xml", True)
MyFile.WriteLine ("<?xml version='1.0' ?>")
MyFile.WriteLine ("<invoice>")
MyFile.Write (Storage)
MyFile.Close
儲存並關閉檔案。
4 註冊元件

在27 開始 選單中,指向 程式集 ,然後選擇 附屬應用程式 的 Windows檔案總管28 。
瀏覽至目錄C:\InetPub\wwwroot,然後利用滑鼠右鍵點選 edi.sct 。
在快捷功能表中,點選 註冊 。29
會出現訊息方塊說明scriptlet已經成功地註冊成一個COM物件。
練習4:使用ASP網頁來呼叫Scriptlet


在這個練習中,你將建立一個ASP網頁,使用你在練習3中建立的scriptlet將EDI交易集轉換成XML文件。

4 建立需要的ASP網頁

在記事本中,建立一個新檔案。
在檔案中加入下面的程式碼:30

<SCRIPT Language ="VBScript" RUNAT="Server">
set Change = CreateObject("xmliser.Scriptlet")
Change.makeXML()
Response.Write("Conversion to XML complete.")
</SCRIPT>
將檔案儲存在目錄C:\InetPub\wwwroot下,檔名為edi.asp,然後關閉檔案。
4 檢視結果

在Microsoft Internet Explorer中,於地址方塊中輸入URL位址『http://localhost/edi.asp』。
一個含有「Conversion to XML complete」的訊息方塊會出現。

在Windows檔案總管中,瀏覽至路徑C:\edi-new.xml,然後雙擊該檔案以檢視其內容。31
XML文件會出現在瀏覽器中。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:11 PM   #11 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

儲存session狀態資料導論


在這個部分,你將學習有關:

需要儲存session狀態資料的原因

用來儲存session狀態資料的方法

需要儲存session狀態資料的原因2


Session資料是你想紀錄並追蹤有關使用者或網站消費者的資訊。這些資訊的好處是:

你可以檢查某位使用者是否瀏覽過網站上的促銷網頁。如果它尚未瀏覽該網頁,你可以在目前的網頁顯示一個連結指向該促銷網頁。

你可以為目前正在使用網站的企業夥伴顯示可以接受的折扣比率。

你可以追蹤某位企業夥伴曾生產過的採購訂單數量。

你可以顯示某位企業夥伴在特定時間內曾發出過的訂單。

你可以列出使用者在特定時間內同意的付款計劃。

依據使用者為訂購的物品付款的時間,你可以計算出折扣比率。該折扣可以套用到準備提供給顧客的提早付款計劃。3

你可以顯示目前正在使用網站的所有客戶,或他們目前所在的網頁。

你可以在網頁中撰寫程式,以在使用者瀏覽網頁超過特定次數以上時執行,例如,你的網站是展示股票市場指數,如果網站的訪客在一個session中取用該網頁超過兩次,程式可以被觸發來展示相關股票市場的網頁。

你可以列出網站訪客在目前的session中曾經檢視過但尚未放入購物籃中的所有產品。

你可以利用Site Server Analysis工具來分析網站用途與拜訪過你網站的客戶的購買模式。

你可以顯示客戶之前的交易紀錄。

你也可以儲存session資料以備將來使用,例如為經常拜訪網站的訪客建立個人化的網頁。這將幫助你為使用者建立個人檔案並建立使用者的偏好設定。利用這項資訊,你可以顯示:
使用者感興趣的網頁。4

新的促銷方案及產品以吸引使用者。

例如,顧客第一次參觀FiveLakes網站並瀏覽與電腦網路相關的書籍。你可以儲存這項資訊並在使用者下次登入網站時將最新出版的網路書籍展示在他們面前。你可以提供連結至書籍出版商所提供的各項優惠措施。

同樣地,你可以將目前登入Ramona網站的企業夥伴的詳細資料顯示於Site Manager中。

你也可以傳送個人化的時事分析與電子郵件給使用者,並在使用者於一段時間之內未曾登入網站時傳送電子郵件通知使用者。

例如,你可以寄送電子郵件給使用者,內含網站上目前販售特定目錄的最新書目列表。你也可以傳送一份提醒通知書給訪客,提醒他們已有一段時間未曾瀏覽網站了。

紀錄session狀態資料的方法


session狀態是暫時的。傳統上,如果使用者登入一個ASP應用程式超過20分鐘未進行任何動作,該session將結束且資料會消失。你可以為網站指定時間期限,預設值是20分鐘。當使用者要求再度啟動瀏覽器,或於時間期限過後要求在另一個網頁執行任務時,系統將建立新的session。5
你可以利用以下的方法來儲存session狀態:

使用Cookies。

使用Active Server Pages(ASP)及Internet Information Server(IIS)所提供的session物件。

使用Active User Object(AUO)及Membership目錄。

以下詳細說明了每一種儲存session狀態資料的方法。

使用Cookies


cookie是一個小檔案,由網站的伺服器儲存在使用者的瀏覽器中,用來識別使用者。cookie可以持續存留在使用者的硬碟上或依據期限時間保留在瀏覽器的記憶體。每當使用者傳送要求使用ASP網頁,cookie就會被送到網站伺服器。6
你可以在cookie中存放使用者資訊。要將資訊寫入cookie及從cookie中讀取資訊,你可以使用Response與Request物件的Cookies集合。

要建立一個特定名稱的cookie並給定資料,你可以使用下列程式碼:

<%Response.Cookies ("EMailbox")= "John"%>
這段程式碼將建立名為Emailbox,擁有值為John的cookie。如果Emailbox cookie已經存在,程式會賦予cookie值John。

如果你想要使用cookie來追蹤後續的使用者session,你必須將cookie存在使用者的電腦上。為此,你需要使用Response物件的Expires屬性並將其值設定為未來的日期。

<%
Response.Cookies ("EMailbox")= "John"
Response.Cookies ("EMailbox").Expires = "December 31, 2000"
%>
要取得cookie的資料,可以使用Request.Cookies集合。例如,下面的程式將取得值John。7
<%=Request.Cookie ("EMailbox") %>
Cookie包含產生cookie的ASP網頁應用程式的路徑。例如,建立Emailbox cookie的.asp檔案是Mailapp應用程式的一部份。因此,Emailbox cookie包含了路徑\Mailapp。當使用者對Mailapp應用程式的.asp檔案提出要求,包含路徑\Mailapp的cookie將被送到網站伺服器。

你也可以在cookie中指定路徑。例如,若你希望在Emailbox cookie中指定路徑/Mailapp/Userprofiles/Data。下面的程式將幫助你完成這項工作:

<%Response.Cookies("Emailbox").Path = "/Mailapp//Userprofiles/
Data"%>
注意程式中使用了Response.Cookies集合的Path屬性來指定路徑。

使用cookie的限制是使用者的瀏覽器可能設定成不接收cookie。在這種情況下,你將需要另一種方式來追蹤使用者的資訊。方法之一便是使用Commerce.ShopperManager物件。

運用ASP與IIS所提供的Session物件8


另一種用來追蹤使用者資料的方法是使用session物件及一個由ASP伺服器所產生的唯一的SessionID。

SessionID是在使用者session開始時被建立,用來識別Session。當使用者在應用程式中要求使用ASP網頁時,session便會開始。SessionID會以cookie的方式存放在使用者的瀏覽器中,並在整個session的過程中使用。當使用者在應用程式中發出要求使用另一網頁,ASP會為SessionID cookie檢查HTTP要求標題以處理該要求。

一旦cookie被存放在使用者的瀏覽器中,相同的cookie會在整個session中被使用。然而,如果你重新啟動伺服器,或使用者關閉瀏覽器,則SessionID cookie會從RAM中被移除,且新的session會利用新的SessionID cookie來進行工作。

Session物件是在session開始時由IIS所建立,並儲存在網站伺服器的RAM上。當session被結束或放棄,它會從記憶體中被移除。


--------------------------------------------------------------------------------
注意
只有在瀏覽器設定成可以接受cookies時,Session物件才可以用來儲存使用者資訊。


--------------------------------------------------------------------------------

Session物件是一個內建的ASP物件,讓你可以為特定的session儲存使用者的資訊。這些使用者的資訊會以變數值的方式存在Session物件中。當使用者在一個應用程式中從一個網頁跳至另一網頁或瀏覽至另一個應用程式裡的.asp檔案,變數的值會維持。

要在Session物件中儲存變數,你需要在Session物件中建立一個含有名字的區段,並賦予其值。9
例如,你可以利用下面的程式建立一個名為FirstName的區段,並賦予其值。

<%
Session ("First Name") = "Jon"
%>
要取用存放在Session物件中的值,可存取那些內含名字的區段。例如,利用下面的程式碼你可以顯示登入網站的使用者名字:

Welcome <% = Session ("First Name") %>
你可以使用Session物件來儲存使用者的偏好喜愛,如螢幕解析度、網頁的文字或多媒體視覺效果。你可以將這些偏好喜愛存放在使用者存取應用程式時的第一個網頁中,然後在後繼的網頁中運用這些資訊。這樣讓你可以為使用者展示一個個人化的網站。

雖然使用Session物件是一種快速且容易的方法來儲存session狀態資料,但它受限於單一的網站伺服器。ASP session資訊會被存放在單一的網站伺服器上,且所有的網頁必須存放在相同的伺服器上以便能夠存取該資訊。如果你在網站伺服器的farm上實作網站,你便不能直接使用Session物件來存放及取用session資料。

在server farm中,對網站URL的要求將被重新導引至任何目前處於空閒的伺服器。要維持session資料,你必須確定session中所有的HTTP要求都會被重新引導至相同的伺服器。你可以藉著為Session_OnStart程序撰寫程式碼來完成這項工作。10
你也可以藉著使用Site Server所提供的AUO與Membership目錄來避免這類問題。

利用AUO與Membership目錄來儲存


Session資料


在這個章節,你將學習有關:

Membership服務在網站中所扮演的角色

Membership服務的元件

在網站中使用AUO11

設定AUO

建立一個Membership server實體

Membership服務在網站中所扮演的角色


Site Server讓你可以儲存使用者資料於資料庫中,並在ASP網頁中使用這些資料。

你可以儲存session與使用者的資料於Membership目錄中,並利用Active User Object或AUO來取用這些資料。在開始學習如何使用AUO與Membership目錄來儲存session狀態資料之前,讓我們先簡單的看看Microsoft Site Server所提供的Membership服務。

Membership服務讓你可以儲存與管理使用者資料。你可以建立使用者的個人檔案、驗證使用者身分,並控制網站內容的存取。你也可以顯示針對使用者進行個人化處理的網站內容。要實作其Membership特性,Site Server提供了Membership目錄與Membership Server。

Membership目錄的元件12


Membership目錄是一個中央資料儲藏庫,儲存了使用者資料以及位址目錄。它也可以儲存組織資料、指向內容來源的指標,以及其他可以用來追蹤使用者偏好的資訊。

Membership目錄擁有:

Membership目錄資料庫

目錄資訊樹狀結構(DIT)

動態資料

Membership目錄資料庫


Membership目錄資料庫可以是Microsoft Access或Microsoft SQL Server資料庫,由使用者資料、網站資料,以及結構(Schema)等構成。13
使用者資料由網站的使用者個人檔案、安全憑證與安全群組等組成。你可以使用註冊表單或scripts來收集使用者資訊。其中註冊表單讓使用者輸入資訊,scripts則負責擷取使用者的偏好喜愛。

網站資料是有關使用Membership目錄的應用程式,內含需要傳送資訊的使用者電子郵件信箱的列表,以及用來界定內容與重要性的階層結構的網站辭典等資訊。

結構定義了Membership目錄中所有物件的用法,並以物件集合的方式儲存在Membership目錄資料庫中。結構物件可以是下列兩種型式的任何一種:

類別結構物件定義了儲存在Membership目錄中的類別物件,以及和物件類別一起使用的屬性。

屬性結構物件定義了個別的屬性。這些屬性可以被指派給類別物件。

目錄資訊樹狀結構(DIT)


利用DIT,Membership目錄中的所有資訊可以用階層式結構來呈現。DIT是一個物件的樹狀結構,由container物件與leaf物件所組成。14
container物件擁有子物件。這些物件可以是leaf物件或是其他的container物件。

leaf物件則沒有子物件,並且代表Membership目錄中個別的元素。因此,DIT以leaf物件來表示使用者資料、群組資料、結構、指向內容來源的指標,以及資料庫的設定資料。

在DIT中,元素被視為組織的單位。較低的節點或組織的單位使用名詞「ou=」。組織的單位是一個container,可以包含其他的組織單位。

DIT的根節點代表組織,並使用名詞「o=」來表示。要指定組織的名字,請在建立Membership目錄時指定一個值到DirectoryName。隨後你將不能改變該值。

根據預設,DIT擁有下列組織:

Admin組織單元,包含結構物件與內容來源物件,以及網站辭典。結構物件定義了Membership目錄中使用者資料的結構,而內容來源物件則指定了網站裡建立索引的內容的來源;網站辭典則定義了用來為其他物件進行分類的詞彙。

Members組織單元包含了使用者物件。這些物件代表網站的使用者。這些使用者可以是cookie使用者或經過註冊的使用者。這個容器儲存了子包含物件,ou=Anonymoususer, 用來儲存cookie使用者的資料。15

Group組織單元包含了群組物件,其用以表達為管理以及安全性考量所建立的群組。任何你所新建的群組都會直接被加入container中。這個container擁有ou=NTGroup子包含物件來儲存直接對應到Microsoft Windows NT群組的群組資料。

Dynamic組織單元,代表目前連結到網站的使用者其前後不一致的資料。這個container中的物件是由Microsoft NetMeeting客戶端所建立,表示目前登入的使用者。這項資料將不會被寫入磁碟。

Application組織單元,包含支援應用程式如NetMeeting的資訊。

DistributionList組織單元,包含用來傳送資訊的電子郵件信箱,如newsletters的列表。

動態資料


動態資訊指的是有關session與目前登入網站使用者的關聯資訊。動態資料包含了像是使用者識別身份與其IP位址等資訊。它也將包含對應用程式獨有的資訊,如使用者瀏覽的網頁與放置在購物籃中的商品。

動態資料在session的期間存活。當session開始,區段隨同特定time-to-live(TTL)而建立。當TTL趨於零,區段會從Membership目錄中被移除。這樣確保session狀態資料不會因為session被捨棄或毀壞而累積。16
Membership Server


除了Membership目錄,Site Server還提供Membership Server來實作Membership服務。 Membership Server讓應用程式的伺服器端如Internet Information Server (IIS)能夠在網站中實作Membership特性。Membership Server提供服務幫助你使用與管理Membership目錄。你也可以確認並驗證帳戶存放在Membership目錄中的使用者。

Membership Server擁有下列元件:

認證服務。

Active User Object(AUO)。

Light-weight目錄存取協定(LDPA)服務。

Site Server Message Builder服務。17

每一個元件詳述如下。

認證服務


認證服務實作了網站的安全性。要達成這點,驗證服務必須執行下列工作:

以存放於Membership目錄的密碼來驗證使用者所輸入的密碼。

建立安全內文來支援Windows NT跨內容與應用程式的存取控制。

將Membership目錄中的群組對應到Windows NT Server目錄資料庫的群組。

認證服務也提供了從Membership目錄接收使用者的屬性,並將之存入快取記憶體,以改善ASP應用程式的存取效能。18
Active User Object (AUO)


AUO代表一組跨越所有資料來源的使用者屬性。它可以從多個Membership目錄與外部資料庫進行資料整合,並建立一份虛擬結構,讓任何的script或應用程式使用。

使用AUO,應用程式可以取得目前使用者的資料,不必實作程式碼來確認使用者、指定資料儲存的位址等。AUO可以讀寫資料來源並建立物件。同樣地,使用AUO的script或程式可以讀寫資料來源。

Light-weight目錄存取協定(LDAP)


這項服務為對Membership目錄進行平台獨立的取用提供了一個介面。你可以存取Membership目錄中保持不變或動態的資料。使用這項服務你可以從Membership目錄資料庫取得、編輯、加入或刪除區段。

你可以在相同的電腦上建立並設定LDAP服務為Membership目錄資料庫、應用程式伺服器端,或獨立的電腦。

要取用Membership目錄,那是一個經過驗證、與LDAP相容的應用程式可以登入LDAP服務。驗證服務會登入LDAP服務中取得資訊並提供Membership目錄的內容。19
Site Server Message Builder服務


Site Server Message Builder服務讓你可以藉著使用Direct Mail來傳送電子郵件給列於Membership目錄中Distribution List中的接收者。Direct Mail是一項由Microsoft Site Server針對個人化所提供的一項功能。

有關Direct Mail的討論已經超過本書的範圍。你可以參考網站文件以取得List Builder、Message Builder與Direct Mail的完整討論。

現在,讓我們看看如何在ASP應用程式中使用AUO來儲存session狀態資料。

在網站中使用AUO


要使用AUO來存取session的狀態資料,你需要在網站中設置AUO。要做到這點,需執行下列工作:

為Membership目錄建立一個資料庫。20
在被要求的網站伺服器上,建立含有AUO的Membership Server實體。
將需要儲存session資料所在的網站對應到Membership Server。
在Membership Server中設定AUO。
為Membership目錄建立一個SQL Server資料庫


你可以使用Microsoft Access或Microsoft SQL Server來宣告成為Membership目錄資料庫。你可以針對擁有較少使用者的小型網站使用Access資料庫。Access資料庫的最大規格為1GB。

至於那些擁有成千上百並註冊過的使用者服務網站,你應該選擇Microsoft SQL Server資料庫。


--------------------------------------------------------------------------------
注意
你無法將Access資料庫匯入SQL Server。如果你想要使用SQL Server來代替目前使用的Access資料庫,你必須重新來過一次。21

--------------------------------------------------------------------------------

建立Membership Server實體


安裝Membership Server於電腦上的軟體需求有:

Microsoft Windows NT Server 4.0版

Windows NT 4.0 Service Pack 3

Microsoft NT檔案系統(NTFS)

Microsoft Internet Explorer 4.01或更新版本

Windows NT 4.0 Option Pack22

Microsoft Site Server 3.0

當你執行Membership Server的自訂選項安裝,並從Knowledge選項中選擇 Personalization and Membership sub-option ,Membership Server與Membership目錄便會自動被建立。Membership Serve被稱為Intranet(Windows NT認證)Membership Server,並包含下列事項:

AUO

LDAP服務

Message Builder Service23

然而,這個Membership目錄使用Access資料庫。要使用SQL Server資料庫來建立Membership目錄資料庫,你需要建立一個新的Membership Server與一個新的Membership目錄。

將網站伺服端對應到Membership Server


要讓網站伺服器端或網站可以使用AUO來儲存session資料,你必須將伺服器對應到Membership Server實體。你可以對應一個或多個伺服端到單一Membership Server來存放並取用資料。然而,對於一個網站而言你只能擁有一個Membership Server。

在Membership Server上設定AUO


如前面所討論的,AUO可以存取多個資料來源並呈現一個虛擬結構供應用程式使用。如此讓應用程式可以與單一共通介面互相合作以存取使用者資料。


--------------------------------------------------------------------------------
注意
在大多數的情況中,Microsoft建議AUO應該只存取Membership目錄。


--------------------------------------------------------------------------------

要在網站中設定AUO,你需要:24
設定AUO供應者。(一個AUO供應者為AUO取得資料的資料來源。)

建立或選擇物件的類別來儲存session資料。該類別必須是Membership目錄所支援。例如,你可以使用由Site Server所提供的Membership類別。

設定AUO提供者


你可以設定一個或多個AUO來取得資料的來源。你可以指定下列工作以成為AUO提供者:

Membership目錄:你可以指定Membership目錄中的容器成為AUO提供者。提供者是Membership目錄的成員容器。

目錄服務:這些服務應該與LDAP、Novell Directory Service(NDS)、Netware 3.0(NWCOMP)、IIS或Windows NT的Active Directory Service等相容。

ODBC相容的資料庫:這些資料庫並不特別地安裝成Membership目錄,但是卻可以經過設定來儲存使用者資料。25

非ODBC資料庫:這些資料庫需要一個自訂的ADS提供者。

針對每一個AUO提供者,你需要設定下列選項:

設定提供者別名用來識別唯一AUO提供者。你只能使用字母與數字字元來當作提供者別名。

設定ADS路徑到資料容器指定提供者的型式、提供者的位置,以及一個位於目錄資訊樹狀結構的容器。這個容器包含了從提供者的而來的資料。Membership目錄的ADS路徑為LDAP://<servername:port>/o=<directoryname>/ou=members。

設定ADS路徑到結構類別物件,為提供者建立新的資料物件。對於Membership目錄,這個物件會藏匿在DIT的結構容器中,且其路徑為LDAP://<servername:port>/o= <directoryname>/ou=members。

設定ADS路徑的結尾部分指定將與AUO共同運作的物件。如果你指定使用者名稱作為結尾,AUO將以o=<directoryname>/ou=members/cn=user name的格式來尋找需要的使用者資訊。

除了設定一個AUO提供者,你還需要為儲存資料的物件建立類別。為此,你需要建立一個新的容器、新的類別及屬性。你將會在ASP網頁中使用容器、類別與屬性來存取session狀態物件。26
讓我們看看為FiveLakes網站設定AUO的範例。要完成這項工作,你必須執行以下任務:

在Membership目錄的根節點下建立一個名為 ou=SessionStateData 的容器。
在結構中建立一個型態為Integer,名為pageview的屬性。
建立一個名為SessionState,擁有屬性cn與objectclass的結構類別物件。
指定組織單元為父類別,這樣SessionState類別的實體就可以被建立。27
指定RDNAttribute的值為cn。
你必須為FiveLakes網站建立第二個AUO提供者。這個提供者的ADS路徑為<computername:LDAPport>/o=<directoryname>/ou=SessionStateData。

AUO提供者的結構路徑為<computername:LDAPport>/o=<directoryname>/ou=Admin /cn=Schema/cn=SessionState。

使用AUO來存取Session狀態資料


在這個部分,你將學習有關:

編輯ASP網頁來存取或儲存session狀態資料

搜尋Membership目錄的使用者資料28

編輯ASP網頁來存取或儲存Session資料


要存取或儲存session資料,你必須建立一個AUO的實體。你需要在任何你想儲存session資料的ASP網頁中加入程式碼。例如,你可以加入程式碼到應用程式的default.asp網頁,來為使用者將存取的預設網頁儲存session資料。

如果想要為使用者存取過的所有網頁儲存session資料,你可以建立一個小型的ASP檔案,內含程式負責在Membership目錄中使用AUO來儲存session狀態資料。然後你可以在應用程式的所有網頁中放入該檔案。

讓我們看看FiveLakes網站的default.asp網頁中負責儲存session狀態資料的程式碼。要建立AUO的實體,你必須建立一個UserObject的實體如下:

Set user = Server.CreateObject("Membership.UserObjects")
這段程式建立一個AUO,並利用目前使用網頁的使用者姓名對物件進行初步設定。你現在可以為固定的AUO提供者存取使用者的屬性。

至於動態的session資料,你必須使用動態的FiveLakes AUO提供者。你需要建立一個將儲存並取用資料的session物件。你也需要指定session的長度。在FiveLakes網站,AUO session狀態提供者的名稱為FiveLakesAUO,而session物件的類別則為SessionState。29
首先你將撰寫程式來檢查session物件是否已建立。如果沒有,你將使用下列程式碼建立物件:

If not IsArray(user("SessionState".objectclass) Then
User("SessionState").objectclass = Array("SessionState",
"dynamicobject")
end If
要為session指定其持續期間,你必須為物件指定time-to-live(TTL)的值。

User("SessionState").entryTTL = 600
一但你建立了session物件,你可以如同其他物件一樣為其屬性指定值並取用其屬性值。例如,你可以使用下面的程式來儲存使用者曾經使用過網頁的名稱到pagename屬性中。

User("SessionState").pagename = Request("SCRIPT_NAME")
要取得使用者曾經使用過的網頁名稱,你必須使用下列程式:30
pageAccessed = User("SessionState").pagename
你可以使用setInfo方法來確認更動,如下面程式所示:

user.setInfo
在Membership目錄中搜尋Session狀態資料


使用AUO,你可以為使用者或session屬性來搜尋Membership目錄的固定與動態資料。例如,你可以產生一個曾經登入網站或瀏覽過某網頁的所有使用者的列表。

在FiveLakes網站中,目前被使用網頁的名稱儲存在pagename屬性中。你可以使用ADO(Active Data Object)來查詢Membership目錄,並且產生一份使用目前網頁的使用者列表。

Set conMD = CreateObject("ADODB.Connection")
ConMD.Provider = "ADsDSOObject"
ConMD.Open "Ads Provider"
Querystring = "<LDAP://INSTRUCTOR:1003/o=FiveLakes/
ou=SessionStateData/>; (&(objectClass = SessionState)(currentPath="
& Request("SCRIPT_NAME") &"));ADsPath,cn;SubTree"
Set rs = conn.Execute( queryString, numRecords, 1 )
Do While Not rs.EOF
Response.Write rs("cn") & "<br>"
rs.MoveNext
Loop31
使用AUO及Membership目錄來儲存Session狀態資料所帶來的好處


session狀態資料是以動態資料的方式儲存於Membership目錄中。你可以設定AUO來為Membership目錄中的每一位使用者建立一個動態物件。該物件的屬性為session的屬性。 Membership目錄中的動態物件擁有一個TTL,在物件建立時被指定。一旦TTL到期,該動態物件會從Membership目錄中被移除。當使用者不再使用網站,並且已超過TTL的時間,這種情況就會發生。

當動態物件存在時,並有使用者瀏覽網站,該物件會更新且session會重新被建立。

使用動態物件的好處是你可以為實作於Web平台上的網站儲存使用者的session狀態資料。在Web平台上,使用者可能存取存放於不同伺服器的網頁。然而,全部網站的Membership目錄卻只有一個,且動態物件是存放於Membership目錄中。這樣做確保了每一次的session只有一個動態物件會被建立。

同樣地,即使使用者的要求被導引到不同的伺服器,使用者資料仍將維持。原因是所有網頁從Membership目錄中的動態物件取用資料,並且只將session資料寫入動態物件。

使用AUO提供了錯誤容忍。如果你使用Session物件來儲存session狀態資料,當網站伺服器當機時資料將遺失。然而,使用AUO來儲存session狀態資料於Membership目錄中,即使網站伺服器當機,資料還是會被保留。

實作10儲存Session狀態資料32


目標


在完成本實作之後,你將能夠:

安裝一個Membership Server並將之對應到網站伺服器。

為Membership Server設定AUO。

在您開始之前


先決條件


在開始實作之前,你必須具有:33
HTML與ASP scripting的基本知識。

熟悉Microsoft Internet Explorer與Microsoft Visual InterDev 6.0。

環境設定


在本實作中沒有額外的步驟需要設定。

4 預估完成所需時間:45分鐘

練習1:安裝Membership Server34


在這個練習中,你將為Ramona網站安裝一個Membership Server。該伺服器將使用SQL Server RamonaMD作為Membership目錄。

4 建立名為RamonaMD的SQL Server資料庫。

在 開始 選單上,指向 程式集35 ,然後選擇 Microsoft SQL Server 7.0 的 Enterprise Manager 。
在左邊的框格中,點選 SQL Server Group36 的「 + 」記號。
在左邊的框格中,點選<local server>的「 + 」記號。
在左邊的框格中,利用滑鼠右鍵點選37 Databases ,然後選擇 New Database 。
在 Newdatabase Properties -對話盒的38 Name 欄位,輸入『RamonaMD』,然後按下 確定 。
在左邊的框格中,點選 Databases 。39
在右邊的框格中,利用滑鼠右鍵點選 RamonaMD ,然後選擇 內容 。
在 RamonaMD Properties40 對話盒中,點選 Options 標籤頁。
選取 Truncate log on checkpoint 核取方塊,然後按下 確定41 。
關閉Enterprise Manager。
4 啟動MMC-based Administration

在 開始 選單中,指向42 程式集 ,然後選擇 Microsoft Site Server 的 Administration ,接著點選 Site Server Service Admin(MMC)43 。

4 建立Membership Server的實體

在左邊的框格中,點選 Personalization and Membership 的「+」記號。
利用滑鼠右鍵點選44 <localhost> ,選擇 新增 ,然後點選 Membership Server Instance 。
New Membership Server Wizard會啟動。點選45 下一步 。
建立Membership Server來儲存session資料。選取 Custom configuration 核取方塊,然後在Select Configuration Mode步驟中按下 下一步 。46
在Select Configuration Options步驟中,選擇元件安裝。選取 Active User Object(AUO) 與 LDAP Servic e核取方塊,然後按下 下一步 。47
在Select the Membership Directory步驟中,選取為Membership Server建立一個新的Membership目錄,然後點選 下一步 。
在Select the Authentication Mode步驟中,接受Membership Authentication的預設選項,然後點選 下一步 。
在Name the Membership Directory and Create Account步驟中,於48 Membership Directory name 欄位中輸入 RamonaMD 。
於 Password 欄位中輸入49 ramonaadmin ,然後點選 下一步 。
在Select the Database Type步驟中,選取 Microsoft SQL Database 核取方塊,然後點選50 下一步 。
在Type SQL Database Information步驟中,指定資料庫的位置。在 erver name 欄位中輸入『localhost』,並且在 Database name 欄位中輸入51 RamonaMD 。
在 SQL Server database user name 欄位中輸入『sa』,然後按下 下一步 。52
在Create Local LDAP Service步驟中,你需要為LDAP服務指定IP位址,與port號碼。接受預設值,然後點選 下一步 。
按下 完成 。
一個名為Membership Server #2的Membership Server會被建立。53
4 將Ramona網站對應至Membership Server

在 開始 選單上,指向 程式集 ,然後選擇54 Microsoft Site Server 的 Administration ,接著按下 Site Server Service Admin(HTML) 。
在Web Administration網頁中,點選55 Personalization and Membership 。
在左邊的框格中,點選 Web Site Mappings 。
在Web Site Mapping for <localhost>網頁,選擇 Default Web Site56 。
在 Map to 列表盒中,點選 Membership Server # 2 ,然後按下 Submit57 。
練習2:為網站設定AUO


假設你要在Ramona網站中儲存訂購的資訊。每當採購訂單產生時,你需要儲存訂單、訂購的書籍目錄與訂購數量等資料。

在這個練習中,你將為Ramona網站建立並設定AUO來儲存每一個session需要的資料。

4 建立容器來儲存採購行為

在Site Server控制台的左邊框格中,利用滑鼠右鍵點選58 Membership Directory Manager ,選擇 新增 ,然後按下 Container 。
會出現New Container Wizard。點選59 下一步 。
輸入『orderbehavor』作為容器的名字,然後點選 完成 。
4 為AUO建立屬性60

在左邊的框格中,雙擊 Microsoft Directory Manager 。
在左邊的框格中,雙擊 ou=Admin 。
在左邊的框格中,利用滑鼠右鍵點選61 cn=Schema ,選擇 New ,然後按下 Attribute 。
會出現New Attribute Wizard。點選62 下一步 。
在Type the Name of the New Attribute步驟中,於 Name field and Date of Order in the Display name 欄位中輸入 datefolder ,然後按下63 下一步 。
在Select the Attribute Syntax步驟中,選擇 Date/Time ,然後按下 完成 。64
重複步驟3-6建立 bookcategory 與 orderquantity 屬性。 bookcategory 的屬性型態為65 String ,而 orderquantity 的屬性則為 Integer 。
466 建立purchaseorder類別

在左邊的框格中,利用滑鼠右鍵點選 cn=Schema ,選擇 New 然後點選 Class67 。
會出現New Class Wizard。點選 下一步 。
在Type the Name of the New Class步驟中,指定 purchaseorder 為名稱並顯示類別的名稱,然後點選68 下一步 。
在Add Parent Classes步驟中,點選 Remove 移動組織使成為父節點之一,然後按下 下一步 。69
在Select the Attributes for the Class步驟中,點選 Add 。
在 Add Attribute 對話盒中,選擇 Date of Orde70 r屬性,然後按下 OK 。
重複步驟5與6以便加入 bookcategory 與 orderquantity71 屬性到類別中。
點選bookcategory屬性旁邊的方塊。
在 Naming attribute 列表盒中選擇 bookcategory ,然後按下72 完成 。
4 為Membership #2配置第二個AUO提供者

在左邊的框格中,利用滑鼠右鍵點選 Membership Server #2 ,然後選擇73 Properties 。
在 Membership Server #2 Properties 對話盒中,點選 Active User Object (AUO) Providers 標籤頁。74
點選 Add 。
會出現 Active User Object (AUO) Provider Properties 對話盒。在特定的欄位中輸入以下的資訊。

AUO alias:
RamonaAUO
Build Activer Directory Services (ADS) Path:
<localhost>:LDAPportnumber/o=RamonaMD/ou=members
(where the default value of LDAPportnumber is 1003)
Schema path: <localhost>:LDAPportnumber/o=RamonaMD/
ou=Admin/
cn=Schema/cn=
purchaseorder75
按下 OK 。
按下 OK 。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:13 PM   #12 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

讓網站處理信用卡


在這個部分,你將注意:

處理信用卡的需求。

處理信用卡中的各個階段。

讓我們先看看在電子商務網站上接受信用卡付款所需要的元件。2
信用卡處理的需求


要讓網站能夠處理信用卡,你需要:

網站核可的商業帳戶

付款處理軟體

安全的訂購表單

網站核可的商業帳戶


商業帳戶為網站上負責接收並持有相關企業交易資金的帳戶。網站核可的商業帳戶類似你在郵購或零售商店中擁有的帳戶,但它並不需要信用卡的實體存在。當客戶購物並使用信用卡付款時,資金會自動由客戶的信用卡帳戶中傳送到你的商業帳戶中。3
銀行或金融組織將會為你開啟一個商業帳戶。取得商業帳戶是當你決定在網站上進行交易時所需執行的第一個步驟。理想的情況下,為了網站核可的商業帳戶,你應該向你現有貸款帳戶或抵押帳戶所在的銀行申請。如果你在銀行中已經擁有帳戶超過兩年,它將會幫助你申請。根據每家銀行的規定,你可能需要提供銀行財務證明、稅務文件影本,可能的話還包括存款。

你也需要告知銀行你在這個帳戶期望的訂貨量大小與平均的月交易量。某些銀行可能要求你在帳戶中維持某些資金當作詐欺或償還的保險。

另一種直接向銀行申請的方法是與專門為企業取得商業帳戶的獨立服務組織接觸。這類的組織將會代表你向銀行或金融機構申請並為你取得網站核可商業帳戶。你將必須遵守銀行的需求並根據組織的服務來付款。某些組織可能透過它們的帳戶執行你的交易。在這類例子中,你將依賴服務公司並遵守銀行的所有需求。如果該服務公司不再處理信用卡,則你必須從無到有申請一個網站核可商業帳戶。

當你申請網站核可的商業帳戶時,你必須指定你計畫販售的產品或服務,銀行需要確認產品或服務以開始販售。

當你取得一個網站核可的商業帳戶,你將得到一個商業帳號與終端帳號。

網站核可商業帳戶的成本


網站核可商業帳戶包含了某些成本。這些成本包括有:4
應用程式費用

折扣比率

往來費用

每月費用

儲備金成本

當你申請商業帳戶,你必須付出某些款項。大多數的銀行會收取無償還的應用程式費用,意指當銀行不再承認你的應用程式,你將無法獲得任何賠償。

折扣比率是銀行為你管理商業交易而向你收取在總交易量中所佔的比率費用。折扣比率依據訂單的大小與每月交易的總量來決定,如同回扣費用比率一樣。5
往來費用是你的銀行支付給客戶的銀行來將資金從客戶的帳戶轉帳到你的帳戶工作所需的費用。總數取決於傳送的金額。你將為每一筆交易付出費用給銀行。一般來說,這筆費用是折扣比率的一部份。

你也需要為使用商業帳戶而付給銀行一筆固定的月費。你可能會有一個最低交易總量,如果每月的折扣數量不超過最小值,將只收取的固定費用。

最後,你需要為任何有異議的款項付費給銀行。這代表除了為遺失貨物或運費付款,你還需要付給銀行回扣。

你在銀行或金融機構的選擇上取決於商業帳戶每月的成本以及預估的商業收入。同時也取決於銀行所支援的信用卡種類。理想的情況下,銀行應該要能夠服務所有主要的信用卡如MasterCard、Visa、American Express與Discover等。

付款處理軟體


一但你擁有商業帳戶,你需要一個可以讓資金從客戶的信用卡帳號中轉移到你的商業帳戶的機制。這樣的過程是透過付款處理軟體來完成。這樣的軟體會與你的網站、客戶的信用卡帳號,以及提供你商業帳戶的金融機構互相搭配。

當客戶發出訂單,付款處理軟體會執行下列工作:6
接收由客戶所輸入的信用卡詳細資料。
與負責接收的金融機構進行接觸。該機構則負責與客戶的信用卡發卡銀行接觸,進行驗證工作。
負責接收的金融機構會檢查信用卡戶頭是否有足夠的資金可以為購買的東西付款。
傳送一份有關交易的確認給商業帳戶的銀行。
現在讓我們看看付款處理軟體必須擁有的特性:

它必須是符合經濟效益的。

它必須是安全的。7

它必須是容易在你的網站上實施的。

成本是你選擇付款處理軟體時最主要的考量。使用付款處理軟體的成本包括了開發與實作成本、維護成本,以及每一筆交易所帶來的成本。

當客戶發出他或她的信用卡明細,這些資訊應該在安全的連結上傳輸以進行驗證工作。信用卡的明細是由付款處理軟體進行驗證,而且如果明細是正確的,付款處理軟體會將這份資訊傳送給你的銀行,銀行會與客戶的銀行進行接洽以確認資金的轉移。付款處理軟體負責所有的資料傳輸,因而必須提供資料的安全性考量。


--------------------------------------------------------------------------------
注意
你將在本章的後半部學習更多有關網際網路安全性上的需求與技術。


--------------------------------------------------------------------------------

你應該要能夠快速地將付款處理軟體整合到你的應用程式中,並且不需花費太多的成本。開發時間與使用付款處理軟體所需費的工夫應該愈低愈好。

在網站上實作信用卡處理系統最好方法是使用提供off-the-shelf付款處理軟體企業所提供的服務。

選擇信用卡付款處理軟體考量的因素8


你可以避免所有開發軟體上的困擾而改為使用線上可取得的套裝軟體。要使用這類的軟體,你需要向提供付款處理軟體的企業進行註冊。你的商業銀行將為軟體及交易處理付出費用。不同的企業有不同的交易處理收費標準。有些企業是以每一次的交易處理為基準,而有些企業則以為你處理的交易數量來進行收費。例如,你可能需要為1到100筆的交易付出特定的費用,101到300筆交易則是另一種費用。

其他幫助你選擇付款處理軟體的考量包括有:

支援多種信用卡

付款處理軟體應該要能夠支援所有你的網站能夠接受的信用卡。
與銀行或金融機構間的關係

提供付款處理軟體的企業與你的銀行必須和你共同合作以提供最佳的服務。許多付款處理軟體的企業幫助你從銀行獲得商業帳戶。
在電子商務網站上實施的簡易性9

你應該要能夠輕易地將付款處理軟體整合到你的網站中。對你而言,應該只需要做些微的維護工作。如果軟體有任何的更新或升級,你應該要能以最低的成本來完成這些工作。
擴充性

付款處理軟體應該能夠處理漸增的網站流量與處理負荷。
交易紀錄

交易必須紀錄在你可以存取的資料庫中。這樣將使你可以分析交易並使用資料來進行錯誤更正。
付款證明

當資金已經轉移到你的商業帳戶時,付款處理軟體應該產生可以傳送給客戶的付款證明。10較受歡迎的付款處理軟體企業有CyberCash、Authorize.net,以及PCAuthorize。

安全的訂購表單


客戶對於電子商務網站的安全性與信賴度感到相當憂慮。這是他們擔心信用卡號碼被偷竊並盜用的天性使然。要解決這個問題,你需要:

讓網站上經過認證的客戶感到安心。

實作傳輸重要資料給付款處理軟體的安全方法。

實作允許客戶為他們訂購的物品透過安全介面來付款的系統。

讓網站上經過認證的客戶感到安心11


你可以讓客戶相信,在你的網站上透過網站的設計與實作適當的安全評估,來保證他們信用卡的詳細資料是安全無慮的。

你的網站應該設計成方便且易於使用。下面是一些你在設計網站時應該遵守的方針:

客戶應該能夠在最少的滑鼠點選次數內發送出訂單。

按鍵應該標示清楚。執行任何任務的結果應該清楚地標示。例如,當客戶點選 Order Now 按鍵,他應該知道信用卡處理程序已經開始。

一但訂單完成,應該提供客戶再確認的資訊。你可以顯示內含訂單號碼、訂單明細、聯絡人名稱、電話號碼,與可供查詢的電子郵件地址等資訊的訂單確認網頁。12

你的企業名稱與地址應該清楚地顯示在網站上。

除了這些評估方式,你可以加入網際網路消費者保護群組的任一公司並在你的網站上展示該公司的標誌。你也可以顯示信用卡安全性的相關資訊,以及如何實作。

在網站上實作安全評估


企業的成長取決於企業的安全性以及客戶在線上發送付款明細時感覺的安全程度。基於安全考量,你需要保護伺服器、驗證網站,以及對所有會提供重要資料給網站的各類使用者進行驗證。為此,你需要:

包含公用鑰匙的數位證書。

輸重要資料的安全機制。

讓我們詳細地看看這些需求。13
數位證書與公鑰


數位證書是一個內含有關擁有人與發行認證權限等相關資訊的文字檔。它同時也包含用來驗明認證權限加密過的資訊。數位證書和公鑰加密技術會一起在網站上使用。

公鑰加密技術是一個使用兩組鑰匙進行加密與解密的密碼系統。這兩組鑰匙分別是:

公鑰,會散佈到所有需要傳送資料到你網站的使用者手中。

私鑰,由你負責保存並安裝在伺服器上。

擁有公鑰的網站客戶可以要求鑰匙的驗證擔保憑據。

現在讓我們討論數位證書與公鑰如何能夠確保安全的資料傳輸。假設有一個想要在你網站上傳送信用卡明細的客戶,他首先會獲得數位證書並透過驗證權限對該證書進行認證的步驟。如果認證是正確的,資料會使用公鑰進行加密,並傳送到你的網站。你會產生一組公鑰/私鑰組並將公鑰送出以供驗證權限。驗證權限會將公鑰放入數位簽名中。當你接收到資料,你可以使用私鑰對資料進行解密。如果資料在傳輸的過程遭到中斷,資料將無法進行解密,因為用來解密的鑰匙除了你的網站之外,其他地方並沒有。14
要實作這項功能,你需要取得數位證書並將之安裝在你的網站上。你可以將驗證權限之一加入數位簽名之中。一些廣為人知的確認證明包括有VeriSign、CyberTrust與GTE。你需要為數位簽證付費。金額隨確認證明的不同與你想獲得驗證資料的形式而定。

如同商業帳戶,數位簽證的獲得需要耗費時間。你應該在一開始開發商務網站時,就進行數位簽證的申請。

用來傳輸重要資料的安全機制


為了確保伺服器與連結是安全的,並防止未經核可的取用,你可以使用:

Secure Socket Layer(SSL)協定。

ecure Electronic Transaction(SET)協定。

讓我們來看看這些協定如何保護你的網站與資料傳輸。15
Secure Socket Layer(SSL)是一個以協定(如HTTP、FTP與NNTP等)對交易進行加密動作的規則。你可以在你的網站使用SSL與數位簽證。當你使用SSL來傳輸資料時:

資料會被加密。

在來源與目標伺服器中會建立安全連結。

伺服器端的驗證會被啟動。

SSL同時也提供了驗證客戶端身份的選擇性功能。

在信用卡的處理程序上,你應該將訂購表單放置在一個有SSL功能的伺服器上。對於需要SSL來傳送資料的網頁其URL位址的起始部分變為「https」而不是「http」。

想取得更多有關SSL的資訊,請到16 http://msdn.microsoft.com/workshop/server/iis/websec.asp 上查看。

安全的電子化傳輸(SET)是一個由Microsoft、Netscape、MasterCard與Visa等聯合設計的開放式標準,用來在網際網路上處理信用卡交易。SET使用了複雜的驗證授權方式負責驗證交易中每個實體是否為正確的結合。這些實體包括了客戶、客戶的信用卡發行銀行、你和你的商業帳戶發行單位等。SET以這種方式區分交易並保持每一個實體只知道交易中的相關部分。例如,零售商只會知道訂購的物品、帳款總額,以及是否已付款等。而零售商對於客戶端採用的付款方式仍是一無所知。同樣地,客戶的信用卡發行銀行也將清楚地知道應收帳款總計是多少,但它並不會知道客戶購買了哪些商品。

下面是一些確保你網站安全的額外技巧:

如果你需要儲存網站客戶的信用卡詳細資料,你應該將資訊以加密資料的方式儲存在資料庫中。

你可以使用防火牆。防火牆是一種保護組織網路免於受到外部的通訊系統,如網際網路等侵入的機制。它實作的方式是利用一台擁有兩張網路卡和一套特殊防火牆軟體的電腦來進行實作。一張卡連接到組織的LAN,另一張則連結到網際網路。所有在這兩種網路中傳遞的資訊都必須透過這些障礙。防火牆軟體會分析通過電腦的每一個資訊封包,根據組織所訂定的規則來決定接受或拒絕該資訊封包。

你應該持續更新安全工具與技術。為此,你可以使用位於Microsoft Security Notification server (17 http://www.microsoft.com/technet/security/default.asp )或位於Microsoft Security Advisor Webside( http://www.microsoft.com/security/default.asp )所公佈的安全性公告。

實作允許客戶為訂購產品付款的安全介面


你可以使用目前可以獲得的電子錢包(wallet)服務的任何一種來實作一次購物經驗。這些服務允許客戶儲存他們個人的詳細資料於安全的地方。當客戶瀏覽電子商務網站並購買商品,購買或採購訂單的連結幫助你直接從中央伺服器上接收客戶的詳細資料。這類服務的範例是Microsoft Passport。你將在本章中學到更多有關Microsoft Passport的相關資訊。

信用卡處理中的各個階段18


付款處理軟體對客戶與網站擁有者來說應該是要透明的。你應該要能夠藉著加入適當的程式到訂購表單中來使用套裝軟體。在將軟體合併到你的網站之前,你需要決定是否處理並顯示即時的資料,或在線上處理信用卡。當你販售線上資訊與軟體或顯示經過認證的網頁時,你將需要處理即時資料的能力。

信用卡處理程序包括三個程序:

授權
擷取
償還
其詳述如下:

1 授權階段19


當付款處理軟體接收到信用卡明細準備處理時,授權階段開始。在這個階段中,付款處理軟體將執行下列工作:

確認信用卡明細。
檢查該帳戶是否有足夠的資金可以為訂購的產品付款。
同時,在付款時信用卡會受到掌握,直到物品順利地送到客戶手中。

在授權階段與擷取階段之間,零售商必須履行訂單並運送物品給客戶。如果在授權階段結束前物品並未運送到客戶手中,你必須重新授權。這將代表額外的交易費用。

2 擷取階段


當廠商運送商品並寄出一份擷取要求時,擷取階段開始。在這個階段中,銀行會評估授權資料並將資金由客戶的銀行轉移到廠商的帳號中。20
對於可以即時存取的線上服務、驗證過的網頁,或可下載的軟體,其授權階段與擷取階段會在同時間發生。

如果訂單是由多種物品組成,且其中只有少數項目已經送交,你可以只針對已完成運送的物品送出擷取要求。這樣的結果是,帳單中一部份的金額會轉移到廠商的帳號。你可能需要重新授權剩下還未送出貨品的金額以進行付款工作。這代表額外的成本。

3 償還階段


客戶可能會取消交易,或退回已經收到的商品。在這種情況下,你需要償還訂單的費用。償還是擷取階段的相反。在這個階段中,你會提供授權號碼以及償還的數量。要回應償還的要求,處理器會將已經轉移到廠商帳號的資金轉回客戶的帳號。

實作信用卡處理程式


在這個部份,你將看到:

在Site Server Commerce 3.0版所產生的在網站上實作信用卡處理程序。21

在你的網站上實作Microsoft Passport。

為信用卡處理程序與Site Server Commerce Edition 3.0進行整合


要將信用卡處理程序與Site Server Commerce 3.0版整合在一起,你必須執行下列工作:

使用負責處理信用卡訂單的管線元件。
建立管線設定檔將元件結合到管線的步驟中。
如果你是與付款程序處理公司合作,該公司將提供你外掛到Microsoft商務管線中所需要的軟體元件。例如,CyberSource軟體提供了Commerce物件,你可以輕易地將它外掛到Microsoft商務管線中,使它成為Site Server電子商務架構的一部份。

你可以使用Microsoft Commerce Pipeline Editor將元件加入管線中。這個編輯工具同時允許你建立對應到元件中不同步驟的設定檔。管線物件會在管線執行之前載入這個檔案。22
一般來說,你將在付款階段中把付款處理軟體元件加入採購管線。同樣地,你需要為使用mscsorderform物件作為輸入的授權、擷取與償還等撰寫程式來進行處理。

現在,讓我們看看用來授權的程式碼。在下面的程式碼中,我們將加入購買者與信用卡資訊到訂購表單中並執行元件與授權管線(auth.pcf)。

<%
Function Authorization(mscsOrderForm)
Dim mscsPipeContext, errorLevel
'Set pipe context
mscsPipeContext("Language") = Request.Form("country")
mscsOrderForm.Value("cc_name") =
Request.Form("creditc_name")
mscsOrderForm.Value("cc_type") =
Request.Form("creditc_type")
mscsOrderForm.Value("_cc_number") =
Request.Form("creditc_number")
mscsOrderForm.Value("_cc_expmonth") =
Request.Form("creditc_expmonth")
mscsOrderForm.Value("_cc_expyear") =
Request.Form("creditc_expyear")
mscsOrderForm.Value("bill_name") =
Request.Form("bill_name")
mscsOrderForm.Value("bill_phone") =
Request.Form("bill_phone")
mscsOrderForm.Value("bill_street") =
Request.Form("bill_street")
mscsOrderForm.Value("bill_city") =
Request.Form("bill_city")
mscsOrderForm.Value("bill_state") =
Request.Form("bill_state")
mscsOrderForm.Value("bill_zip") = Request.Form("bill_zip")
mscsOrderForm.Value("bill_country") =
Request.Form("bill_country")
mscsOrderForm.Value("bill_country") =
Request.Form("first_name")
mscsOrderForm.Value("_shopper_first_name") =
Request.Form("last_name")
mscsOrderForm.Value("_shopper_email") =
Request.Form("email")
mscsOrderForm.Value("_shopper_phone") =
Request.Form("phone")
mscsOrderForm.Value("_shopper_street") =
Request.Form("street1")
mscsOrderForm.Value("_shopper_city") = Request.Form("city")
mscsOrderForm.Value("_shopper_state") =
Request.Form("state")
mscsOrderForm.Value("_shopper_zip") = Request.Form("zip")
mscsOrderForm.Value("_shopper_country") =
Request.Form("country")
mscsOrderForm.Value("__total_total") =
Request.Form("total_Amount")
'Create a pipeline object and load a configuration file
set pipeline = Server.CreateObject("Commerce.MtsPipeline")
'Set pipeline configuration and log files
Call
pipeline.LoadPipe(d:\inetpub\wwwroot\fivelakes\config\auth.pcf)
Call pipeline.SetLogFile("c:\temp\flpipeline.log")
'Run the pipeline for authorization
errorlevel=pipeline.Execute(1,mscsOrderForm,pipeContext,0)
' Depending on the result you may run this process again
Authorization = errorLevel
end function
%>
下面的函式使用了orderform與order_number當作輸入並執行擷取的動作。order_number為這個階段所要求的驗證號碼。

<%
Function Capture( mscsOrderForm )
Dim mscsPipeContext,errorLevel
mscsOrderForm.Value("_total_total") =
Request.Form("amount_capture")
mscsOrderForm.Value("_shopper_bill_orderno") = "Your order
number"
mscsOrderForm.Value("_shopper_first_name") =
Request.Form("first_name")
mscsOrderForm.Value("_shopper_last_name") =
Request.Form("last_name")
mscsOrderForm.Value("_shopper_email") =
Request.Form("email")
mscsOrderForm.Value("_shopper_phone") =
Request.Form("phone")
mscsOrderForm.Value("_shopper_street") =
Request.Form("street1")
mscsOrderForm.Value("_shopper_city ") =Request.Form("city")
mscsOrderForm.Value("_shopper_state") =
Request.Form("state")
mscsOrderForm.Value("_shopper_zip") = Request.Form("zip")
mscsOrderForm.Value("_shopper_country ") =
Request.Form("country")
'Set pipe context
mscsPipeContext("Language") = Request.Form("usa")
'Create a pipeline object and load a configuration file
set pipeline = Server.CreateObject("Commerce.MtsPipeline")
'Set pipeline configuration and log files
Call
pipeline.LoadPipe(d:\inetpub\wwwroot\fivelakes\config\capture.pcf)
Call pipeline.SetLogFile("c:\temp\flpipeline.log")
'Run pipeline for capture
errorLevel = pipeline.Execute(1, mscsOrderForm,
pipeContext, 0)
'Depending on the result you may run this process again
Capture = errorLevel
End Function
%>
償還處理程序同時也利用orderform物件當作輸入。你將加入購買者與認證授權的詳細資料並執行該元件,如下面程式碼所示:

<%
Function Refund( mscsOrderForm )
Dim mscaPipeContext,errorLevel
mscsOrderForm.Value("_total_total")
Request.Form("amount_refund")
mscsOrderForm.Value("_shopper_bill_orderno") = "Your order
number"
mscsOrderForm.Value("_shopper_first_name "
Request.Form("first_name")
mscsOrderForm.Value("_shopper_last_name") =
Request.Form("last_name")
mscsOrderForm.Value("_shopper_email") =
Request.Form("email")
mscsOrderForm.Value("_shopper_phone") =
Request.Form("phone")
mscsOrderForm.Value("_shopper_street") =
Request.Form("street1")
mscsOrderForm.Value("_shopper_city") = Request.Form("city")
mscsOrderForm.Value("_shopper_state") =
Request.Form("state")
mscsOrderForm.Value("_shopper_zip") = Request.Form("zip")
mscsOrderForm.Value("_shopper_country") =
Request.Form("country")
'Set pipe context
mscsPipeContext("Language") = Request.Form("usa")
'Create a pipeline object and load a configuration file
set pipeline = Server.CreateObject("Commerce.MtsPipeline")
'Set pipeline configuration and log files
Call
pipeline.LoadPipe(d:
\inetpub\wwwroot\fivelakes\config\refund.pcf)
Call popeline.SetLogFile("c:\temp\flpipeline_log")
'Run pipeline for refund
errorLevel = pipeline.Execute(1, mscsOrderForm,
pipeContext, 0)
'Depending on the result you may run this process again
Refund = errorLevel
End Function
%>23
使用Microsoft Passport


根據網際網路上購買行為的研究指出,當被要求填寫內含詢問信用卡號碼與個人詳細資料的表單時,客戶會放棄進行交易。因此你可以在網站上使用Microsoft Passport來解決這個問題。

什麼是Microsoft Passport?


Microsoft Passport是由Microsoft所提供的兩種服務組合而成的:

Single Sign-In (SSI)服務能夠使用單一名字與密碼登入大部分的網站。

Wallet服務幫助客戶在離線的狀況下能夠快速地購買商品與服務。

其分別詳述如下。24
SSI服務


Microsoft Passport讓客戶可以使用相同的登入名稱與密碼來瀏覽所有參與Passport的網站。他們只需指定一次個人的詳細資料。Microsoft Passport的成員會被賦予一個唯一的Passport ID,與該成員而非電腦結合在一起。因此,成員們可以使用任何的電腦來瀏覽所有加盟的網站。

SSI同時也讓你可以根據客戶的Passport ID,提供客戶個人化的網站瀏覽經驗。

Wallet服務


Passport wallet儲存了成員們的信用卡號碼、帳單及送貨地址。這些資訊只有在Passport成員網站要求時,而且該網站必須經過Microsoft認證為Passport零售商時,才會與那些參與Passport的網站共同分享。

Passport wallet服務是高度安全的,因為它使用標準HTTP與SSL將表單資料「傳送」到網站。 同時,客戶並不需要安裝任何的客戶端軟體,因為Microsoft Passport是以伺服器為基礎的。

Microsoft Passport的優點25


如果你在網站上使用Microsoft Passport,你將能夠達成:

增加銷售與註冊。

客源的增加並且加深客戶對網站的印象。

客戶將不用屢次輸入他們個人的詳細資料。他們會從參與Microsoft Passport網站的瀏覽與購買中對其作出使用的方便性與安全性等評價。

對網站的消費者而言,Microsoft Passport是:

容易使用的

Microsoft Passport讓客戶能夠使用單一名稱與密碼來登入網站並取得網站提供的服務。他們可以只藉由滑鼠點選一次來登入其他參與的網站。26
快速的

Microsoft Passport提供客戶一個電子錢包讓客戶可以明確地描述自己的相關資訊。這些資訊包含個人與信用卡的詳細資料。藉著使用他們個人檔案的資訊與電子錢包,客戶能夠快速地進行線上訂購,而不用大費周章地輸入資料。
安全的

個人檔案與電子錢包資訊都是以加密的方式儲存,並且由嚴格的隱私策略進行保護。同時,一旦客戶登出網站,個人資訊會由電腦上被刪除。因此當客戶在共享或公用電腦上使用Microsoft Passport時,可以感到放心。
如何在網站上實作Microsoft Passport


要在你的網站上實作Microsoft Passport的SSI與wallet服務,你必須先註冊你的網站。

下面介紹的是在網站上實作單一登入服務時,軟體與硬體的需求:27
硬體需求


擁有Pentium處理器的x86電腦

64MB RAM

CD-ROM

擁有唯一IP位址的網路卡

軟體需求


Windows 2000與IIS 5.0;Windows NT 4.0與Service Pack 3.0或更新版本,以及IIS 4.0,與IE 4.0或更新版本28

SSL證明

在網站上實作單一登入服務


要在網站上實作單一登入服務,你必須安裝Passport Manager,該軟體可以在Passport single sign in SDK中取得。然後你可以藉著加入伺服端script與UI元素到網站中,來對網站進行開發與測試等工作。

你需要撰寫程式來收集客戶的資訊,並且在客戶登出時刪除cookies。

下面的程式將在登出時刪除與Passport相關的cookies。你需要將這段程式寫入一個名為logoutgif.asp的檔案中。

<%
'Avoid browser's cache
Response.Expires=-1
Response.AddHeadr "Cache-Control ", "no-cache"
Response.AddHeader "Pragma", "no-cache"
'Deleting the two Microsoft Passport server cookies
Response.Cookies("MicrosoftPProf") = ""
Response.Cookies("MicrosoftPAuth") = ""
'Cookies are expired immediately
Response.Cookies("MicrosoftPProf").Expires = #Jan 1,1998#
Response.Cookies("MicrosoftPAuth").Expires = #Jan 1,1998#
'Removing cookies related to the Ramona site
Response.Cookies("Ramona") = ""
Response.Cookies("Ramona").Expires = #Jan 1,1998#
%>
<!-Sign-out page will show this image next to your site name
<!-#include file="signoutcheckmark.gif"->
影像檔signoutcheckmark.gif應該被放置在與logoutgif.asp相同的目錄中,如此登出的影像會顯示在Microsoft Passport server的登出網頁上。這樣的動作會在使用者登出網頁時提供使用者確認訊息。29
在網站上實作Passport wallet服務


要實作Passport wallet服務,你需要放置一個加上商標的Passport Express Purchase按鈕、Passport Wallet按鈕,或是wallet的文字連結到網站的訂單網頁。這些連結將使你能夠取得客戶的wallet詳細資料,和POSTed以當作SSL連結上的表單。你接著需要加入ASP script來接收網站所收到的POSTed資訊。

除了這些強制的步驟外,你可以:

使用文字與圖形來繪製你的網頁。

自訂化網頁。

使用CSS指定字型與背景顏色。

實作11:信用卡處理程序30


目標


在完成本實作之後,你將能夠:

在網站上實作Microsoft Passport。

在您開始之前


先決條件


在你開始進行實作之前,你必須具有:

HTML與ASP scripting的基本知識。31

熟悉Microsoft Internet Explorer與Microsoft Visual InterDev 6.0。

Internet Access。

環境設定


要完成本實作,首先你必須從<install folder>\Labs\Lab11\Ramona\StartCode將檔案複製到\\InetPub\wwwroot\Ramona目錄中。

4 預估完成所需時間:30分鐘

練習1:為網站實作Microsoft Passport32


在這個練習中,你將讓Remona網站能夠使用Microsoft Passport所提供的服務。

4 在你的網站上安裝Microsoft Passport

從網站 http://www.Passport.com/business/sdk.asp 中下載passport_sdk_v1_1.exe檔案到C:\TEMP目錄中。要讓下載能夠順利進行,你必須先登入成為Microsoft Passport的成員。
使用Windows檔案總管,瀏覽至C:\TEMP。33
雙擊 passport_sdk_v1_1.exe 將檔案解壓縮。
指定C:\Temp為檔案解壓縮所在的目錄。
在C:\Temp目錄中雙擊 Setup.exe 。34
安裝程式會執行。
輸入序號並點選 下一步 。該序號會顯示在下載passport_sdk_v1_1.exe檔案所在的網頁中。
在 Choose Destination Location 對話盒中,點選35 下一步 接受預設安裝的位置。
在 Setup Type 對話盒中,選擇 Custom 並按下36 下一步 。
在 Select Components 對話盒中,接受預設值並按下 下一步 。37
在 Select Program Folder 對話盒中,接受預設選項,並按下 下一步 。
選取 Default Web Site38 並點選 下一步 。安裝程式會中斷World Wide Web Publishing服務、安裝檔案、註冊DLL,然後重新啟動World Wide Web Publishing服務。
安裝程式會提示你重新啟動電腦。點選 完成 來重新啟動電腦。
439 在Ramona網站實作Microsoft Passport

啟動Windows檔案總管並瀏覽至\\inetpub\wwwroot\Ramona目錄中。
要將MS Passport的特性加入網站中,請先開啟payment.asp。要完成這項工作,利用滑鼠右鍵點選 payment.asp 並按下 編輯 與40 開啟檔案 。
藉著在網頁的頂端輸入下面程式碼來透過payment.asp網頁使用瀏覽器的cookies:

<%
'Avoid browser caching of page
Response.Expires = 0
Response.AddHeader "Cache-Control", "no-cache"

Response.AddHeader "Pragma", "no-cache"
%>
藉由輸入下面程式碼於步驟3程式之後,你可以建立Passport Manager物件的實體:

<%
Dim oPassMgrObj
Set oPassMgrObj = Server.CreateObject ("Passport.Manager.1")
%>
輸入下面程式碼於步驟4中輸入的程式後面,來設定Passport Manager物件的參數:41

<%
Dim ThisPageURL, TimeWindow, ForceLogin
Dim CoBrandArgs, LangID, Secure
ThisPageURL = "http://" & Request.ServerVariables ("SERVER_NAME")
ThisPageURL = ThisPageURL & Request.ServerVariables ("SCRIPT_NAME")
TimeWindow=600 'In seconds, 10 minutes
ForceLogin=False 'Not forcing user to type information to refresh
cookie
CoBrandArgs=False 'Not passing co-branding args
LangID=1033 'Default, English
' Check if over SSL using Request object server variable
If Request.ServerVariables ("HTTPS") = "on" Then
Secure = TRUE
Else
Secure = FALSE
End If
%>
藉著輸入下面程式碼於網頁的開頭部份,來顯示Passport登入以及Passport使用者介面:

<% = oPassMgrObj.LogoTag (Server.URLEncode (ThisPageURL), _
TimeWindow, ForceLogin, CoBrandArgs, LangId, Secure) %>
儲存payment.asp網頁。
4 在Site Server MMC中重新整理網站

點選工作列中的42 開始選 單,指向 程式集 ,然後選擇 Microsoft Site Server 。
指向43 Administration 並點選 Site Server Service Admin(MMC) 。
點選Commerce Host Administration的「+」符號。
利用滑鼠右鍵點選位於Commerce Host Administration下面的 <localhost>44 ,然後指向 All Task ,然後選擇 Reload All Commerce Site 。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
舊 2004-06-21, 02:14 PM   #13 (permalink)
註冊會員
 
mic64 的頭像
榮譽勳章
UID - 582
在線等級: 級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時級別:16 | 在線時長:330小時 | 升級還需:27小時
註冊日期: 2002-12-06
VIP期限: 2007-04
住址: MIB總部
文章: 412
精華: 0
現金: 499 金幣
資產: 499 金幣
預設

更改網站目錄


一般來說,你會在測試的伺服器上建立網站。當您欲開始運作網站時,您需要將網站移到不同的位置。這個位置可以是不同的伺服器,或相同伺服器上的不同目錄。同樣地,你可能會想要在它所屬的網域中執行該網站。

因為上述這些原因,你必須將網站移到不同的目錄。要完成這項工作,你必須執行下列工作:

為網站建立一個新的目錄。
以新目錄為基礎,為網站建立一個新網站。
為新網站建立基礎部分。
將檔案從目前的網站複製到新目錄下,覆蓋新目錄下的重複檔案。3
關閉舊網站並開始執行新網站。
修改網站所使用的管線設定檔。
電子商務網站包括了管線元件。管線元件可能包含使用外部script的Scriptor元件。如果你改變網站的目錄,你必須編輯script檔來為新目錄中的script指定正確的路徑。

這裡有一個FiveLakes網站的script檔案範例。該script檔已經被移到目錄d:\newfivelakes\ ewfivelakes\。傳輸管線設定檔的位置也已經完成更改。

<%
Function mscsexecute(config, orderform, context, flags)
mscsexecute = 1
Dim mscsMtsTxPipeline
Set mscsMtsTxPipeline = CreateObject("Commerce.MtsTxPipeline")
call
mscsMtsTxPipeline.loadpipe("d:
\newfivelakes\newfivelakes\config\transmit.pcf")
Dim TransportDictionary
Set TransportDictionary = CreateObject("Commerce.Dictionary")
Set TransportDictionary.object = orderform
TransportDictionary.Receipt_requested = "yes"
errorlevel = mscsMtsTxPipeline.Execute(1, TransportDictionary,
context, 0)
End Function
%>
修改產品屬性與變數


在電子商務網站中,資料庫的結構包含了所謂的產品。產品可以是特定物品或是一組關係密切的物品。產品擁有屬性,其值可能是單一數值或多重數值。4
例如,Remona網站專職銷售書籍。因此,該網站中的產品家族便是書籍。產品的屬性可能是書籍的作者,或是書籍的類別。例如,電腦與娛樂。

產品的變數則是特定產品屬性的結合。每一個變數都被賦予一個不同的SKU(stock-keeping unit)。

你可以使用Site Builder Wizard來修改產品的屬性並加入產品的變數到網站中。你可以使用Microsoft Site Server Commerce3.0版來將產品的變數加到自訂的網站中。

你可以為產品加入屬性以利促銷活動或銷售競爭。例如,讓我們假設你想要為所有由特定作者所撰寫的電腦書籍提供大比率的折扣。你可以在計劃管線的Product Info階段中藉著加入另一組key/value對到產品的目錄物件中。你將需要使用Scriptor元件,負責寫入新的數值到採購表單中的_product_attribute。這個值稍後會被用在促銷折扣中。

自訂網頁


在這個部分,我們將討論:

在網頁中呼叫單一管線元件。5

限制網頁只能讓註冊過的使用者使用。

透過電子郵件來確認購買動作。

除了自訂網站外,你也可以個別修改那些組成網站的ASP網頁。

你可以更新ASP網頁以便在ASP網頁中呼叫管線元件,控制網站上網頁的使用,並傳送電子郵件訊息給那些曾經在網站上購物的客戶。首先,讓我們學習如何在ASP網頁中呼叫管線元件。

在ASP網頁中呼叫單一管線元件


如你之前所學到的,管線是每一次在你載入並執行管線時,由不同管線元件所組成的。在某些情況下,你可能只想執行一個管線元件,而不是所有的管線元件。你不能直接在ASP網頁中呼叫一個管線元件,因為管線所實作的函式與介面並不為Microsoft Visual Basic Scripting Edtion所支援。然而,藉著建立一個包含所需管線元件的自訂管線,並接著執行該管線,你可以在網頁中執行單一管線元件。

這種方法雖可行,但它會影響網站的效能。例如,這個方法需要你在每一次執行使用額外資源的管線時,要載入全部的管線設定資料。6
要解決這個問題,Site Server Commerce 3.0版提供了MicroPipe元件讓你可以在ASP網頁中呼叫並執行單一管線元件,而不必藉著使用.pcf檔案來執行全部的管線。

MicroPipe元件提供了下列三個方法:

ParatComponent方法用來指定要被載入並執行的元件。

Execute方法執行由ParatComponent方法所指定的管線。

ParatLogFile方法指定管線要紀錄運作過程所用的檔案。

現在,讓我們學習如何在ASP網頁中使用MicroPipe元件。要做到這點,首先你必須建立並設定你希望MicroPipe去執行的元件。

底下的步驟必須執行:7
建立MicroPipe元件的實體。下面的程式會建立一個名為「mpcomp」的實體:

Set mpcomp = Server.CreateObject("Commerce.MicroPipe")
建立你需要在這個網頁中執行管線元件的實體。例如,你將藉著下面程式來建立MyPipeline元件的實體:

Set objPipe = Server.CreateObject("MyPipeline")
將前一個步驟中所建立的物件送到MicroPipe元件的SetComponent方法中。在這個範例中,你必須輸入下面的程式來完成這項工作:

mpcomp.SetComponent(objPipe)
藉著使用MicroPipe元件的Execute方法來執行該元件。使用Execute方法的語法為:8

MicroPipe.Execute(MainDictionary, Context, Reserved)
其中:

MicroPipe指的是被使用的MicroPipe物件名字。

MainDictionary指的是管線的主要辭典,如orderform物件。

Context指的是管線的內文。

Reserved不被使用且必須設定為0。

檢查運作的結果。Execute方法會傳回長整數型態的數值:9
1代表管線執行成功。

2代表Basket中管線元件所產生的錯誤或採購錯誤集合。這些錯誤都是客戶端的錯誤,如遺失資訊。

3代表管線執行失敗。當管線無法使用資料庫時,便會發生這種錯誤。

6使用下面的程式來清除物件:



Set mpcomp = nothing
Set objpipe = nothing
限制網頁只供註冊過的使用者使用


你的網站可能包含了只能讓註冊過的使用者存取的內容。因此你可以編輯一份內含限制的ASP網頁內容,只能讓通過註冊程序的使用者使用。10
使用 ShopperID 來限制存取


要限制網頁的存取,你必須取得ShopperID並檢查其值。如果值為Null,它代表網站的訪客並非通過註冊的使用者。接著你可以將使用者引導至網站的default.asp或註冊網頁。這裡有一個範例程式碼,你可以將它加到只讓會員使用的網頁中。理想的情況下,你應該在納入檔案中指定這段程式。並且在應用程式的每一個網頁中呼叫該檔案。

<%
mscsShopperID = mscsPage.GetShopperId
if IsNull(mscsShopperID) then
if Not this_page("default.asp") then
Response.Redirect(mscsPage.URL("default.asp"))
end if
end if
%>
在這段程式碼中,你使用Page物件的GetshopperID方法來取得目前正在使用網頁的使用者其唯一的shopperID。

將限制的網頁存放於不同的目錄中


另一種在網站上對特定網頁限制使用的方法是,將這些網頁存放在不同的目錄中。你也可以引導網站訪客到註冊網頁以提高網站的互動性。接著你可以撰寫程式來檢查使用者欲存取檔案的位置。這段程式將會驗證使用者是否已經通過註冊。通過註冊的使用者可以存取那些限制的網頁,但是新的使用者會在獲得這些網頁使用權之前先被引導至註冊網頁。

下面的範例程式會檢查被存取的網頁是否存放於名為RegMembers的目錄之中。如果新使用者想要使用RegMemgers目錄中的網頁,他或她將會被引導至register.asp網頁。11
<%
if IsNull(mscsShopperId) then
targetPage=Request.ServerVariables("SCRIPT_NAME")
virtualFolderMember = "/" & mscsPage.VirtualFolder & "/
regmember"
if Left(targetPage, len(virtualFolderMember)) =
virtualFolderMember then
redirectPage = targetPage & "?"
query = Request.ServerVariables("QUERY_STRING")
body = Request.Body
if Not(IsNull(query)) then
redirectPage = redirectPage & query
end if
if Not(IsNull(body)) then
redirectPage = redirectPage & body
end if
Response.Redirect(mscsPage.URL("register.asp",
"redirect_target", redirectPage))
Response.End
end if
else
end if
%>
透過電子郵件確認採購


當顧客送出一張訂單時,對採購過程進行確認是不可缺的。你可以藉著傳送內含訂單明細與訂單追蹤號碼的電子郵件訊息給客戶,來進行交易的確認。

要在你的ASP應用程式中加入訊息功能,你可以使用Microsoft CDO for NTS Library (Collaboration Data Objects for Windows NT Server Library),1.12版。

這個函式庫將會展露可以在Microsoft Visual Basic、Microsoft Visual C++、C/C++與Visual Basic Scripting(VBScript) Edition等應用程式中提供通知功能的物件。

要建立一個電子郵件訊息並將之傳送給客戶,你必須使用CDO for NTS Library所提供的NewMail物件。使用NewMail物件,你可以在不必登入session的情況下傳送訊息。

在開始學習如何在網站中使用NewMail物件之前,讓我們先看看NewMail物件的屬性與方法。NewMail物件的關鍵屬性有:12
To屬性用來指定接收NewMail物件的接收者完整的郵件地址。

Cc屬性用來指定接收NewMail物件完整複製的接收者其完整郵件地址。

Bcc屬性用來指定接收NewMail物件不完整複製的接收者其完整郵件地址。

From屬性用來指定NewMail物件的傳送者其完整郵件地址。

Subject屬性用來指定被傳送訊息的標題為何。

Body屬性用來指定出現在郵件訊息中的文字內容。這個文字內容可以是HTML或純文字格式。

Importance屬性用來指定傳送NewMail物件的重要等級。13

Value屬性用來指定郵件訊息的附加標題。

讓我們看看NewMail物件所提供的方法:

AttachFile方法讓你可以藉著讀入檔案將檔案附加到郵件訊息中。

AttachURL方法讓你可以為郵件訊息加入附件,而該附件是以URL來作關聯。

Send方法會將NewMail物件傳送給由NewMail物件的To、Cc與Bcc等屬性所指定的接收者。

讓我們詳細地研究Send方法。其語法為:

ObjNewMail.Send([From] [,To] [,Subject] [,Body] [,Importance])14
Send方法中的參數會對應到New Mail物件上的各個屬性。然而,如果你為New Mail物件的To屬性指定值,而且也為Parand方法的To參數指定值,則NewMail物件會被傳送到兩者所指定的接收者。

一但Send方法成功地執行,NewMail物件會變成不正確且不能再使用。你必須將該物件設定為Nothing。

現在讓我們學習如何傳送一份確認訊息給在網站上發出訂單的使用者。要完成這項工作,你需要在OPP的採購管線中加入Scriptor物件,並為Scriptor元件關聯一個.vbs檔案。該.vbs檔案將會包含產生NewMail物件實體的程式,並傳送郵件給指定的接收者。

底下就是email.vbs中建立New Mail物件並傳送物件給指定接收者的程式碼:

Function mscparaxecute(config, orderform, context, flags)
Dim myMail
Parat FiveLakesMail = CreateObject("CDONTS.NewMail")
FiveLakesMail.From = "Pararvice@FiveLakes.com"
FiveLakesMail.To = orderForm.ship_to_email
FiveLakesMail.Subject = "Your order has been confirmed. Thank
you."
FiveLakesMail.Body = "This is a sample message."
FiveLakesMail.Parand
Parat FiveLakesMail = Nothing
End function
在利用上述程式來建立email.vbs之後,你將在Microsoft Commerce Pipeline Editor中啟動FiveLakes網站的採購管線。為管線加入一個Scriptor物件並與email.vbs建立關聯。

實作12:自訂網站15


目標


在完成本實作之後,你將能夠:

使用Scriptor元件來建立電子郵件訊息。

在您開始之前


先決條件


在開始本實作之前,你必須具有:

HTML與ASP script的基本知識。16

熟習Microsoft Internet與Microsoft Visual InterDev 6.0 。

4 預估完成所需時間:15分鐘
練習1:利用Scriptor元件來建立電子郵件訊息


在這個練習中,你將設定FiveLakes網站來透過電子郵件傳送訂單確認訊息給客戶。

環境設定


要完成這個實作,你必須將檔案從目錄<install folder>\Labs\Lab12 \FiveLakes\StartCode複製到目錄\\InetPub\wwwroot\FiveLakes \Config中。17
4 為 Scriptor 元件建立 script

開啟Windows檔案總管並瀏覽至目錄\\inetpub\wwwroot\FiveLakes \Config。
建立一個新的文字檔。
輸入下面程式:

Function mscsexecute(config, orderform, context, flags)
Dim myMail
Set FiveLakesMail = CreateObject("CDONTS.NewMail")
FiveLakesMail.From = "Service@FiveLakes.com"
FiveLakesMail.To = orderForm.ship_to_email
FiveLakesMail.Subject = "Your order has been confirmed. Thank
you."
FiveLakesMail.Body = "This is a sample message."
FiveLakesMail.Send
Set FiveLakesMail = Nothing
End function
將檔案儲存成18 email.vbs ,然後關閉檔案。
4 將 Scriptor 元件加入採購管線中

點選 開始 ,指向19 程式集 。
指向 Microsoft Site Server ,然後選擇 COMMERCE 的20 Pipeline Editor 。
會出現Commerce Server Pipeline Editor視窗。在工具列中,點選 Open 。
在 Open21 對話盒中,瀏覽至目錄\\inetpub\wwwroot\FiveLakes\Config目錄。
選擇 purchase.pcf ,然後按下 開啟 。
如果管線並未被展開,雙擊22 Accept 來展開它。
利用滑鼠右鍵點選 SQLItemAdo ,然後選擇 Insert Component 。23
選取 After 。
在 Choose a Component 對話盒中,選擇 Scriptor component24 ,然後按下 OK 。
在管線中,雙擊 Scriptor 。
在25 Component Properties 對話盒中,選取 External 選項。
會出現Scriptor訊息方塊,詢問你是否要匯出內部的原始碼。點選 No 。26
點選 Browse 。
在 開啟檔案 對話盒中,選擇 email.vbs27 ,然後點選 開啟 。
點選 OK 。
在Microsoft Management Console中重新整理網頁。
mic64 目前離線  
送花文章: 0, 收花文章: 21 篇, 收花: 61 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 11:36 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2020, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1