我有这些数据(所有元素都是可选的):
<data>
<optionalElement1>...</optionalElement1>
<optionalElement2>...</optionalElement2>
<optionalElement3>...</optionalElement3>
</data>
我需要将此映射到另一个模式(所有元素都是必需的):
<request>
<Element1>...</Element1>
<Element2>...</Element2>
<Element3>...</Element3>
</request>
由于原始请求中的元素是可选的,因此映射将是 只生成最初包含的相应元素 元素。但是请求的验证将失败。
示例:
<data>
<optionalElement3>
<value1>1</value1>
<value2>2</value2>
</optionalElement3>
</data>
将映射到
<request>
<Element3>
<subelement1>1</subelement1>
<subelement2>2</subelement2>
</Element3>
</request>
验证将失败,因为我缺少Element1和Element2。该 回应应该(我认为):
<request>
<Element1 xsi:nil="true" />
<Element2 xsi:nil="true" />
<Element3>
<subelement1>1</subelement1>
<subelement2>2<subelement2>
</Element3>
</request>
我如何在映射中执行此操作?我怎样才能确保元素是 在输出消息中创建?
顺便说一句,如果不存在子元素(让我们说 “data / optionalElement1 / value1”如何确保目的地 是否创建了子请求“request / Element1 / subelement1”?
答案 0 :(得分:1)
让它变得非常简单。使用xlst文件进行映射。
使用简单的if条件可以检查是否存在opetion元素的值,如果value存在则map映射null(Empty)值。因此,即使没有可选元素的值,也会生成复杂元素。
希望它能解决你的问题。
答案 1 :(得分:0)
您可以在映射器中完成所有这些操作。我没有进入Biztalk一段时间,我没有它靠近我,但我知道映射器中有功能可以让你检查你需要的字段是否存在。根据这些字段的存在,您可以指定映射器的相应操作。
您可以通过在目标架构中提供默认值来强制创建字段。这也可以通过属性窗口使用映射器完成。
答案 2 :(得分:0)
圣何塞
你会想看看循环functoid的表。这是关于它的帖子。
http://geekswithblogs.net/Chilberto/archive/2008/04/16/121274.aspx
将这个functoid与表格提取结合使用可以为您提供解决方案。这里还有一个关于低位映射器的好系列。
http://www.bizbert.com/bizbert/2008/02/07/Understanding+The+BizTalk+Mapper+Part+1+Introduction.aspx
布莱恩