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.
Aunque BizTalk Server proporciona muchos functoids para admitir una variedad de operaciones diversas, es probable que encuentre una situación que requiera un enfoque diferente. Los functoids personalizados ofrecen una forma de ampliar la gama de operaciones disponibles en el entorno de mapeo de BizTalk Server. Cada functoid personalizado se implementa como un ensamblado de .NET mediante clases derivadas de Microsoft.BizTalk.BaseFunctoids. Un ensamblaje puede contener más de un functoid personalizado.
Considere la posibilidad de usar un functoid personalizado en los escenarios siguientes:
Tiene reglas de validación y conversión especiales para un campo de código de caracteres mediante datos que solo son accesibles a través de una API heredada propietaria.
Debe cifrar o descifrar campos mediante la lógica de negocios personalizada y la administración de claves.
Debe generar un código hash a partir de parte del mensaje para su uso en otra aplicación.
Contabilidad solicita que los mensajes transmitidos a su departamento incluyan información resumida sobre las ventas totales para cada tipo de producto.
Quiere reducir la complejidad de un mapa mediante la combinación de varios pasos relacionados, mediante un enfoque diferente o mediante nuevas bibliotecas de clases.
Más de un mapa está utilizando el mismo código de script en un objeto funcional de script.
Debe escribir en el registro de eventos cuando se produce un error en una operación.
Los functoids personalizados se pueden integrar en una solución directamente mediante código en línea o indirectamente a través de una referencia a un método de una biblioteca de clases implementada en la caché global de ensamblado. Ambos tipos de integración se basan en la clase BizTalk.BaseFunctoid y siguen el mismo conjunto de pasos generales:
Cree un nuevo proyecto de biblioteca de clases mediante el lenguaje .NET que prefiera.
Con la utilidad de nomenclatura segura sn.exe, cree un archivo de claves y asígnelo al proyecto.
Agregue una referencia a Microsoft.BizTalk.BaseFunctoids.dll. Este ensamblado contiene la clase base BaseFunctoid .
Cree un archivo de recursos y agréguelo al proyecto. Agregue recursos de cadena para el nombre del functoid, el tooltip y la descripción. Agregue un recurso de imagen de 16 x 16 píxeles para representar el functoid en la paleta del diseñador de mapas.
Implemente la clase functoid derivando de BaseFunctoid, estableciendo parámetros básicos en el constructor y después escribiendo el método functoid y los métodos auxiliares. El ensamblado puede contener varios functoids personalizados.
Implemente el ensamblado y asegúrese de que el nuevo functoid esté disponible en la paleta de herramientas. Consulte Adición y eliminación de functoids personalizados desde el cuadro de herramientas de Visual Studio.
A continuación se muestra una ilustración del functoid Floor.
/// <summary>
/// Floor Functoid - finds the floor of input
/// </summary>
public class FloorFunctoid : BaseFunctoid
{
public FloorFunctoid()
: base()
{
this.ID = 11001;
SetupResourceAssembly("MultipleFunctoids.Resource", Assembly.GetExecutingAssembly());
SetName("NAME_FLOOR");
SetDescription("DESCRIPTION_FLOOR");
SetTooltip("DESCRIPTION_FLOOR");
SetBitmap("IMAGE_FLOOR");
SetExternalFunctionName(GetType().Assembly.FullName, " MultipleFunctoids.FloorFunctoid", "MathFloor");
this.RequiredGlobalHelperFunctions = InlineGlobalHelperFunction.IsNumeric;
AddScriptTypeSupport(ScriptType.CSharp);
SetMinParams(1);
SetMaxParams(1);
this.Category = FunctoidCategory.Math;
this.OutputConnectionType = ConnectionType.AllExceptRecord;
AddInputConnectionType(ConnectionType.AllExceptRecord);
this.HasSideEffects = false;
}
/// <summary>
/// To create the C# function
/// </summary>
/// <param name="scriptType">Script type</param>
/// <param name="numParams">Number of parameters</param>
/// <param name="functionNumber">Functoid number</param>
/// <returns>C# script</returns>
protected override string GetInlineScriptBuffer(ScriptType scriptType, int numParams, int functionNumber)
{
if (ScriptType.CSharp == scriptType)
{
StringBuilder builder = new StringBuilder();
builder.Append("public string MathFloor(string input)\n");
builder.Append("{\n");
builder.Append(" if(string.IsNullOrEmpty(input))\n");
builder.Append(" return string.Empty;\n");
builder.Append("double d = 0.0;\n");
builder.Append("if (IsNumeric(input, ref d))\n");
builder.Append(" return Math.Floor(d).ToString(System.Globalization.CultureInfo.InvariantCulture);\n");
builder.Append("else\n");
builder.Append(" return string.Empty;\n");
builder.Append("}\n");
return builder.ToString();
}
else
{
return string.Empty;
}
}
}
Aunque se usa este código de ejemplo como parte del proyecto de C#, el "Nombre del ensamblado" debe establecerse en "MultipleFunctoids". El proyecto de C# (que contiene este código) debe incluir un archivo Resource.resx.
SetName("NAME_FLOOR");
SetDescription("DESCRIPTION_FLOOR");
SetTooltip("DESCRIPTION_FLOOR");
SetBitmap("IMAGE_FLOOR");
En el código anterior, los valores "NAME_FLOOR", "DESCRIPTION_FLOOR" y "DESCRIPTION_FLOOR" son las "claves" de las cadenas de recursos insertadas en el archivo Resource.resx. Además, "IMAGE_FLOOR" es el nombre de una imagen incrustada en el archivo Resource.resx. Esta imagen actuará como un icono para el functoid.
Si no especifica las claves de recursos adecuadas, o si elimina el método SetName, se crea un functoid personalizado sin nombre, que no es un procedimiento recomendado. Lo mismo se aplica a los métodos SetDescription y SetTooltip. Siempre utiliza estos métodos correctamente para evitar cualquier comportamiento indeseado relacionado con residuos. Sin embargo, puede omitir el método SetBitmap si no tiene imágenes adecuadas para usarse como iconos functoid. En tal caso, el functoid personalizado usa un icono predeterminado, que es inofensivo (a menos que haya varios functoids sin icono).
Para obtener más información sobre cómo crear un functoid personalizado, vea Custom Functoid (Ejemplo de BizTalk Server).
Importante
Algunos identificadores de functoid están reservados por functoids estándar o integrados de mapeador. Normalmente, los functoids estándar de Mapper usan los identificadores del 1 al 10000. Al crear functoids personalizados, no use identificadores de functoids menores que 10000.
En esta sección
Esta sección contiene: