2016-06-21 50 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

形状名称只是描述性的。 –