Condividi tramite


Sviluppo di un functoid inline personalizzato

I functoid inline personalizzati forniscono la funzionalità copiando il codice di implementazione direttamente in una mappa e non facendo riferimento a un nome di assembly, classe e metodo come i functoid personalizzati a cui si fa riferimento.

Creazione di uno script inline

Esistono due tecniche per creare uno script da includere nella mappa. La tecnica da scegliere dipende dal fatto che il functoid personalizzato supporti o meno un numero variabile di parametri:

  • Eseguire l'override di GetInlineScriptBuffer quando il functoid personalizzato accetta un numero variabile di parametri di input e si è impostata la proprietà HasVariableInputs su true. Utilizzare, ad esempio, questa tecnica se si desidera concatenare un numero variabile di stringhe o trovare il valore più grande in un set di valori.

  • Usare SetScriptBuffer quando non è necessario supportare un numero variabile di parametri di input. È comunque possibile utilizzare parametri facoltativi, ma il numero totale di parametri è fisso.

    Queste due tecniche richiedono implementazioni diverse.

Fornire codice inline con SetScriptBuffer

Per configurare il functoid personalizzato per l'utilizzo dello script inline:

  1. Chiamare AddScriptTypeSupport con Microsoft.BizTalk.BaseFunctoids.ScriptType per abilitare il codice inline e impostare il tipo di script supportato.

  2. Richiamare SetScriptBuffer per impostare il codice da usare per il functoid personalizzato. Questa funzione verrà chiamata tre volte con il functionNumber parametro per functoid cumulativi personalizzati e una volta per functoid nonmulative personalizzate.

  3. Usare SetScriptGlobalBuffer per dichiarare qualsiasi variabile globale usata dal codice inline.

  4. Usare RequiredGlobalHelperFunctions per indicare le funzioni helper necessarie per il functoid inline personalizzato.

    È possibile creare lo script utilizzando StringBuilder o costanti. Un sistema consiste nello scrivere innanzitutto un functoid personalizzato a cui viene fatto riferimento e dopo che sono stati eliminati tutti i bug convertirlo in functoid inline copiando le funzioni in costanti di tipo stringa.

Fornire codice inline con GetInlineScriptBuffer

Se il functoid inline personalizzato supporta un numero variabile di parametri, si eseguirà l'override di GetInlineScriptBuffer. Per configurare il functoid personalizzato per l'utilizzo dello script inline:

  1. Nel costruttore dichiarare che il functoid personalizzato dispone di input variabili impostando HasVariableInputs su true.

  2. Nel costruttore chiamare AddScriptTypeSupport con Microsoft.BizTalk.BaseFunctoids.ScriptType per abilitare il codice inline e impostare il tipo di script supportato.

  3. Eseguire l'override di GetInlineScriptBuffer per costruire e restituire il codice da usare nella mappa per il functoid personalizzato. Usare i parametri per compilare il codice corretto controllando e scriptTypenumParams. Il parametro finale, functionNumber, deve essere 0. Questa operazione è dovuta al fatto che le funzioni cumulative hanno un numero fisso di input e non usano questo meccanismo.

  4. Usare SetScriptGlobalBuffer per dichiarare variabili globali usate dal codice inline.

  5. Usare RequiredGlobalHelperFunctions per indicare le funzioni helper necessarie per il functoid inline personalizzato.

    Il frammento di codice seguente compila una funzione C# con il numero di parametri passati numParams ma senza corpo di funzione. Per utilizzare questo frammento di codice, copiare l'esempio nella propria soluzione e aggiungere il codice per eseguire un'operazione con i parametri e restituire un valore.

// Override GetInlineScriptBuffer  
protected override string GetInlineScriptBuffer(ScriptType scriptType, int numParams, int functionNumber)  
{  
    // Is this one of the supported script types?  
    if(ScriptType.CSharp == scriptType)  
    {  
        // Assume functionNumber == 0  
        StringBuilder builder = new StringBuilder();  
        // Function declaration   
        builder.Append("public string MyFunction("  
        // Declare parameters using numParams  
        for(int i=0; i<numParams; i++)  
        {  
            // Separate params with a comma  
            if(i > 0)  
                builder.Append(", ");  
            // Declare parameters, param0 to paramNUMPARAM  
            builder.Append("string param" + i.ToString());  
        }  
        builder.Append(")\n");  
        // Function body; process params as needed  
        builder.Append("{\n");  
        builder.Append("}\n");  
        // Return script  
        return builder.ToString();  
    }  
    // scriptType is unsupported  
    return string.Empty;  
}  

Test di uno script inline

Il testing è una parte importante di ogni attività di sviluppo. Il testing dei functoid inline personalizzati può essere particolarmente impegnativo. Per semplificare il processo, utilizzare una delle seguenti tecniche o entrambe:

  • Esaminare il file XSLT di una mappa che utilizza il functoid inline personalizzato.

  • Verificare l'input e l'output di una mappa che utilizza il functoid inline personalizzato.

Esaminare il file XSLT di una mappa che utilizza il functoid inline personalizzato.

Questa tecnica consente spesso di individuare problemi a livello di logica o sintassi. Consente inoltre di capire che cosa succede nella mappa.

Per visualizzare il file XSLT di una mappa:

  1. Da un progetto BizTalk di Visual Studio fare clic sulla scheda Esplora soluzioni, fare clic con il pulsante destro del mouse su una mappa che usa il functoid inline personalizzato e quindi fare clic su Convalida mappa.

  2. Scorrere la finestra di output per trovare l'URL del file XSLT. Premere CTRL e fare clic sull'URL per visualizzare il file.

Nota

Ricordare che le modifiche eventualmente apportate al file XSLT non avranno alcun effetto sul functoid personalizzato.

Test di una mappa che utilizza il functoid inline personalizzato

Con questa tecnica si verifica se la mappa e il functoid inline personalizzato funzionano come desiderato.

Per eseguire il test di una mappa:

  1. Da un progetto BizTalk di Visual Studio fare clic sulla scheda Esplora soluzioni, fare clic con il pulsante destro del mouse su una mappa che usa il functoid inline personalizzato e quindi fare clic su Mappa di test.

  2. Scorrere la finestra di output per trovare l'URL del file di output. Premere CTRL e fare clic sull'URL per visualizzare il file.

    È possibile verificare i valori di input e output per verificare che la mappa funzioni come previsto.

Esempio

Nel seguente esempio viene illustrato come creare un functoid inline personalizzato per concatenare due stringhe. L'esempio si basa su un file di risorse che contiene tre risorse stringa e una risorsa bitmap di 16x16 pixel.

using System;  
using Microsoft.BizTalk.BaseFunctoids;  
using System.Reflection;  
using System.Text;  
  
namespace Microsoft.Samples.BizTalk.CustomFunctoid  
{  
    /// <summary>  
    /// Performs a string concatenation using inline code.  
    /// </summary>  
    public class CustomStringConcatFunctoid : BaseFunctoid  
    {  
        public CustomStringConcatFunctoid()  
            : base()  
        {  
            //ID for this functoid  
            this.ID = 6001;  
  
            // Resource assembly must be ProjectName.ResourceName if building with VS.Net  
            SetupResourceAssembly("Microsoft.Samples.BizTalk.CustomFunctoid.CustomFunctoidResources", Assembly.GetExecutingAssembly());  
  
            // Pass the resource ID names for functoid name, tooltip  
            // description and the 16x16 bitmap for the Map palette  
            SetName("IDS_CUSTOMSTRINGCONCATFUNCTOID_NAME");  
            SetTooltip("IDS_CUSTOMSTRINGCONCATFUNCTOID_TOOLTIP");  
            SetDescription("IDS_CUSTOMSTRINGCONCATFUNCTOID_DESCRIPTION");  
            SetBitmap("IDB_CUSTOMSTRINGCONCATFUNCTOID_BITMAP");  
  
            // Put this string handling function under the String   
            // Functoid tab in the Visual Studio toolbox for functoids  
            this.Category = FunctoidCategory.String;  
  
            // 2 required parameters, no optional parameters  
            this.SetMinParams(2);  
            this.SetMaxParams(2);  
  
            // Functoid accepts two inputs  
            AddInputConnectionType(ConnectionType.AllExceptRecord);  
            AddInputConnectionType(ConnectionType.AllExceptRecord);  
  
            // Set the output connection type  
            this.OutputConnectionType = ConnectionType.AllExceptRecord;  
  
            // Declare support for CSharp inline function and  
            // pass the method implementation to the buffer  
            AddScriptTypeSupport(ScriptType.CSharp);  
            SetScriptBuffer(ScriptType.CSharp, GetCSharpBuffer());  
        }  
  
        private string GetCSharpBuffer()  
        {  
            StringBuilder builder = new StringBuilder();  
  
            builder.Append("public string ConCatStrings(string val1, string val2)\n");  
            builder.Append("{\n");  
            builder.Append("    return val2+val1;\n");  
            builder.Append("}\n");  
  
            return builder.ToString();  
        }  
    }  
}  

Vedere anche

Uso di BaseFunctoid
Sviluppo di un functoid personalizzato a cui si fa riferimento
Custom Functoid (esempio di BizTalk Server)