Partager via


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 :

  1. Appelez AddScriptTypeSupport avec Microsoft.BizTalk.BaseFunctoids.ScriptType pour activer le code inline et définir le type de script pris en charge.

  2. 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.

  3. Utilisez SetScriptGlobalBuffer pour déclarer toutes les variables globales utilisées par votre code inline.

  4. 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 :

  1. Dans le constructeur, déclarez que votre fonctoid personnalisé a des entrées variables en définissant HasVariableInputs sur true.

  2. 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.

  3. 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 scriptTypenumParams. 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.

  4. Utilisez SetScriptGlobalBuffer pour déclarer les variables globales utilisées par votre code inline.

  5. 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

  1. 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.

  2. 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

  1. 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.

  2. 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)