Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
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 va a usar para el functoid personalizado. Llamará a esta función tres veces con el parámetro
functionNumberpara functoids personalizados acumulativos y una vez para functoids personalizados no acumulativos.Use SetScriptGlobalBuffer para declarar las variables globales que usa el código insertado.
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:
En el constructor, declare que el functoid personalizado tiene entradas de variable estableciendo HasVariableInputs en
true.En el constructor, llame a AddScriptTypeSupport con Microsoft.BizTalk.BaseFunctoids.ScriptType para habilitar el código insertado y establecer el tipo de script admitido.
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
scriptTypeynumParams. 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 utiliza el código en línea.
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:
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 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:
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.
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)