Desarrollar un functoid en línea personalizado

Los functoids en línea personalizados proporcionan funcionalidad al copiar directamente el código de implementación en una asignación, en lugar de hacer referencia a un ensamblado, una clase y un nombre de método como en el caso de los functoids personalizados a los que se hace referencia.

Generar una secuencia de comandos en línea

Hay dos formas de proporcionar una secuencia de comandos para incluirla en la asignación. Seleccione uno de los métodos siguientes según si el functoid personalizado es compatible con un número variable de parámetros:

  • Invalide GetInlineScriptBuffer cuando el functoid personalizado acepta un número variable de parámetros de entrada y ha establecido la propiedad trueHasVariableInputs en . Por ejemplo, utilice este método si desea concatenar un número variable de cadenas o buscar el valor más grande de un conjunto de valores.

  • Use SetScriptBuffer cuando no sea necesario admitir un número variable de parámetros de entrada. Aunque puede seguir utilizando parámetros opcionales, el número total de parámetros es fijo.

    Estos dos métodos requieren implementaciones diferentes.

Proporcionar código en línea con SetScriptBuffer

Para configurar el functoid personalizado para usar la secuencia de comandos en línea:

  1. Llame a AddScriptTypeSupport con Microsoft.BizTalk.BaseFunctoids.ScriptType para habilitar el código insertado y establecer el tipo de script admitido.

  2. Invoque SetScriptBuffer para establecer el código que se usará para el functoid personalizado. Llamará a esta función tres veces con el functionNumber parámetro para functoids acumulativos personalizados y una vez para functoids no acumulativos personalizados.

  3. Use SetScriptGlobalBuffer para declarar las variables globales que use el código insertado.

  4. Use RequiredGlobalHelperFunctions para indicar las funciones auxiliares que requiere el functoid insertado personalizado.

    Puede generar la secuencia de comandos mediante StringBuilder o constantes. Un enfoque para escribir código de secuencias de comandos es escribir primero un functoid personalizado al que se hace referencia y, cuando se hayan eliminado todos los errores, convertirlo a en línea mediante la copia de las funciones correspondientes a constantes de cadena.

Proporcionar código en línea con GetInlineScriptBuffer

Si el functoid insertado personalizado admite un número variable de parámetros, invalidará GetInlineScriptBuffer. Para configurar el functoid personalizado para usar la secuencia de comandos en línea:

  1. En el constructor, declare que el functoid personalizado tiene entradas de variable estableciendo HasVariableInputstrueen .

  2. En el constructor, llame a AddScriptTypeSupport con Microsoft.BizTalk.BaseFunctoids.ScriptType para habilitar el código insertado y establecer el tipo de script admitido.

  3. Invalide GetInlineScriptBuffer para construir y devolver el código que se usará en el mapa del functoid personalizado. Use los parámetros para compilar el código correcto comprobando y scriptTypenumParams. El parámetro final, functionNumber, debe ser 0. Esto se debe a que las funciones acumulativas tienen un número fijo de entradas y no usan este mecanismo.

  4. Use SetScriptGlobalBuffer para declarar variables globales que usa el código insertado.

  5. Use RequiredGlobalHelperFunctions para indicar las funciones auxiliares que requiere el functoid insertado personalizado.

    El fragmento de código siguiente compila una función de C# con el número de parámetros pasados numParams , pero sin cuerpo de función. Para usar este fragmento de código, copie el ejemplo a la solución y agregue código para hacer algo con los parámetros y devolver un valor.

// 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;  
}  

Comprobar una secuencia de comandos en línea

La realización de pruebas merece una consideración especial en cualquier esfuerzo de desarrollo. Las pruebas de los functoids en línea personalizados pueden ser complejas. Para simplificar el proceso, utilice una o las dos técnicas siguientes:

  • Examine el XSLT de un mapa que usa el functoid insertado personalizado.

  • Comprobar la entrada y la salida de una asignación que use el functoid en línea personalizado

Examinar el XSLT de una asignación que use el functoid en línea personalizado

Esta técnica suele revelar problemas de lógica o de sintaxis sutiles. También ayuda a comprender lo que ocurre en la asignación.

Para ver el XSLT de una asignación:

  1. En un proyecto de BizTalk de Visual Studio, haga clic en la pestaña Explorador de soluciones, haga clic con el botón derecho en un mapa que use el functoid insertado personalizado y, a continuación, haga clic en Validar mapa.

  2. Desplácese a la ventana Resultados para buscar la dirección URL del archivo XSLT. Presione CTRL y haga clic en la dirección URL para ver el archivo.

Nota

Recuerde que cualquier cambio realizado en el archivo XSLT no se reflejará en el functoid personalizado.

Comprobar una asignación que use el functoid en línea personalizado

Esta técnica comprueba si la asignación y el functoid en línea personalizado funcionan del modo previsto.

Para comprobar una asignación:

  1. En un proyecto de BizTalk de Visual Studio, haga clic en la pestaña Explorador de soluciones, haga clic con el botón derecho en un mapa que use el functoid insertado personalizado y, a continuación, haga clic en Probar mapa.

  2. Desplácese a la ventana Resultados para buscar la dirección URL del archivo de salida. Presione CTRL y haga clic en la dirección URL para ver el archivo.

    Puede comprobar los valores de entrada y de salida para comprobar si el comportamiento de la asignación ha sido el previsto.

Ejemplo

El siguiente ejemplo ilustra cómo crear un functoid en línea personalizado para la concatenación de dos cadenas. Se basa en un archivo de recursos que contiene tres recursos de cadena y un recurso de mapa de bits de 16 x 16 píxeles.

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();  
        }  
    }  
}  

Consulte también

Uso de BaseFunctoid
Desarrollo de un functoid personalizado al que se hace referencia
Functoid personalizado (ejemplo de BizTalk Server)