在我的編排中,我有各種步驟將平面文件映射到2箇中間消息並最終寫入SQL。首先,我沒有例外處理它,它使用了有效的輸入文件。BizTalk不斷要求初始化ALREADY初始化消息
msg0 msg1 msg2
┌──────┐ ┌─────┐ ┌───────┐ ┌───────┐ ┌─────┐
│ PIPE │-►│ RCV │-►│ MAP_1 │-►│ MAP_2 │-►│ SQL │
└──────┘ └─────┘ └───────┘ └───────┘ └─────┘
現在我試圖獲取每個範圍的異常,我使用地圖。 在編排開始時,在第一個接收形狀之後,我放置了一個Construct Message Shape,用於初始化編排中的所有消息。 我創建了catch塊(每個都有用於我的fault_msg及其發送形狀的Construct形狀),FILE端口和構建。
msg0 msg1 msg2
┌──────┐ ┌─────┐ ┌──────┬──┐ ┌───────┬──┐ ┌───────┬──┐ ┌─────┬──┐
│ PIPE │-►│ RCV │-►│ INIT │ex│-►│ MAP_1 │ex│-►│ MAP_2 │ex│-►│ SQL │ex│
└──────┘ └─────┘ └──────┴──┘ └───────┴──┘ └───────┴──┘ └─────┴──┘
VS不斷要求,甚至在該應進入已經填充(或填充,或任何術語)的消息映射塊味精初始化。 這是爲什麼?
編輯:我想通過BT想要每個msg初始化,即使在異常處理過程中沒有使用。所以我需要構建我的自定義錯誤消息,它將返回空的消息以及我的自定義錯誤消息。爲了初始化過程中的他們,我需要在表達代碼的開頭這樣來聲明:目前
unusedMsg.Part = new System.Xml.XmlDocument();
事情是:這個問題還是出來最後的映射(SQL):
┌──────────────────────┐
│ scope │
│ ┌────────────────┐ │
┌──────┐ │ │ MAP │ │ ┌────────┐
│ msg2 │ -►│ │ msg2 > sqlReq │ │ -► │ sqlReq │
└──────┘ │ └────────────────┘ │ └────────┘
├──────────────────────┤
│ ex │
│ ┌────────────────┐ │
│ │ construct │ │ ┌────────┐
│ │ msg2 > msgERR │ │ -► │ msgERR │
│ └────────────────┘ │ └────────┘
└──────────────────────┘
它不停地問這一點:
msg2.Part「:消息部分尚未construct語句中初始化
但我確信msg2 IS INITIALIZED是因爲我沒有例外產生它,我正在進入新的範圍。 這可能怎麼樣?
這證實了我對待我的例外的方式沒有錯。由於與VS屬性選項卡可見性有關的原因,我沒有看到構造形狀也將msg2指定爲構建的消息之一(可能來自複製粘貼)。我會保留此作爲未來類似錯誤的參考!謝謝@Dijkgraaf – strongmmc
我相應地修改了...它仍然要求這些未使用的消息。 Biztalk正在測試我的耐心和我對儀器動態的理解。 C#編譯器從不抱怨(不考慮警告)對於未使用的非實例變量。他們被命名,就是這樣......爲什麼一個工具要求實現在流程生命週期中不使用的東西的實例? – strongmmc
@strongmmc在修復第一個錯誤之後,查看你的問題,你將使用未構造的消息觸及#3。您必須像處理try/catch塊一樣對待範圍。你的sqlReg和msgErr都只在作用域的一部分中創建,所以你不能在作用域之後使用。我會嘗試在我的答案中添加更多細節以突出顯示您可以使用的某些模式。附:你的範圍真的只有一張地圖嗎?我通常不會嘗試從單一形狀中捕捉錯誤。 – Dijkgraaf