Modifica del comportamento dei parametri booleani della funzione di scripting
Questo articolo consente di risolvere il problema in cui il comportamento del parametro booleano all'interno di una funzione di scripting è cambiato.
Versione originale del prodotto: BizTalk Server 2013 Branch, BizTalk Server 2013 Developer, BizTalk Server 2013 Enterprise, BizTalk Server 2013 Standard
Numero KB originale: 2887564
Sintomi
In BizTalk Server 2013, il comportamento dei parametri booleani all'interno delle funzioni di scripting in Mappe BizTalk è cambiato.
Si consideri, ad esempio, il codice seguente all'interno di una funzione di scripting:
public int AddIfTrue(int param1, int param2, bool addNum)
{
if (addNum)
return param1+param2;
else return param1;
}
In BizTalk Server 2013 il comportamento è il seguente:
- Se
addNum
è true, false o qualsiasi altro valore, l'output èparam1+param2
. - Se
addNum
è vuoto, l'output èparam1
.
- Se
Nelle versioni precedenti di BizTalk, il comportamento era il seguente:
- Se
addNum
è false , l'output èparam1
. - Se
addNum
è true, l'output èparam1+param2
. - Se
addNum
è vuoto o qualsiasi altro valore, la funzione ha esito negativo e l'errore String non è stato riconosciuto come valore booleano valido.
- Se
Causa
A partire da BizTalk Server 2013, il motore di trasformazione BizTalk usa la classe .NET XSLCompiledTransform
anziché la classe precedente XSLTransform
a causa dei numerosi vantaggi in termini di prestazioni.
Il comportamento del parametro booleano nella XSLCompiledTransform
classe è diverso dalla XSLTransform
classe . Questo nuovo comportamento è documentato qui: funzione booleana.
Risoluzione
Per ripristinare il comportamento precedente, il codice della funzione di scripting può essere modificato in modo da accettare un parametro String anziché booleano e quindi convertire il valore String in Boolean all'interno del codice della funzione come indicato di seguito:
public int AddIfTrue(int param1, int param2, string addNum)
{
bool addNumBool = System.Convert.ToBoolean(addNum);
if (addNumBool)
return param1+param2;
else return param1;
}
Ulteriori informazioni
È anche possibile configurare il motore di trasformazione BizTalk 2013 per l'uso della classe precedente XSLTransform
. Questo approccio non è consigliato perché l'ambiente perderà i numerosi miglioramenti apportati all'utilizzo delle prestazioni e della memoria forniti dalla XSLCompiledTransform
classe . Questa modifica può essere apportata aggiungendo DWORD UseXslTransform
con il valore 1 nelle posizioni seguenti:
- Per le istanze host BizTalk a 64 bit:
HKLM\SOFTWARE\Microsoft\BizTalk Server\3.0\Configuration
- Per le istanze host BizTalk a 32 bit e la funzionalità Test Map di Visual Studio:
HKLM\SOFTWARE\Wow6432Node\Microsoft\BizTalk Server\3.0\Configuration