Фильтровать по определенному значению, но использовать значение по умолчанию, если оно не существует
У меня есть схема ввода, которая содержит список телефонных номеров с типом номера телефона, который выглядит следующим образом:
<phoneNumbers>
<phoneNumber type="work">...</phoneNumber>
<phoneNumber type="home">...</phoneNumber>
</phoneNumbers>
Я хочу сопоставить только определенный тип номера, скажем, "работа". Если номер телефона типа "работа" недоступен, мне нужно ввести значение по умолчанию.
Вот с чего я начну:
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить значение по умолчанию для вывода, если отсутствует "рабочий" номер телефона.
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.
Если телефон # имеет фиксированную длину, вы можете объединить строку по умолчанию в правой части, а затем передать строку влево.