查看單個文章
舊 2004-06-21, 02:05 PM   #6 (permalink)
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 金幣
預設

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 次