Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
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 appellerez cette fonction trois fois avec le paramètre
functionNumberpour les fonctoids cumulatifs personnalisés et une fois pour les fonctoids noncumulatifs 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 à 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 :
Dans le constructeur, déclarez que votre fonctoid personnalisé a des entrées de variable 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 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
scriptTypeetnumParams. 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.Utilisez SetScriptGlobalBuffer pour déclarer des variables globales que votre code inline utilise.
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 :
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.
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 :
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.
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)