Partager via


Développement d’un fonctoid inline personnalisé

Les fonctoids inline personnalisés fournissent des fonctionnalités en copiant le code d’implémentation directement dans une carte et non en référençant un assembly, une classe et un nom de méthode comme un fonctoid référencé personnalisé.

Génération d’un script inline

Il existe deux façons de fournir un script pour l’inclusion dans la carte. Choisissez parmi les méthodes suivantes, selon que votre fonctoid personnalisé prend en charge un nombre variable de paramètres :

  • 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 souhaitez concaténer un nombre variable de chaînes ou trouver la plus grande valeur dans un ensemble de valeurs.

  • Utilisez SetScriptBuffer quand 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 nécessitent des implémentations différentes.

Fourniture de code inline avec SetScriptBuffer

Pour configurer votre fonctoid personnalisé pour utiliser un 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 appellerez cette fonction trois fois avec le paramètre functionNumber pour les fonctoids cumulatifs personnalisés et une fois pour les fonctoids noncumulatifs 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 à l’aide de StringBuilder ou de constantes. Une approche de l’écriture de code de script consiste d’abord à écrire un fonctoid référencé personnalisé, puis, lorsque tous les bogues sont éliminés, à le convertir pour qu'il soit en ligne en copiant vos fonctions en constantes de chaîne de caractères.

Fourniture de code inline avec GetInlineScriptBuffer

Si votre fonctoid inline personnalisé prend en charge un nombre variable de paramètres, vous devrez remplacer GetInlineScriptBuffer. Pour configurer votre fonctoid personnalisé pour utiliser un script inline :

  1. Dans le constructeur, déclarez que votre fonctoid personnalisé a des entrées de variable 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 la méthode GetInlineScriptBuffer pour construire et renvoyer le code à utiliser dans le schéma pour votre fonctoid personnalisé. Utilisez les paramètres pour générer le code correct en vérifiant les scriptType et numParams. Le paramètre final, functionNumber, doit être 0. Cela est dû au fait que les fonctions cumulatives ont un nombre fixe d’entrées et n’utilisent pas ce mécanisme.

  4. Utilisez SetScriptGlobalBuffer pour déclarer des variables globales que votre code inline utilise.

  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 pour effectuer quelque chose avec les paramètres et renvoyer une valeur.

// 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 élément important à prendre en compte dans tout effort de développement. Les fonctoids inline personnalisés peuvent être difficiles à tester. Pour simplifier le processus, utilisez une ou les deux techniques suivantes :

  • Examinez le XSLT d’une carte qui utilise le fonctoid inline personnalisé.

  • Vérifiez les données d'entrée et de sortie d'une carte qui utilise le fonctoid inline personnalisé.

Examiner le XSLT d’une carte qui utilise le fonctoid inline personnalisé

Cette technique révèle souvent des problèmes de logique ou de syntaxe subtile. Il vous aide également à comprendre ce qui se passe dans la carte.

Pour afficher le XSLT pour une carte :

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

Remarque

N’oubliez pas que les modifications apportées au fichier XSLT ne seront pas reflétées dans votre fonctoid personnalisé.

Tester une carte qui utilise le fonctoid inline personnalisé

Cela teste si la carte et le fonctoid personnalisé intégré fonctionnent comme prévu.

Pour tester une carte :

  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 Carte de test.

  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 vérifier que la carte se comporte comme prévu.

Exemple :

L’exemple suivant montre comment créer un fonctoid inline personnalisé pour concaténer deux chaînes. Il s’appuie sur un fichier de ressources contenant trois ressources de chaîne et une ressource bitmap de 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'une fonction de référence personnalisée
Functoid personnalisé (un exemple de BizTalk Server)