Teilen über


Entwickeln eines benutzerdefinierten Inlinefunktoids

Mit benutzerdefinierten Inlinefunktoiden können Sie Implementierungscode direkt in eine Zuordnung kopieren. Bei einem benutzerdefinierten Funktoid, auf das verwiesen wird, erfolgt dieser Vorgang durch den Verweis auf eine Assembly, Klasse und einen Methodennamen.

Erstellen eines Inlineskripts

Es gibt zwei Möglichkeiten, ein Skript zu einer Zuordnung hinzuzufügen. Wählen Sie eine der folgenden Methoden, abhängig davon, ob das benutzerdefinierte Funktoid eine variable Anzahl an Parametern unterstützt:

  • Überschreiben Sie GetInlineScriptBuffer , wenn Ihr benutzerdefiniertes Funktoid eine variable Anzahl von Eingabeparametern akzeptiert und Sie die HasVariableInputs-Eigenschaft auf truefestgelegt haben. Verwenden Sie diese Methode beispielsweise, wenn Sie eine variable Anzahl an Zeichenfolgen verketten oder in einer Reihe von Werten den größten Wert ermitteln möchten.

  • Verwenden Sie SetScriptBuffer , wenn Sie keine variable Anzahl von Eingabeparametern unterstützen müssen. Sie können zwar trotzdem optionale Parameter verwenden, die gesamte Anzahl an Parametern ist jedoch vorgegeben.

    Für diese beiden Methoden sind unterschiedliche Implementierungen erforderlich.

Bereitstellen von Inlinecode mit 'SetScriptBuffer'

So konfigurieren Sie Ihr benutzerdefiniertes Funktoid für die Verwendung von Inlineskripts:

  1. Rufen Sie AddScriptTypeSupport mit Microsoft.BizTalk.BaseFunctoids.ScriptType auf, um Inlinecode zu aktivieren und den unterstützten Skripttyp festzulegen.

  2. Rufen Sie SetScriptBuffer auf, um den Code festzulegen, der für das benutzerdefinierte Funktoid verwendet werden soll. Sie rufen diese Funktion dreimal mit dem functionNumber Parameter für benutzerdefinierte kumulative Funktoide und einmal für benutzerdefinierte nicht-kumulative Funktoide auf.

  3. Verwenden Sie SetScriptGlobalBuffer , um alle globalen Variablen zu deklarieren, die Ihr Inlinecode verwendet.

  4. Verwenden Sie RequiredGlobalHelperFunctions , um die Hilfsfunktionen anzugeben, die Ihr benutzerdefiniertes Inline-Funktoid benötigt.

    Sie können Ihr Skript durch die Verwendung von "StringBuilder" oder von Konstanten aufbauen. Eine Möglichkeit zum Schreiben von Skriptcode besteht darin, zunächst ein benutzerdefiniertes Funktoid zu erstellen, auf das verwiesen wird. Nachdem alle Probleme behoben wurden, können Sie dieses Funktoid in ein Inlinefunktoid konvertieren, indem Sie die Funktionen Ihres benutzerdefinierten Funktoids in Zeichenfolgenkonstanten kopieren.

Bereitstellen von Inlinecode mit 'GetInlineScriptBuffer'

Wenn Ihr benutzerdefiniertes Inline-Funktoid eine variable Anzahl von Parametern unterstützt, überschreiben Sie GetInlineScriptBuffer. So konfigurieren Sie Ihr benutzerdefiniertes Funktoid für die Verwendung von Inlineskripts:

  1. Deklarieren Sie im Konstruktor, dass Ihr benutzerdefiniertes Funktoid variablen Eingaben aufweist, indem Sie HasVariableInputs auf truefestlegen.

  2. Rufen Sie im Konstruktor AddScriptTypeSupport mit Microsoft.BizTalk.BaseFunctoids.ScriptType auf, um Inlinecode zu aktivieren und den unterstützten Skripttyp festzulegen.

  3. Überschreiben Sie GetInlineScriptBuffer , um den Code zu erstellen und zurückzugeben, der in der Zuordnung für Ihr benutzerdefiniertes Funktoid verwendet werden soll. Verwenden Sie die Parameter, um den richtigen Code zu erstellen, indem Sie und scriptTypenumParamsüberprüfen. Der endgültige Parameter , functionNumbersollte 0 sein. Dies liegt daran, dass kumulative Funktionen über eine feste Anzahl von Eingaben verfügen und diesen Mechanismus nicht verwenden.

  4. Verwenden Sie SetScriptGlobalBuffer , um globale Variablen zu deklarieren, die Ihr Inlinecode verwendet.

  5. Verwenden Sie RequiredGlobalHelperFunctions , um die Hilfsfunktionen anzugeben, die Ihr benutzerdefiniertes Inline-Funktoid benötigt.

    Das folgende Codefragment erstellt eine C#-Funktion mit der Anzahl der übergebenen numParams Parameter, aber ohne Funktionstext. Um dieses Codefragment zu verwenden, kopieren Sie das Beispiel in Ihre Lösung, und fügen Sie Code hinzu, um mit den Parametern Aktionen auszuführen und einen Wert auszugeben.

// 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;  
}  

Testen eines Inlineskripts

Das Durchführen von Tests ist ein wichtiger Bestandteil der Entwicklung. Das Testen von benutzerdefinierten Inlinefunktoiden kann eine Herausforderung darstellen. Verwenden Sie eine der beiden folgenden Methoden, um diesen Prozess zu vereinfachen:

  • Überprüfen Sie die XSLT einer Zuordnung, die das benutzerdefinierte Inlinefunktoid verwendet.

  • Überprüfen Sie die Eingabe und Ausgabe einer Zuordnung, die das benutzerdefinierte Inlinefunktoid verwendet.

Überprüfen der XSLT einer Zuordnung, die das benutzerdefinierte Inlinefunktoid verwendet

Diese Methode legt häufig Logik- oder weniger offensichtliche Syntaxprobleme offen. Sie hilft außerdem, die Vorgänge in der Zuordnung zu verstehen.

So zeigen Sie die XSLT für eine Zuordnung an:

  1. Klicken Sie in einem Visual Studio BizTalk-Projekt auf die Registerkarte Projektmappen-Explorer, klicken Sie mit der rechten Maustaste auf eine Karte, die Ihr benutzerdefiniertes Inline-Funktoid verwendet, und klicken Sie dann auf Zuordnung überprüfen.

  2. Blättern Sie im Ausgabefenster bis zur URL der XSLT-Datei. Drücken Sie STRG, und klicken Sie auf die URL, um die Datei anzuzeigen.

Hinweis

Beachten Sie, dass keine an der XSLT-Datei vorgenommenen Änderungen in Ihr benutzerdefiniertes Funktoid übernommen werden.

Testen einer Zuordnung, die das benutzerdefinierte Inlinefunktoid verwendet

Bei diesem Test wird ermittelt, ob die Zuordnung und das benutzerdefinierte Funktoid erwartungsgemäß arbeiten.

So testen Sie eine Zuordnung:

  1. Klicken Sie in einem Visual Studio BizTalk-Projekt auf die Registerkarte Projektmappen-Explorer, klicken Sie mit der rechten Maustaste auf eine Karte, die Ihr benutzerdefiniertes Inline-Funktoid verwendet, und klicken Sie dann auf Testzuordnung.

  2. Blättern Sie im Ausgabefenster bis zur URL der Ausgabedatei. Drücken Sie STRG, und klicken Sie auf die URL, um die Datei anzuzeigen.

    Überprüfen Sie die Ein- und Ausgabewerte, um sicherzustellen, dass die Zuordnung erwartungsgemäß gearbeitet hat.

Beispiel

Im folgenden Beispiel wird gezeigt, wie ein benutzerdefiniertes Inlinefunktoid zum Zusammenfügen von zwei Zeichenfolgen erstellt wird. Es beruht auf einer Ressourcendatei mit drei Zeichenfolgenressourcen und einer 16x16-Pixel-Bitmapressource.

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();  
        }  
    }  
}  

Weitere Informationen

Verwenden der Klasse „BaseFunctoid“
Entwickeln eines benutzerdefinierten Funktoids, auf das verwiesen wird
Benutzerdefiniertes Funktoid (BizTalk Server-Beispiel)