【问题标题】:Filter for specific value, but use default value if it doesn't exist过滤特定值,但如果不存在则使用默认值
【发布时间】:2015-02-05 14:01:59
【问题描述】:

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

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

我只想映射特定类型的数字,比如说“工作”。如果“工作”类型的电话号码不可用,我需要填写默认值。

这是我开始的:

我遇到的问题是,如果没有“工作”电话号码,我无法在输出中显示默认值。

【问题讨论】:

  • XSLT!!!!!!!!!!!! (只是因为我必须写 8 个字符 :-)

标签: biztalk biztalk-mapper


【解决方案1】:

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

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

内联 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>

【讨论】:

  • 我已经很久没有使用 BizTalk 了。作为一名程序员,我应该学会不要尝试使用内联 C# Scriptoids 解决所有问题。 :)
【解决方案2】:

如何使用脚本functoid。

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

}

【讨论】:

  • 我有一个类似的解决方案。我仍然需要一个累积连接才能完全按照我想要的方式运行。
【解决方案3】:

如果电话号码的长度是固定的,您可以将右侧的默认值串起来,然后输入到左侧的字符串中。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-15
        • 2012-03-22
        • 2013-09-10
        • 1970-01-01
        • 2023-03-03
        • 2022-11-14
        • 2012-11-28
        • 2020-02-29
        相关资源
        最近更新 更多