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 addNum es true, false o cualquier otro valor, el resultado es param1+param2 .
    • Si addNum está vacío, el resultado es param1 .
  • En versiones anteriores de BizTalk, el comportamiento era el siguiente:

    • Si addNum es false, el resultado es param1 .
    • Si addNum es true, el resultado es param1+param2 .
    • Si está vacío o cualquier otro valor, la función falla con addNum el error String no se reconoció como un valor booleano válido.

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