Partager via


Développement de fonctoids personnalisés

Bien que BizTalk Server fournit de nombreux fonctoids pour prendre en charge une gamme d’opérations diverses, vous rencontrerez probablement une situation qui nécessite une approche différente. Les fonctoids personnalisés vous permettent d’étendre la plage d’opérations disponibles dans l’environnement de mappage BizTalk Server. Chaque fonctoid personnalisé est déployé en tant qu’assembly .NET à l’aide de classes dérivées de Microsoft.BizTalk.BaseFunctoids. Un assembly peut contenir plusieurs fonctoids personnalisés.

Il est conseillé d’envisager l’utilisation d’un fonctoid personnalisé dans les scénarios suivants :

  • Vous disposez de règles de validation et de conversion spéciales pour un champ de code caractère à l’aide de données accessibles uniquement par le biais d’une API héritée propriétaire.

  • Vous devez chiffrer ou déchiffrer des champs à l’aide de la logique métier personnalisée et de la gestion des clés.

  • Vous devez générer un code de hachage à partir d’une partie du message à utiliser dans une autre application.

  • La comptabilité demande que les messages transmis à leur service incluent des informations récapitulatives sur le total des ventes par type de produit.

  • Vous souhaitez réduire la complexité d’une carte en combinant plusieurs étapes connexes, en utilisant une approche différente ou en utilisant de nouvelles bibliothèques de classes.

  • Plus d'une carte utilise le même code de script dans un fonctoid de script.

  • Vous devez écrire dans le journal des événements en cas d’échec d’une opération.

    Les fonctoids personnalisés peuvent être intégrés directement à une solution à l’aide de code inline ou indirectement par référence à une méthode d’une bibliothèque de classes déployée dans le Global Assembly Cache. Les deux types d’intégration s’appuient sur la classe BizTalk.BaseFunctoid et suivent le même ensemble d’étapes générales :

  1. Créez un projet de bibliothèque de classes à l’aide du langage .NET de votre choix.

  2. À l’aide de l’utilitaire de nommage fort sn.exe, créez un fichier clé et affectez-le au projet.

  3. Ajoutez une référence à Microsoft.BizTalk.BaseFunctoids.dll. Cet assembly contient la classe de base BaseFunctoid .

  4. Créez un fichier de ressources et ajoutez-le au projet. Ajoutez des ressources de chaîne pour le nom du fonctoid, l’info-bulle et la description. Ajoutez une ressource d’image de 16 x 16 pixels pour représenter le fonctoid sur la palette du concepteur de cartes.

  5. Implémentez la classe fonctoid en dérivant de BaseFunctoid, en établissant des paramètres de base dans le constructeur, puis en écrivant la méthode fonctoid et toutes les méthodes de prise en charge. L'assemblage peut contenir plusieurs fonctionnalités personnalisées.

  6. Déployez l’assembly et assurez-vous que la nouvelle fonction est disponible dans la palette d'outils. Consultez Ajout et suppression de fonctoids personnalisés dans la boîte à outils Visual Studio.

    Voici une illustration du fonctoid 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;  
        }  
    }  
}  
  

Lors de l’utilisation de cet exemple de code dans le cadre de votre projet C#, le « Nom de l’assembly » doit être défini sur « MultipleFunctoids ». Votre projet C# (contenant ce code) doit inclure un fichier Resource.resx.

SetName("NAME_FLOOR");  
SetDescription("DESCRIPTION_FLOOR");  
SetTooltip("DESCRIPTION_FLOOR");  
SetBitmap("IMAGE_FLOOR");  
  

Dans le code ci-dessus, les valeurs « NAME_FLOOR », « DESCRIPTION_FLOOR » et « DESCRIPTION_FLOOR » sont les « clés » des chaînes de ressources incorporées dans le fichier Resource.resx. Et « IMAGE_FLOOR » est le nom d’une image incorporée dans le fichier Resource.resx. Cette image agit comme une icône pour le fonctoid.

Si vous ne spécifiez pas de clés de ressource appropriées ou si vous supprimez la méthode SetName, un fonctoid personnalisé sans nom est créé, ce qui n’est pas une bonne pratique. Il en va de même pour les méthodes SetDescription et SetTooltip. Utilisez toujours ces méthodes correctement pour éviter tout comportement de garbage indésirable. Toutefois, vous pouvez ignorer la méthode SetBitmap si vous n’avez pas d’images appropriées à utiliser comme icônes fonctoid. Dans ce cas, une icône par défaut est utilisée par le fonctoid personnalisé, qui est inoffensif (sauf s’il existe plusieurs fonctoids sans icône).

Pour plus d’informations sur la création d’un fonctoid personnalisé, consultez Fonctoid personnalisé (exemple BizTalk Server).

Important

Certains IDs de fonctoids sont réservés par des fonctoids Mapper standard/incorporés. En règle générale, les fonctoids Mapper standard utilisent les ID de 1 à 1 0000. Lors de la création de fonctoids personnalisés, n’utilisez pas les ID de fonctoids inférieurs à 10 000.

Dans cette section

Cette section contient :

Voir aussi

Utilisation de fonctoids pour créer des mappages plus complexes