Фильтровать по определенному значению, но использовать значение по умолчанию, если оно не существует

У меня есть схема ввода, которая содержит список телефонных номеров с типом номера телефона, который выглядит следующим образом:

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

Я хочу сопоставить только определенный тип номера, скажем, "работа". Если номер телефона типа "работа" недоступен, мне нужно ввести значение по умолчанию.

Вот с чего я начну:

BizTalk картирование

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить значение по умолчанию для вывода, если отсутствует "рабочий" номер телефона.

5 ответов

Решение

Вы можете использовать встроенную функцию сценариев 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>

Как насчет использования скриптовых функций с этим.

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

}

Я советую вам использовать функтоид Не равно, чтобы установить значение по умолчанию, если оно отличается от "Работа", и если оно равно "Работа", вы будете иметь исходное значение на выходе

Попробуйте сделать карту целиком в формате xlst вместо использования фунтоидов карты BizTalk. Сначала вы будете бороться с xslt, но через некоторое время вам это понравится!

Я не буду публиковать полное решение здесь, но я нашел хороший пост Youtube, который объясняет все. Это интересно в 3:00.

Если телефон # имеет фиксированную длину, вы можете объединить строку по умолчанию в правой части, а затем передать строку влево.

Другие вопросы по тегам