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
true
HasVariableInputs 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:
Llame a AddScriptTypeSupport con Microsoft.BizTalk.BaseFunctoids.ScriptType para habilitar el código insertado y establecer el tipo de script admitido.
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.Use SetScriptGlobalBuffer para declarar las variables globales que use el código insertado.
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:
En el constructor, declare que el functoid personalizado tiene entradas de variable estableciendo HasVariableInputs
true
en .En el constructor, llame a AddScriptTypeSupport con Microsoft.BizTalk.BaseFunctoids.ScriptType para habilitar el código insertado y establecer el tipo de script admitido.
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
scriptType
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.Use SetScriptGlobalBuffer para declarar variables globales que usa el código insertado.
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:
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.
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:
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.
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)