Ändern des Verhaltens des booleschen Parameters der Skriptfunktion

Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem sich das Verhalten eines booleschen Param innerhalb einer Skriptfunktion geändert hat.

Ursprüngliche Produktversion:   BizTalk Server 2013 Branch, BizTalk Server 2013 Developer, BizTalk Server 2013 Enterprise, BizTalk Server 2013 Standard
Ursprüngliche KB-Nummer:   2887564

Problembeschreibung

In BizTalk Server 2013 hat sich das Verhalten von booleschen Parametern innerhalb von Skriptfunktionen in BizTalk Karten geändert.

Betrachten Sie beispielsweise den folgenden Code innerhalb einer Skriptfunktion:

public int AddIfTrue(int param1, int param2, bool addNum)
{
    if (addNum)
    return param1+param2;
    else return param1;
}
  • In BizTalk Server 2013 sieht das Verhalten wie folgt aus:

    • Wenn addNum True, false oder False ist, ist die Ausgabe ein anderer param1+param2 Wert.
    • Wenn addNum leer ist, ist die Ausgabe param1 .
  • In früheren Versionen von BizTalk war das Verhalten wie folgt:

    • Wenn addNum "false" ist, lautet die Ausgabe param1 .
    • Wenn addNum True ist, lautet die Ausgabe param1+param2 .
    • Wenn addNum leer oder ein anderer Wert ist, schlägt die Funktion mit Fehler String nicht als gültiger boolescher Wert erkannt.

Ursache

Ab BizTalk Server 2013 verwendet das BizTalk-Transformationsmodul aufgrund der vielen Leistungsvorteile die .NET-Klasse XSLCompiledTransform anstelle der älteren XSLTransform Klasse.

Das Boolesche Parameterverhalten in der XSLCompiledTransform Klasse unterscheidet sich von der XSLTransform Klasse. Dieses neue Verhalten ist hier dokumentiert: boolesche Funktion.

Lösung

Um zum vorherigen Verhalten zurückzukehren, kann der Skriptfunktionscode so geändert werden, dass anstelle von Boolean ein String-Parameter verwendet wird, und dann die Zeichenfolge im Funktionscode wie folgt in Boolean konvertiert:

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

Weitere Informationen

Es ist auch möglich, das BizTalk 2013-Transformationsmodul für die Verwendung der älteren Klasse zu XSLTransform konfigurieren. Dieser Ansatz wird nicht empfohlen, da die Umgebung die vielen Leistungs- und Speicherauslastungsverbesserungen der XSLCompiledTransform Klasse verliert. Diese Änderung kann durch Hinzufügen DWORD UseXslTransform des Werts 1 an den folgenden Speicherorten vorgenommen werden:

  • Für 64-Bit-BizTalk-Hostinstanzen: HKLM\SOFTWARE\Microsoft\BizTalk Server\3.0\Configuration
  • Für 32-Bit-BizTalk-Hostinstanzen und die Testzuordnungsfunktionalität von Visual Studio:HKLM\SOFTWARE\Wow6432Node\Microsoft\BizTalk Server\3.0\Configuration