Freigeben über


Entwickeln eines benutzerdefinierten Inline-Functoids

Benutzerdefinierte Inline-Functoids bieten Funktionalität, indem sie den Implementierungscode direkt in eine Zuordnung kopieren, anstatt auf einen Assembly-, Klassen- und Methodennamen zu verweisen wie bei einem benutzerdefinierten referenzierten Functoid.

Erstellen eines Inlineskripts

Es gibt zwei Möglichkeiten, Skripts für die Aufnahme in die Karte bereitzustellen. Wählen Sie aus den folgenden Methoden, basierend darauf, ob Ihr benutzerdefinierter Functoid eine variable Anzahl von Parametern unterstützt:

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

  • Verwenden Sie SetScriptBuffer , wenn Sie keine variable Anzahl von Eingabeparametern unterstützen müssen. Sie können weiterhin optionale Parameter verwenden, aber die Gesamtanzahl der Parameter ist festgelegt.

    Diese beiden Methoden erfordern unterschiedliche Implementierungen.

Bereitstellen von Inlinecode mit SetScriptBuffer

So konfigurieren Sie Ihr benutzerdefiniertes Functoid 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 Functoid verwendet werden soll. Sie rufen diese Funktion dreimal mit dem functionNumber Parameter für benutzerdefinierte kumulative Functoids und einmal für benutzerdefinierte nichtkumulative Functoids 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-Functoid erfordert.

    Sie können Ihr Skript mithilfe von StringBuilder oder Konstanten erstellen. Ein Ansatz zum Schreiben von Skriptcode besteht darin, zuerst ein benutzerdefiniertes, referenziertes Functoid zu schreiben. Wenn alle Fehler eliminiert werden, konvertieren Sie sie in Inline, indem Sie Ihre Funktionen in Zeichenfolgenkonstanten kopieren.

Bereitstellung von Inline-Code mit GetInlineScriptBuffer

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

  1. Deklarieren Sie im Konstruktor, dass Ihr benutzerdefinierter Functoid variable Eingaben hat, 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 Karte für Ihr benutzerdefiniertes Functoid verwendet werden soll. Verwenden Sie die Parameter, um den richtigen Code zu erstellen, indem Sie scriptType und numParams überprüfen. Der letzte Parameter , functionNumbersollte 0 sein. Dies liegt daran, dass kumulierte 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-Functoid erfordert.

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

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

Tests sind bei allen Entwicklungsanstrengungen ein wichtiger Aspekt. Benutzerdefinierte Inline-Funktoiden können schwierig zu testen sein. Um den Prozess zu vereinfachen, verwenden Sie eine oder beide der folgenden Techniken:

  • Untersuchen Sie die XSLT einer Karte, die das benutzerdefinierte Inline-Functoid verwendet.

  • Überprüfen Sie die Eingabe und Ausgabe einer Karte, die das benutzerdefinierte Inline-Functoid verwendet.

Untersuchung der XSLT einer Karte, die ein kundenspezifisches Inline-Functoid verwendet

Diese Technik zeigt häufig Probleme mit Logik- oder subtilen Syntaxproblemen auf. Es hilft Ihnen auch zu verstehen, was in der Karte passiert.

So anzeigen Sie die XSLT für eine Karte:

  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-Functoid verwendet, und klicken Sie dann auf Karte validieren.

  2. Scrollen Sie im Ausgabefenster, um die URL für die XSLT-Datei zu finden. Drücken Sie STRG, und klicken Sie auf die URL, um die Datei anzuzeigen.

Hinweis

Denken Sie daran, dass änderungen, die an der XSLT-Datei vorgenommen wurden, nicht in Ihrem benutzerdefinierten Functoid widergespiegelt werden.

Testen einer Karte, die das benutzerdefinierte Inline-Functoid verwendet

Dadurch wird getestet, ob die Karte und die benutzerdefinierte Inline-Funktion erwartungsgemäß funktionieren.

So testen Sie eine Karte:

  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-Functoid verwendet, und klicken Sie dann auf Karte testen.

  2. Scrollen Sie im Ausgabefenster, um die URL für die Ausgabedatei zu finden. Drücken Sie STRG, und klicken Sie auf die URL, um die Datei anzuzeigen.

    Sie können Eingabe- und Ausgabewerte überprüfen, um zu überprüfen, ob sich die Zuordnung wie erwartet verhält.

Beispiel

Das folgende Beispiel veranschaulicht das Erstellen eines benutzerdefinierten Inline-Functoids zum Verketten von zwei Zeichenfolgen. Sie basiert auf einer Ressourcendatei, die drei Zeichenfolgenressourcen und eine Bitmapressource mit 16 x 16 Pixeln enthält.

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

Siehe auch

Verwenden von BaseFunctoid
Entwickeln eines benutzerdefinierten Referenz-Functoids
Benutzerdefiniertes Functoid (BizTalk Server-Beispiel)