2016-06-21 23 views
2

在一個BizTalk表達式形狀中,我提供了一個空白的文本編輯器,上面有一些粗略的「示例」,嘲笑我。 「太容易了」他們吟誦着。儘可能地嘗試,我只是沒有建立聯繫。也許我在想這件事。我是BizTalk新手。來自多年的沉重的.NET和軟件工程經驗,我認爲似乎並不腦力...BizTalk表達式形狀內的範圍是什麼?

有人與偉大的BizTalk經驗啓發我在這個問題:什麼是範圍內和可用於內部表情形狀?然後,MessageAssignment形狀呢?

通過範圍,我的意思是像在真正的編程:變量名,命名空間等

每一個例子,我在看的BizTalk假定您瞭解這些東西從何而來。例如,請參閱此MSDN頁面:Using Distinguished Fields and Property Fields

它假設我知道「MyMessage」的創建,實例化和可訪問性。我不知道在哪裏初始化它,什麼形狀標識符給一個名字,等等。

我的設計看起來很簡單:當發生錯誤時,抓住它,用空氣創建一個ErrorMessage,將字符串值分配給一個區分字段「原因」,併發送到發送端口。我可以得到一切,但表達的權利。

任何專家的見解,非常感謝。

回答

4

只能創建一個構造消息形狀內的消息,然後要麼 地圖或在一側的分配形狀。您不能以表達形式構造消息。

地圖選項

對於異常塊的地圖,您可以從地圖中唯一的消息是指那些範圍的異常塊是在之前創建的。因此,對於整個異常塊業務流程I從初始激活接收(它應該在作用域之前)接收到的消息以及錯誤消息模式進行映射。然後,可以在地圖之後的Construct形狀中分配消息。

注意:如果範圍覆蓋除初始接收以外的所有內容,則初始接收的消息是唯一一個您將在控制中確定的消息。我只在一次涉及格式錯誤的MIME消息的邊緣案例中遇到過這種情況,這會導致業務流程啓動,但沒有此初始消息。

非地圖選項

不使用只分配形狀的地圖創建它,你要麼

  1. 需要調用外部類如ESB故障處理eSBFault = Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.CreateFaultMessage();其中eSBFault被定義爲消息類型Microsoft.Practices.ESB.ExceptionHandling.Schemas.Faults.FaultMessage
  2. 將其從另一現有消息(例如, xTempDoc= wcfFault.fault;其中在此示例中,wcFault是Catch Exception中設置的Exception Object Name,xTempDoc是System.Xml.XmlDocument類型的變量,然後將其分配給消息變量。

  3. 手動從creating a new message in the Message Assign shape

xmlDocMessage = new System.Xml.XmlDocument(); 
xmlDocMessage.LoadXml("<Out><ErrorCode>4711</ErrorCode></Out>"); 

創建例如低於該消息創建變量消息

對於所有的上述需要進入編排查看並創建該消息名稱的Message變量並將其設置爲Messa ge您要構建的消息的類型。它需要位於您構建它的範圍或封閉範圍內。注意:它只會在您定義它的範圍或其定義範圍的子範圍中可用。

enter image description here

表達形狀

爲了表達形狀的其他限制的其他限制見Requirements and Limitations for Expressions

+0

謝謝你的回答。這在我的「創建一個無形的信息」的子問題中確實有幫助,但我仍然需要知道在您的示例中「xmlDocMessage」的實例。如果我把你的代碼粘貼到我的MessageAssignment形狀中,它會給出這個錯誤消息:「catch'中不存在」identifier'xmlDocMessage';你是否缺少程序集引用?「 – ryancdotnet

+1

您需要進入Orchestration視圖並創建該名稱的Message變量,並將其設置爲您要構建的消息的消息類型。它需要位於您構建它的範圍或封閉範圍內。 – Dijkgraaf

+0

偉大的編輯!這絕對有助於我把事情整理在一起。以您的示例爲例,我現在可以看到,在Orchestration級別或___Scope級別定義的任何內容(如果我位於該範圍內)通過XLANG可用於Expression/MessageAssignment形狀。這有點幫助!謝謝! – ryancdotnet

3

@ Dijkgraaf的答案是優秀的,但是從技術上來講表達式編輯器給你訪問到XLANG/s language。 AFAIK你仍然需要聲明變量(如圖所示)(使用編排工具箱窗口)。但是,語言本身有點類似於C#和.NET,你可以在技術上做一些表達式形式的任何事情,你可以用其他形式做任何事情,使用適當的關鍵字。

例如,它可能construct在表達式形狀的消息等,以便(從這個blog截取):

construct OutboundMessage { 

    XmlDocument.LoadXml(
     @"<?xml version='1.0' standalone='yes' ?> 
     <Root id='' xmlns='http://schemas.sample.org/BizTalk/2010/input' /> 
    "); 

OutboundMessage = XmlDocument; 
} 

通常,這是一個壞主意。你通常應該使用常規的構造消息形狀 - 爲什麼?因爲當你一年後去看看你的編排(或其他人)時,你會在構建信息的時候立即明白。同樣可以用於決策形狀 - 在某些情況下,決策形狀可能會矯枉過正,但未來的開發人員會立即明白決策邏輯(而不是在表達式中查找if語句)。表達形狀應該:

  1. 總是要正確命名/標記。不要讓自己試圖找出Expression_2實際上在做什麼,將其命名爲「增量循環計數器」
  2. 避免冗長的表達式。編輯不是很友好(非常有限的智能感知,沒有突出顯示,沒有自動格式化)。不止一次,我通過點擊Esc而不是點擊OK而丟失了表情形狀中的代碼,而沒有意識到我立即做了什麼。這對XLANG的具體事情非常有用(如使用xpath函數,或訪問區分字段,或者做簡單的事情)。如果您正在進入更復雜的邏輯,請將代碼調用到編排項目引用的C#助手庫。
+0

形狀名稱是否在XLANG或代碼中被引用?如在中,他們是否需要遵循嚴格的變量命名模式? 或者它們僅用於顯示,並且可以像您的示例一樣描述而不會產生不良影響? 「遞增循環計數器」 – ryancdotnet

+1

形狀名稱只是描述性的。 –

相關問題