Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как устранить проблему, из-за которой поведение логического парама в функции скрипта изменилось.
Исходная версия продукта: BizTalk Server 2013 Branch, BizTalk Server 2013 Developer, BizTalk Server 2013 Enterprise, BizTalk Server 2013 Standard
Исходный номер базы знаний: 2887564
Симптомы
В BizTalk Server 2013 поведение логических параметров в функциях сценариев в BizTalk Maps изменилось.
Например, рассмотрим следующий код в функции скриптирования:
public int AddIfTrue(int param1, int param2, bool addNum)
{
if (addNum)
return param1+param2;
else return param1;
}
В BizTalk Server 2013 поведение выглядит следующим образом:
- Если
addNumявляется true, false или любым другим значением, то выходное значение -param1+param2. - Если
addNumпусто, выходные данные —param1.
- Если
В предыдущих версиях BizTalk поведение было следующим образом:
- Если
addNumравно false, то вывод будетparam1. - Если
addNumравно true, то вывод — этоparam1+param2. - Если
addNumпуст или имеет любое другое значение, функция завершается ошибкой Строка не распознана как допустимое логическое значение.
- Если
Причина
Начиная с BizTalk Server 2013 модуль преобразования BizTalk использует класс .NET XSLCompiledTransform , а не старый XSLTransform класс из-за многих преимуществ производительности.
Логическое поведение параметра в XSLCompiledTransform классе отличается от XSLTransform класса. Это новое поведение описано здесь: булева функция.
Решение
Чтобы вернуться к предыдущему поведению, код функции скрипта можно изменить так, чтобы он принимал параметр String вместо булевого, а затем преобразовал String в булевое значение внутри кода функции следующим образом:
public int AddIfTrue(int param1, int param2, string addNum)
{
bool addNumBool = System.Convert.ToBoolean(addNum);
if (addNumBool)
return param1+param2;
else return param1;
}
Дополнительная информация
Кроме того, можно настроить подсистему преобразования BizTalk 2013 для использования старого XSLTransform класса. Этот подход не рекомендуется, так как среда потеряет много улучшений производительности и использования памяти, предоставляемых классом XSLCompiledTransform . Это изменение можно внести, добавив DWORD UseXslTransform со значением 1 в следующих местах:
- Для 64-разрядных экземпляров узлов BizTalk:
HKLM\SOFTWARE\Microsoft\BizTalk Server\3.0\Configuration - Для 32-разрядных экземпляров узлов BizTalk и функциональности тестовой карты Visual Studio:
HKLM\SOFTWARE\Wow6432Node\Microsoft\BizTalk Server\3.0\Configuration