过滤特定值,但如果不存在则使用默认值

时间:2015-02-05 14:02:00

标签: biztalk biztalk-mapper

我有一个输入架构,其中包含电话号码类型的电话号码列表,如下所示:

<phoneNumbers>
    <phoneNumber type="work">...</phoneNumber>
    <phoneNumber type="home">...</phoneNumber>
</phoneNumbers>

我只想映射一个特定类型的号码,让我们说“工作”。如果工作&#39;类型的电话号码不可用我需要填写默认值。

这就是我的开始:

BizTalk mapping

我遇到的问题是,如果没有&#39; work&#39;工作,我就无法在输出中显示默认值。电话号码在场。

5 个答案:

答案 0 :(得分:3)

如何使用脚本functoid。

public string setphonenumber(string work_number)
{
  string default = "123456789";
  if(work_number ="")
      return default;
  else return work_number;

}

答案 1 :(得分:3)

您可以使用内联XSLT脚本功能。

假设源和目标结构如下所示:

Example map

内联XSLT将是这样的:

<workNumber xmlns:p="http://PhoneNumberMap.SourceSchema">
  <xsl:variable name="var:v1" select="/p:Root/phoneNumbers/phoneNumber[@type='work']" />
  <xsl:choose>
    <xsl:when test="$var:v1!=''">
      <xsl:value-of select="$var:v1" />
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="'some default'" />
    </xsl:otherwise>
  </xsl:choose>
</workNumber>

答案 2 :(得分:0)

如果手机号码有固定的长度,你可以串起连接右侧的默认值,然后输入一个字符串左。

答案 3 :(得分:0)

我建议您使用Not equal functoid设置默认值,如果它与&#34; Work&#34;不同,如果它等于&#34; work&#34 ;,您将在输出中获得源值

答案 4 :(得分:0)

尝试在xlst中制作完整的地图,而不是使用BizTalk地图functoid。在开始时你将与xslt斗争,但过了一段时间,你会喜欢它!

我不会在这里发布整个解决方案,但我找到了一个很好的Youtube post来解释一切。它在3点开始变得有趣。