Cambio en el comportamiento del parámetro booleano de función de scripting
Este artículo le ayuda a resolver el problema en el que ha cambiado el comportamiento del parámetro booleano dentro de una función de scripting.
Versión del producto original: BizTalk Server 2013 Branch, BizTalk Server 2013 Developer, BizTalk Server 2013 Enterprise, BizTalk Server 2013 Standard
Número KB original: 2887564
Síntomas
En BizTalk Server 2013, el comportamiento de los parámetros booleanos dentro de las funciones de scripting de BizTalk Mapas ha cambiado.
Por ejemplo, considere el siguiente código dentro de una función de scripting:
public int AddIfTrue(int param1, int param2, bool addNum)
{
if (addNum)
return param1+param2;
else return param1;
}
En BizTalk Server 2013, el comportamiento es el siguiente:
- Si
addNumes true, false o cualquier otro valor, el resultado esparam1+param2. - Si
addNumestá vacío, el resultado esparam1.
- Si
En versiones anteriores de BizTalk, el comportamiento era el siguiente:
- Si
addNumes false, el resultado esparam1. - Si
addNumes true, el resultado esparam1+param2. - Si está vacío o cualquier otro valor, la función falla con
addNumel error String no se reconoció como un valor booleano válido.
- Si
Causa
A partir BizTalk Server 2013, el motor de transformación de BizTalk usa la clase .NET en lugar de la clase anterior debido a las muchas XSLCompiledTransform XSLTransform ventajas de rendimiento.
El comportamiento del parámetro Boolean en XSLCompiledTransform la clase es diferente de la XSLTransform clase. Este nuevo comportamiento se documenta aquí: función booleana.
Solución
Para revertir al comportamiento anterior, se puede modificar el código de función de scripting para que tome un parámetro String en lugar de booleano y, a continuación, convierta string en booleano dentro del código de función de la siguiente manera:
public int AddIfTrue(int param1, int param2, string addNum)
{
bool addNumBool = System.Convert.ToBoolean(addNum);
if (addNumBool)
return param1+param2;
else return param1;
}
Más información
También es posible configurar el motor de transformación de BizTalk 2013 para usar la clase XSLTransform anterior. Este enfoque no se recomienda ya que el entorno perderá las muchas mejoras de rendimiento y uso de memoria proporcionadas por la XSLCompiledTransform clase. Este cambio se puede realizar agregando DWORD UseXslTransform con el valor 1 en las siguientes ubicaciones:
- Para instancias de host de BizTalk de 64 bits:
HKLM\SOFTWARE\Microsoft\BizTalk Server\3.0\Configuration - Para instancias de host de BizTalk de 32 bits y Visual Studio de mapa de prueba de Visual Studio:
HKLM\SOFTWARE\Wow6432Node\Microsoft\BizTalk Server\3.0\Configuration