Compartir a través de


Desarrollo de un functoide en línea personalizado

Los functoids personalizados en línea proporcionan funcionalidad copiando código de implementación directamente en un mapa y no haciendo referencia a un ensamblado, clase o nombre de método como un functoid referenciado personalizado.

Crear script en línea

Hay dos maneras de proporcionar script para su inclusión en el mapa. Elija entre los métodos siguientes, en función de si el functoid personalizado admite un número variable de parámetros:

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

  • Use SetScriptBuffer cuando no sea necesario admitir un número variable de parámetros de entrada. Todavía puede usar parámetros opcionales, pero 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 tu functoid personalizado para usar un script 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 va a usar para el functoid personalizado. Llamará a esta función tres veces con el parámetro functionNumber para functoids personalizados acumulativos y una vez para functoids personalizados no acumulativos.

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

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

    Puede compilar el script mediante StringBuilder o constantes. Un enfoque para escribir código de script consiste en escribir primero una función personalizada y, cuando se eliminan todos los errores, convertirla en código en línea copiando tus funciones en constantes de cadena.

Suministrar código en línea con GetInlineScriptBuffer

Si tu functoid personalizado en línea admite un número variable de parámetros, sobrescribirás GetInlineScriptBuffer. Para configurar tu functoid personalizado para usar el script en línea:

  1. En el constructor, declare que el functoid personalizado tiene entradas de variable estableciendo HasVariableInputs en true.

  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. Sobreescriba GetInlineScriptBuffer para construir y devolver el código para usar en el mapa para su functoid personalizado. Usa los parámetros para construir el código correcto comprobando scriptType y numParams. 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 utiliza el código en línea.

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

    El siguiente fragmento de código construye una función de C# con el número de parámetros pasados en numParams, pero sin cuerpo de función. Para usar este fragmento de código, copie el ejemplo en 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;  
}  

Probar un script en línea

Las pruebas son una consideración importante en cualquier esfuerzo de desarrollo. Los functoids insertados personalizados pueden ser difíciles de probar. Para simplificar el proceso, use una o ambas de las técnicas siguientes:

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

  • Verifique la entrada y salida de un mapa que usa el functoid en línea personalizado.

Examinar el XSLT de un mapa que usa el functoid insertado personalizado

Esta técnica suele revelar problemas de lógica o cuestiones de sintaxis sutil. También le ayuda a comprender lo que sucede en el mapa.

Para ver el XSLT de un mapa:

  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 en la ventana Salida 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 los cambios realizados en el archivo XSLT no se reflejarán en el functoid personalizado.

Probar un mapa que usa el functoid insertado personalizado

Esto prueba si el mapa y el functoid inline personalizado funcionan según lo previsto.

Para probar un mapa:

  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 Mapa de pruebas.

  2. Desplácese por la ventana Salida 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 salida para comprobar que el mapa se comportó según lo previsto.

Ejemplo

En el ejemplo siguiente se muestra cómo crear una función personalizada para concatenar 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();  
        }  
    }  
}  

Véase también

Uso de BaseFunctoid
Desarrollo de un functoid personalizado referenciado
Functoid personalizado (ejemplo de BizTalk Server)