Ä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
addNumTrue, false oder False ist, ist die Ausgabe ein andererparam1+param2Wert. - Wenn
addNumleer ist, ist die Ausgabeparam1.
- Wenn
In früheren Versionen von BizTalk war das Verhalten wie folgt:
- Wenn
addNum"false" ist, lautet die Ausgabeparam1. - Wenn
addNumTrue ist, lautet die Ausgabeparam1+param2. - Wenn
addNumleer oder ein anderer Wert ist, schlägt die Funktion mit Fehler String nicht als gültiger boolescher Wert erkannt.
- Wenn
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