Partager via


Modification du comportement des paramètres booléens de la fonction de script

Cet article vous aide à résoudre le problème où le comportement de l’analyseur booléen dans une fonction de script a changé.

Version de produit d’origine : BizTalk Server 2013 Branch, BizTalk Server 2013 Developer, BizTalk Server 2013 Enterprise, BizTalk Server 2013 Standard
Numéro de base de connaissances d’origine : 2887564

Symptômes

Dans BizTalk Server 2013, le comportement des paramètres booléens dans les fonctions de script dans BizTalk Maps a changé.

Par exemple, considérez le code suivant dans une fonction de script :

public int AddIfTrue(int param1, int param2, bool addNum)
{
    if (addNum)
    return param1+param2;
    else return param1;
}
  • Dans BizTalk Server 2013, le comportement est le suivant :

    • Si addNum la valeur est true, false ou toute autre valeur, la sortie est param1+param2.
    • Si addNum elle est vide, la sortie est param1.
  • Dans les versions antérieures de BizTalk, le comportement était le suivant :

    • Si addNum la valeur est false , la sortie est param1.
    • Si addNum la valeur est true, la sortie est param1+param2.
    • Si addNum elle est vide ou si une autre valeur échoue, la chaîne d’erreur n’a pas été reconnue comme une valeur booléenne valide.

Cause

À compter de BizTalk Server 2013, le moteur de transformation BizTalk utilise la classe .NET XSLCompiledTransform plutôt que la classe plus ancienne XSLTransform en raison des nombreux avantages en matière de performances.

Le comportement du paramètre booléen dans la XSLCompiledTransform classe est différent de celui de XSLTransform la classe. Ce nouveau comportement est documenté ici : fonction booléenne.

Résolution

Pour revenir au comportement précédent, le code de la fonction de script peut être modifié pour prendre un paramètre String au lieu de booléen, puis convertir la chaîne en booléen dans le code de fonction comme suit :

public int AddIfTrue(int param1, int param2, string addNum)
{
    bool addNumBool = System.Convert.ToBoolean(addNum);
    if (addNumBool)
    return param1+param2;
    else return param1;
}

Plus d’informations

Il est également possible de configurer le moteur de transformation BizTalk 2013 pour utiliser l’ancienne XSLTransform classe. Cette approche n’est pas recommandée, car l’environnement perd les nombreuses améliorations de performances et d’utilisation de la mémoire fournies par la XSLCompiledTransform classe. Cette modification peut être apportée en ajoutant DWORD UseXslTransform la valeur 1 aux emplacements suivants :

  • Pour les instances d’hôte BizTalk 64 bits : HKLM\SOFTWARE\Microsoft\BizTalk Server\3.0\Configuration
  • Pour les instances d’hôte BizTalk 32 bits et les fonctionnalités de carte de test de Visual Studio : HKLM\SOFTWARE\Wow6432Node\Microsoft\BizTalk Server\3.0\Configuration