共用方式為


逐步解說:使用標頭和結尾進行一般檔案解譯

概觀

此逐步解說示範如何使用由「一般檔案結構描述精靈」所建立的結構描述,對包含標頭、結尾及重複訊息內文的檔案進行一般檔案解譯。 在此逐步解說中,您將開發部分虛構的錯誤追蹤系統,使其符合下列需求:

  • 錯誤訊息記錄到公司內各個不同的實體網站,再傳送至一個集中位置處理後放入各個後端系統。

  • 會以一般檔案格式寫入錯誤訊息,其標頭指出位置,內文含有一或多個錯誤訊息,且結尾指出批次編號。

  • 如果訊息中沒有標頭、內文和結尾,則視同無效訊息。

    完成此逐步解說後,將會建立 BizTalk Server 應用程式用於處理一般檔案,並將其輸出為 XML 以供後端系統處理。

必要條件

若要執行本範例,您必須已熟悉如何建立 BizTalk Server 專案和簽署組件,及使用「BizTalk Server 管理主控台」檢視應用程式和連接埠。 您也應該熟悉逐步解說 :部署基本 BizTalk 應用程式中所述的想法。 對「一般檔案結構描述精靈」稍具基本認識的話亦有所助益,但並非必要條件。

本範例的工作項目

本範例使用自訂管線和「一般檔案解譯器」元件來處理內送一般檔案訊息。 訊息將使用標頭、結尾和內文結構描述進行剖析,然後輸出至傳送位置再交由後端系統處理。

範例

若要建立範例,請依照以下各節所列的步驟進行。

建立新的 BizTalk 專案

建置方案前,您必須建立 BizTalk 專案、確定其具備強式名稱,並為其指定應用程式名稱。 指定應用程式名稱可避免 BizTalk Server 將方案部署至預設的 BizTalk 應用程式。

  1. 使用 Visual Studio 建立新的 BizTalk 專案。 呼叫 專案 FFDisassemblerWalkthrough

  2. 產生金鑰檔並將其指派給專案。 如需這項工作的詳細資訊,請參閱簽署頁面、專案Designer

  3. 在專案的部署屬性中,將 [應用程式名稱 ] 設定為 「FlatFileExample」,並將 [重新開機主機實例 ] 設定為 True 。 設定此旗標係指示主控件清除組件所有已快取的執行個體。

建立範例資料檔案

若要產生結構描述,您必須先建立測試檔案。

  1. 啟動「記事本」或其他文字編輯器。

  2. 建立範例測試檔案。 此檔案包含標頭指出回報錯誤的位置,結尾指出該批次的批次 ID,且內文含有一或多筆錯誤記錄。 檔案的格式如下:

    Location
    ERRORid|type|priority|description|errorDateTime
    …additional error records
    BatchID
    

    ERROR 記錄會以 “ERROR” 文字標記,並使用 “|” 字元區隔 (有別於位置記錄)。 ERROR 記錄的資料項目如下表所述。

    元素 資料類型 描述
    識別碼 整數 此錯誤的 ID。
    類型 整數 錯誤的類型。
    優先順序 字串 優先順序指標:「低」、「中」或「高」。
    Description 字串 錯誤的描述。
    錯誤日期時間 DateTime 發生錯誤的日期和時間。

    檔案中可能有一筆或多筆 ERROR 記錄。

    --或--

    將下列範例資料複製到新檔案中。 最後一行包含尾端換行字元:

    East Coast Facility
    ERROR102|0|High|Sprocket query fails.|1999-05-31T13:20:00.000-05:00
    ERROR16502|2|Low|Time threshold exceeded.|1999-05-31T13:20:00.000-05:00
    8675309
    
    
  3. 將新的範例檔案儲存到專案目錄中。 請使用描述性名稱如 "ErrorFile.txt" 以方便找到檔案。

建立並測試標頭、結尾和內文結構描述

建立範例資料檔案後,下一步驟就是建立標頭、結尾和內文結構描述。 這些結構描述將供「一般檔案解譯器」接收管線元件用來處理接收的訊息。

使用一般檔案架構精靈來建立標頭架構
  1. 在專案中新增結構描述。 在 [方案總管] 中,以滑鼠右鍵按一下[FFDisassemblerWalkthrough],指向 [新增],然後按一下 [新增專案]。

  2. 在 [ 新增專案 ] 對話方塊中,按一下 [ 架構檔案] ,然後選取 [ 一般檔案架構精靈]。 將新的架構命名為 「Header.xsd」,然後按一下 [ 新增]。

  3. 在 [ 歡迎使用 BizTalk 一般檔案架構精靈 ] 頁面上,按 [ 下一步]。

  4. 在 [ 一般檔案架構資訊 ] 頁面上,按一下 [ 流覽 ],然後找出稍早建立的範例資料檔案。 將 [記錄名稱 ] 變更為 [標頭],確認字碼頁,然後按 [ 下一步]。

    注意

    如果範例檔案儲存成 Unicode 格式,字碼頁即為 Little-Endian-UTF16 (1200)。 這對本範例不會造成不良影響。

  5. 接著選取文件資料。 在 [ 選取檔資料 ] 頁面上,反白顯示包含新行字元 {CR} 和 {LF} 的第一行資料,如下所示:

    針對標頭架構選取的資料

    按一下 [下一步]。

  6. 在 [ 選取記錄格式 ] 頁面上,按 [ 下一步 ] 接受預設值。 可接受預設值「依分隔符號」是因為資料檔案並未使用相對位置。

  7. 在 [ 分隔記錄 ] 頁面上,按 [ 下一步]。

  8. 接著指定子項目。 標頭含有一個項目,名為 "Location":

    針對標頭ffwiz_header_child_elements定義的位置節點

    選取 [下一步] 以繼續操作。

  9. 在 [ 架構檢視 ] 頁面上,確認架構。

    顯示已完成標頭架構ffwiz_header_schema_view的架構檢視

    當您滿意時,請按一下 [ 完成 ] 以完成精靈。

  10. 按一下 [標頭架構] 窗格中的 [架構 > ] 節點。 < 在 [屬性] 窗格中,將[元素 FormDefault] 變更為[限定]。 這表示區域宣告項目必須由執行個體文件中的目標命名空間限定。

使用一般檔案架構精靈來建立預告片架構
  1. 在專案中新增結構描述。 在 方案總管中,以滑鼠右鍵按一下FFDisassemblerWalkthrough,指向 [新增],然後按一下 [新增專案]。

  2. 在 [ 新增專案 ] 對話方塊中,按一下 [ 架構檔案] ,然後選取 [ 一般檔案架構精靈]。 將新的架構命名為 「Trailer.xsd」,然後按一下 [ 新增]。

  3. 在 [ 歡迎使用 BizTalk 一般檔案架構精靈 ] 頁面上,按 [ 下一步]。

  4. 在 [ 一般檔案架構資訊 ] 頁面上,按一下 [ 流覽 ],然後找出稍早建立的範例資料檔案。 將 [記錄名稱 ] 變更為 [預告片],確認字碼頁,然後按 [ 下一步]。

    注意

    如果範例檔案儲存成 Unicode 格式,字碼頁即為 Little-Endian-UTF16 (1200)。 這對本範例不會造成不良影響。

  5. 接著選取文件資料。 在 [ 選取檔資料] 頁面上,醒目提示最後一行資料,包括新行字元 {CR} 和 {LF},如下所示:

    針對預告片架構選取的資料

    按一下 [下一步]。

  6. 在 [ 選取記錄格式 ] 頁面上,按 [下一步 ] 接受預設值。 可接受預設值「依分隔符號」是因為資料檔案並未使用相對位置。

  7. 在 [ 分隔記錄] 頁面上,按 [下一步]。

  8. 接著指定子項目。 結尾含有一個項目,名為 "BatchID":

    針對預告片ffwiz_trailer_child_elements定義的位置節點

    選取 [下一步] 以繼續操作。

  9. 在 [ 架構檢視] 頁面上,確認架構。

    顯示已完成的預告片架構ffwiz_trailer_schema_view的架構檢視

    當您滿意時,按一下 [ 完成] 以完成精靈。

  10. 按一下 [預告片架構] 窗格中的 [架構 > ] 節點。 < 在 [屬性] 窗格中,將 elementFormDefault 變更為 Qualified。 這表示區域宣告項目必須由執行個體文件中的目標命名空間限定。

使用一般檔案架構精靈建立主體架構
  1. 在專案中新增結構描述。 在 方案總管中,以滑鼠右鍵按一下FFDisassemblerWalkthrough,指向 [新增],然後按一下 [新增專案]。

  2. 在 [ 新增專案 ] 對話方塊中,按一下 [ 架構檔案 ],然後選取 [一般檔案架構精靈]。 將新的架構命名為 「Body.xsd」,然後按一下 [ 新增]。

  3. 在 [ 歡迎使用 BizTalk 一般檔案架構精靈 ] 頁面上,按 [下一步]。

  4. 在 [ 一般檔案架構資訊] 頁面上,按一下 [ 流覽 ] 並找出稍早建立的範例資料檔案。 將 [記錄名稱 ] 變更為 「Body」,確認字碼頁,然後按 [ 下一步]。

    注意

    如果範例檔案儲存成 Unicode 格式,字碼頁即為 Little-Endian-UTF16 (1200)。 這對本範例不會造成不良影響。

  5. 接著選取文件資料。 在 [ 選取檔資料] 頁面上,醒目提示第二行和第三行資料,包括新行字元 {CR} 和 {LF},如下所示:

    針對主體架構選取的資料

    按一下 [下一步]。

  6. 在 [ 選取記錄格式 ] 頁面上,按 [下一步 ] 接受預設值。 可接受預設值「依分隔符號」是因為資料檔案並未使用相對位置。

  7. 在 [ 分隔記錄] 頁面上,選取 [ 下一步]。

  8. 接著定義子項目。 將 Body_Child1 變更為 Error,並將其元素類型設定為 [重複記錄]。 將 Body_Child2 專案記錄類型設定為 Ignore

  9. 在 [ 架構檢視 ] 頁面上,按 [下一步 ] 來定義錯誤記錄的子項目。

  10. 在 [ 選取檔資料] 頁面上,按 [下一步]。 精靈會正確選擇記錄定義的資料。

  11. 在 [ 選取記錄格式 ] 頁面上,按 [下一步]。 資料會以分隔符號進行格式化。

  12. 在 [ 分隔記錄] 頁面上,選取 |[子分隔符號]。 接下來,選取 [ 記錄具有標籤識別碼 ] 核取方塊,然後輸入 TAG 值的 ERROR

    使用標記識別項設定分隔記錄

    按一下 [下一步]。

  13. 接著定義 Error 記錄的子項目。

    以五個元素定義的錯誤記錄

    按一下 [下一步]。

  14. 在 [ 架構檢視] 頁面上,確認架構。

    顯示已完成主體架構的架構檢視

    如果您發生任何錯誤,請按一下 [ 上一步 ],並進行必要的更正。 當您滿意時,按一下 [ 完成] 以完成精靈。

  15. 按一下 [主體架構] 窗格中的 [架構 > ] 節點。 < 在 [屬性] 窗格中,將 [元素 FormDefault ] 變更為 [限定]。 這表示區域宣告項目必須由執行個體文件中的目標命名空間限定。

  16. 按一下 [主體架構] 窗格上的 [錯誤 > ] 節點。 < 在 [屬性] 窗格中,將 [發生最大值] 變更為 1。 這可讓「一般檔案解譯器」將每項錯誤分割為個別的訊息。

使用 FFDasm 測試架構
  1. 開啟命令提示字元,再將目錄變更為您的專案目錄。

  2. 從命令提示字元執行 FFDasm.exe,如下所示。

    <Samples Path>\SDK\Utilities\PipelineTools\FFDasm ErrorFile.txt  -hs header.xsd -bs body.xsd -ts Trailer.xsd
    

    如需這個和其他管線工具位置的相關資訊,請參閱 管線工具

  3. FFDasm.exe 會產生兩個名為 {GUID}.xml 的輸出檔,分別代表測試檔案中的一筆 ERROR 記錄。 高優先順序的錯誤記錄看起來像這樣:

    <Body xmlns="http://FFDisassemblerWalkthrough.Body">
      <Error>
        <ID>102</ID>
        <Type>0</Type>
        <Priority>High</Priority>
        <Description>Sprocket query fails.</Description>
        <DateTime>1999-05-31T13:20:00.000-05:00</DateTime>
      </Error>
    </Body>
    

建立自訂接收管線

如今一般檔案結構描述已經定義完成,您必須建立自訂管線以使用「一般檔案解譯器」元件。 然後即可將「一般檔案解譯器」元件設定為使用標頭、內文和結尾結構描述來拆解訊息。

  1. 在專案中新增接收管線。 在 方案總管中,以滑鼠右鍵按一下FFDisassemblerWalkthrough專案,指向 [新增],然後按一下 [新增專案]。

  2. 在 [ 新增專案 ] 對話方塊中,指向 [管線檔案 ],然後按一下 [ 接收管線]。 將新的管線命名為 「FFReceivePipeline」,然後按一下 [ 新增]。

  3. 將「一般檔案解譯器」元件從 [工具箱] 窗格拖曳到「解譯」步驟以設定新管線。

  4. 在 [屬性] 窗格中,將 檔架構 設定為 FFDisassemblerWalkthrough.Body標頭架構 設為 FFDisassemblerWalkthrough.Header ,並將 預告片架構 設定為 FFDisassemblerWalkthrough.Trailer

部署應用程式並設定傳送埠和接收埠

建立結構描述和自訂接收管線後,您必須編譯並部署專案。 一旦專案部署完成,即可使用「BizTalk Server 管理主控台」設定傳送埠和接收埠。

部署
  1. 在 Visual Studio 中,以滑鼠右鍵按一下專案,然後按一下 [ 部署],以部署方案。

  2. 使用 BizTalk Server 管理主控台,展開[應用程式] 群組,確認FlatFileExample是否顯示為自訂應用程式。

設定接收埠
  1. 使用 Windows 檔案總管在 FFDisassemblerWalkthrough 專案目錄下建立名為 「Receive」 的目錄。

  2. 在 BizTalk Server 管理主控台中,展開FlatFileExample應用程式,以滑鼠右鍵按一下[接收埠],指向 [新增],然後按一下[單向接收埠]。

  3. 在 [ 接收埠屬性 ] 對話方塊中,將埠的名稱設定為 「ReceiveError」。

  4. 按一下 [接收位置],然後按一下 [ 新增 ] 以新增接收位置。 將新的接收位置命名為 "ReceiveErrorLocation"。 將 接收管線 設定為 FFReceivePipeline。 針對 [傳輸類型],選取 [檔案],然後按一下 [ 設定]。 選取您建立的接收目錄,然後將 [檔案] 遮罩 設定為 *.txt。

  5. 按一下 [確定]。 接收埠即設定完成。 按一下 [確定 ] 以關閉。

設定傳送埠
  1. 使用 Windows 檔案總管在 FFDisassemblerWalkthrough 專案目錄下建立名為 「Send」 的目錄。

  2. 在 BizTalk Server 管理主控台中,展開FlatFileExample應用程式,以滑鼠右鍵按一下 [傳送埠],指向 [新增],然後按一下 [靜態] One-Way [傳送埠...]。

  3. 在 [ 傳送埠屬性 ] 對話方塊中,將埠的名稱設定為 [傳送]。

  4. 針對傳輸類型,選取 [FILE],然後按一下 [ 設定]。 將目的資料夾設定為剛才建立的傳送目錄。

  5. 接著設定篩選條件。 按一下 [ 篩選 ] 並新增一個運算式:

    • Bts。MessageType == http://FFDisassemblerWalkthrough.Body#Body
  6. 按一下 [確定 ] 以完成傳送埠設定。 傳送埠即設定完成。

執行範例

現在即可開始執行範例。 使用 BizTalk Server 管理主控台啟動應用程式之後,請將測試檔案複製到接收位置,並觀察傳送位置中產生的專案。

  1. 在 BizTalk Server 管理主控台中,以滑鼠右鍵按一下FlatFileExample應用程式,然後按一下 [啟動]。 這會登記並啟動傳送和接收埠。

  2. 將範例 Errorfile.txt 複本放到接收目錄中。 傳送目錄中應該就會產生兩個輸出檔。