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.
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
true
festgelegt 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.
So konfigurieren Sie Ihr benutzerdefiniertes Funktoid für die Verwendung von Inlineskripts:
Rufen Sie AddScriptTypeSupport mit Microsoft.BizTalk.BaseFunctoids.ScriptType auf, um Inlinecode zu aktivieren und den unterstützten Skripttyp festzulegen.
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.Verwenden Sie SetScriptGlobalBuffer , um alle globalen Variablen zu deklarieren, die Ihr Inlinecode verwendet.
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.
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:
Deklarieren Sie im Konstruktor, dass Ihr benutzerdefiniertes Funktoid variablen Eingaben aufweist, indem Sie HasVariableInputs auf
true
festlegen.Rufen Sie im Konstruktor AddScriptTypeSupport mit Microsoft.BizTalk.BaseFunctoids.ScriptType auf, um Inlinecode zu aktivieren und den unterstützten Skripttyp festzulegen.
Ü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
scriptType
numParams
überprüfen. Der endgültige Parameter ,functionNumber
sollte 0 sein. Dies liegt daran, dass kumulative Funktionen über eine feste Anzahl von Eingaben verfügen und diesen Mechanismus nicht verwenden.Verwenden Sie SetScriptGlobalBuffer , um globale Variablen zu deklarieren, die Ihr Inlinecode verwendet.
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;
}
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.
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:
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.
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.
Bei diesem Test wird ermittelt, ob die Zuordnung und das benutzerdefinierte Funktoid erwartungsgemäß arbeiten.
So testen Sie eine Zuordnung:
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.
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.
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();
}
}
}
Verwenden der Klasse „BaseFunctoid“
Entwickeln eines benutzerdefinierten Funktoids, auf das verwiesen wird
Benutzerdefiniertes Funktoid (BizTalk Server-Beispiel)