【问题标题】:How to set a default value to an destination schema element in BizTalk Map如何为 BizTalk Map 中的目标架构元素设置默认值
【发布时间】:2010-10-26 10:40:06
【问题描述】:

我在 BizTalk 地图中有一个要求,在哪里

  1. 我会将一些元素从源架构映射到目标架构,其中将根据某些条件将值分配给目标架构元素。

  2. 如果没有分配这些值,我需要发送一些默认值(N/A)。

  3. 我的地图不是一对一的,因此我可以使用脚本函数并发送默认值,除此之外,目标架构是平面文件,在源架构中我必须循环很多.

所以任何人都可以使用 BizTalk Map/架构中的某些设置给我一些关于“如果没有映射任何内容,如何为目标架构中的元素设置默认值”的建议。

我已经尝试过的是,我打开了所有元素的目标架构,我已将值“N/A”设置为属性 ->“DefaultValue”,它位于属性选项卡中,但当没有任何映射时默认值不会到来。相反,节点本身并未在输出文件中创建。

请参阅下面的地图以获得更好的理解

alt text http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/0131.problem.JPG

源架构是一个 XML 架构。

目标架构是平面文件架构。

现在在上面的地图中,在我的源模式中,我有一个名为 F4706 的节点,它将循环。

  1. 当 F4706 中的元素“TypeAddressNumber”为“1”时,我将该 F4706 实例的其余字段映射到目标架构中的“运送至”详细信息

  2. 当 F4706 中的元素“TypeAddressNumber”为“2”时,我将该 F4706 实例的其余字段映射到目标架构中的“经销商”详细信息

  3. 当 F4706 中的元素“TypeAddressNumber”为“3”时,我将该 F4706 实例的剩余字段映射到目标架构中的“EndUser”详细信息

现在,如果我将逻辑 NOT functoid 连接到 Logical Equal functoid 并分配一些默认值,那么我的目标节点会出现三次,一次“=”函数返回 true 一次,另外两次返回 false。但我想要的是,如果有什么要映射的,那么从“F4706”实例映射或分配默认值。

在下面找到输入文件

alt text http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/5430.ip.JPG

我期望得到的输出是:

alt text http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/0724.curOP.JPG

现在如果输入文件如下所示:

alt text http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/6403.otherIP.JPG

也就是说,当我没有 TypeAddressNumber=2 的“F4706”节点时,我需要在目标架构中的经销商相关节点中填写“N/A”,如下所示:

alt text http://www.biztalkgurus.com/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/13/0435.nextOP.JPG

如果你去检查正在生成的 XLST,它正在编写一个 xsl:foreach,所以如果你使用 xsl:choose/otherwise 条件会被检查多次并且我的输出节点会被重复。

我还尝试在第一个循环和第二个循环的 XLST 中使用一些全局变量来访问它并写入默认值,不幸的是它也不起作用。因为 XLST 中的 VARIABLE 不是 TRUE 变量。我认为它是一个常数。

非常感谢如何完成此任何帮助。

【问题讨论】:

    标签: biztalk


    【解决方案1】:
    1. 在地图上放置两个“值映射”(将它们标记为“传入”和“默认”)并将输出从两者拖到您的目的地(您将在编译时收到警告)。

    2. 在地图上添加“逻辑非”(标记为“NoValue”)。

    3. 放置一个适合您需要的逻辑评估(Existence、IsNil、Length),以评估您是否有传入值,并将源字段拖到该值。 (将其标记为“HasValue”)

    4. 将结果拖到“传入”和“逻辑非”。

    5. 将源字段拖到“传入”。

    6. 将输出从“NoValue”拖到“Default”。

    7. 双击并插入新参数,为“默认”添加一个常量参数,这是您的默认值。

    希望你能理解这个烂摊子:)

    【讨论】:

    • 嗨,马丁,感谢您的回复。不幸的是,这对我不起作用,因为在源模式中我有一个将循环的元素,我必须检查该元素内单个节点的 3 个条件,所以发生的情况是,一旦条件为真,它将分配我的传入值,接下来的两次循环源元素时,它将填充默认值,从而在我的目标架构中产生多个节点。但我希望目标元素被填充一次。
    • 嗨 Santosh,我是否正确理解您的传入源看起来像:Root - LoopingRecord - - ElementToCheck 如果“ElementToCheck”不符合您希望一 (1) 个目标元素包含的 3 个条件“不适用”?
    【解决方案2】:

    我相信您实际上是在尝试根据某些条件控制输出节点的创建。

    我已经尝试过记录(您正在尝试对元素执行此操作,所以我相信这也应该适用)。

    我已将逻辑 functoid 的输出连接到记录,并且仅当逻辑 functoid 返回 true 时才创建记录。

    对于默认值,您可以通过将默认值放入 Schema 元素的属性网格中以正确的方式进行操作。所以如果没有映射到这个元素,你会在 xsl 文件中看到生成了默认值的元素。

    【讨论】:

      猜你喜欢
      • 2018-09-02
      • 2010-11-24
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多