Condividi tramite


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.
  • 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.

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