Développement d'un fonctoid Inline personnalisé
Les fonctoids Inline personnalisés fonctionnent en copiant le code d'implémentation directement dans un mappage et non pas en référençant un assembly, une classe et un nom de méthode comme le ferait un fonctoid référencé personnalisé.
Création d’un script Inline
Il existe deux manières de créer du script afin de l'inclure dans le mappage. Choisissez parmi les méthodes suivantes, en fonction du nombre variable de paramètres que votre fonctoid personnalisé prend en charge ou non :
Remplacez GetInlineScriptBuffer lorsque votre fonctoid personnalisé accepte un nombre variable de paramètres d’entrée et que vous avez défini la propriété HasVariableInputs sur
true
. Par exemple, utilisez cette méthode si vous voulez concaténer un nombre variable de chaînes ou trouver la valeur la plus grande dans une série de valeurs.Utilisez SetScriptBuffer lorsque vous n’avez pas besoin de prendre en charge un nombre variable de paramètres d’entrée. Vous pouvez toujours utiliser des paramètres facultatifs, mais le nombre total de paramètres est fixe.
Ces deux méthodes impliquent des implémentations différentes.
Code Inline avec SetScriptBuffer
Pour configurer votre fonctoid personnalisé de sorte qu’il utilise le script Inline :
Appelez AddScriptTypeSupport avec Microsoft.BizTalk.BaseFunctoids.ScriptType pour activer le code inline et définir le type de script pris en charge.
Appelez SetScriptBuffer pour définir le code à utiliser pour le fonctoid personnalisé. Vous allez appeler cette fonction trois fois avec le paramètre pour les
functionNumber
fonctoids cumulatifs personnalisés et une fois pour les fonctoids non simultanés personnalisés.Utilisez SetScriptGlobalBuffer pour déclarer toutes les variables globales utilisées par votre code inline.
Utilisez RequiredGlobalHelperFunctions pour indiquer les fonctions d’assistance requises par votre fonctoid inline personnalisé.
Vous pouvez générer votre script en utilisant StringBuilder ou des constantes. Pour écrire du code de script, une des possibilités consiste à écrire d'abord un fonctoid référencé personnalisé puis, lorsque tous les bogues sont éliminés, à le convertir en un fonctoid Inline en copiant toutes vos fonctions dans des constantes de chaîne.
Code Inline avec GetInlineScriptBuffer
Si votre fonctoid inline personnalisé prend en charge un nombre variable de paramètres, vous remplacerez GetInlineScriptBuffer. Pour configurer votre fonctoid personnalisé de sorte qu’il utilise le script Inline :
Dans le constructeur, déclarez que votre fonctoid personnalisé a des entrées variables en définissant HasVariableInputs sur
true
.Dans le constructeur, appelez AddScriptTypeSupport avec Microsoft.BizTalk.BaseFunctoids.ScriptType pour activer le code inline et définir le type de script pris en charge.
Remplacez GetInlineScriptBuffer pour construire et renvoyer le code à utiliser dans la carte pour votre fonctoid personnalisé. Utilisez les paramètres pour générer le code correct en vérifiant et
scriptType
numParams
. Le paramètre final,functionNumber
, doit être 0. En effet, les fonctions cumulatives ont un nombre fixe d’entrées et n’utilisent pas ce mécanisme.Utilisez SetScriptGlobalBuffer pour déclarer les variables globales utilisées par votre code inline.
Utilisez RequiredGlobalHelperFunctions pour indiquer les fonctions d’assistance requises par votre fonctoid inline personnalisé.
Le fragment de code suivant génère une fonction C# avec le nombre de paramètres transmis,
numParams
mais sans corps de fonction. Pour utiliser ce fragment de code, copiez l'exemple dans votre solution et ajoutez du code avec les paramètres pour qu'une valeur soit renvoyée.
// 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;
}
Test d’un script Inline
Le test est un aspect important de tout effort de développement. Les fonctoids Inline personnalisés peuvent être soumis à un test. Pour simplifier le processus, utilisez l'une des techniques suivantes ou les deux :
Examinez le XSLT d’une carte qui utilise le fonctoid inline personnalisé.
Vérifiez l'entrée et la sortie d'un mappage qui utilise le fonctoid Inline personnalisé.
Examinez le XSLT d'un mappage qui utilise le fonctoid Inline personnalisé.
Cette technique révèle souvent des problèmes de syntaxe subtiles ou de logique. Elle vous aide également à comprendre ce qui se passe dans le mappage.
Pour afficher le XSLT pour un mappage
Dans un projet BizTalk Visual Studio, cliquez sur l’onglet Explorateur de solutions, cliquez avec le bouton droit sur une carte qui utilise votre fonctoid inline personnalisé, puis cliquez sur Valider la carte.
Faites défiler la fenêtre Sortie pour rechercher l'URL du fichier XSLT. Appuyez sur CTRL et cliquez sur l'URL pour afficher le fichier.
Notes
Gardez à l’esprit qu'aucune modification apportée au fichier XSLT ne sera répercutée dans votre fonctoid personnalisé.
Test d'un mappage qui utilise le fonctoid Inline personnalisé
Ce test permet de vérifier que le mappage et le fonctoid Inline personnalisé fonctionnent comme prévu.
Pour tester un mappage
Dans un projet Visual Studio BizTalk, cliquez sur l’onglet Explorateur de solutions, cliquez avec le bouton droit sur une carte qui utilise votre fonctoid inline personnalisé, puis cliquez sur Tester la carte.
Faites défiler la fenêtre Sortie pour rechercher l'URL du fichier de sortie. Appuyez sur CTRL et cliquez sur l'URL pour afficher le fichier.
Vous pouvez vérifier les valeurs d’entrée et de sortie pour vous assurer que le mappage s'est comporté comme prévu.
Exemple
L'exemple suivant montre comment créer un fonctoid Inline personnalisé pour concaténer deux chaînes. Il repose sur un fichier de ressources contenant trois ressources de chaîne et une ressource bitmap 16 x 16 pixels.
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();
}
}
}
Voir aussi
Utilisation de BaseFunctoid
Développement d’un fonctoid référencé personnalisé
Fonctoid personnalisé (exemple BizTalk Server)