我在BizTalk地图中有一个要求,其中
我会将一些元素从源架构映射到目标架构,其中值将根据某些条件分配给目标架构元素。
如果未分配这些值,我需要发送一些默认值(N / A)。
我的地图不是一对一的,所以我可以使用脚本functoid并发送一个默认值,最重要的是目标模式是一个平面文件,在源模式中我必须循环很多
所以任何机构都可以给我一些关于“如果没有映射任何内容,如何在目标模式中设置默认值”的建议,使用BizTalk Map /模式中的某些设置。
我已经尝试过的,我打开了我已将值'N / A'设置为属性的所有元素的目标模式 - >属性选项卡中有“DefaultValue”,但是当没有映射时,默认值不会到来。相反,节点本身不会在输出文件中创建。
请参阅下面的地图以获得良好的理解
源架构是一种XML架构。
目标架构是一种平面文件架构。
现在在上面的地图中,在我的源模式中,我有一个名为F4706的节点,它将循环。
当F4706中的元素“TypeAddressNumber”为“1”时,我将该F4706实例的其余字段映射到“发送到”目标模式中的详细信息
当F4706中的元素“TypeAddressNumber”为“2”时,我将该F4706实例的其余字段映射到目标模式中的“经销商”详细信息
当F4706中的元素“TypeAddressNumber”为“3”时,我将该F4706实例的其余字段映射到目标模式中的“EndUser”详细信息
现在,如果我将Logical NOT functoid连接到Logical Equal functoid并指定一些默认值,那么我的目标节点会出现三次“=”functiod一次返回true而其他两次返回false。但我想要的是,如果有什么要映射,那么从“F4706”实例映射或分配默认值。
找到下面的输入文件
我期待和得到的输出是:
现在,如果输入文件如下所示:
那时我没有TypeAddressNumber = 2的“F4706”节点,我需要在目标模式的经销商相关节点中填写“N / A”,如下所示:
如果你去检查生成的XLST,它正在写一个xsl:foreach,所以如果你使用xsl:select /否则条件会多次检查,我的输出节点会重复。
我还尝试在First Loop中使用XLST中的一些全局变量,然后使用第二个循环来访问它并写入默认值,不幸的是它也不起作用。因为XLST中的VARIABLE不是TRUE变量。我认为它是一个常数。
如何实现这一点非常感谢。
答案 0 :(得分:1)
在地图上放置两个“值映射”(将它们标记为“传入”和“默认”),然后将输出从两者拖到目的地(编译时会收到警告)。
在地图上放置“Logical NOT”(将其标记为“NoValue”)。
根据需要进行逻辑评估(存在,IsNil,长度),以评估是否有传入值,并将源字段拖到其中。 (将其标记为“HasValue”)
将结果拖到“Incoming”和“Logical NOT”。
将您的源字段拖到“Incoming”。
将输出从“NoValue”拖动到“Default”。
通过双击并插入新参数,将常量参数添加到“默认”,这是您的默认值。
希望你能理解这个烂摊子:)
答案 1 :(得分:1)
我相信你实际上是在尝试根据某些条件来控制输出节点的创建。
我已经尝试过这个记录(你试图为元素做这个,所以我相信这也适用于那个。)
我已将Logical functoid的输出连接到记录,并且仅当逻辑functoid返回true时才创建记录。
对于默认值,您可以通过将默认值放在Schema元素的属性网格中来正确地执行此操作。因此,如果没有任何内容映射到此元素,您将在xsl文件中看到生成了具有默认值的元素。