Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I functoid inline personalizzati forniscono funzionalità copiando il codice di implementazione direttamente in una mappa, invece di fare riferimento a un assembly, una classe e un nome di metodo come fanno i functoid personalizzati di riferimento.
Compilazione di script inline
Esistono due modi per fornire script per l'inclusione nella mappa. Scegliere tra i metodi seguenti, in base al fatto che il functoid personalizzato supporti un numero variabile di parametri:
Eseguire l'override di GetInlineScriptBuffer quando il functoid personalizzato accetta un numero variabile di parametri di input ed è stata impostata la proprietà HasVariableInputs su
true. Ad esempio, usare questo metodo se si desidera concatenare un numero variabile di stringhe o trovare il valore più grande in un set di valori.Usare SetScriptBuffer quando non è necessario supportare un numero variabile di parametri di input. È comunque possibile usare parametri facoltativi, ma il numero totale di parametri è fisso.
Questi due metodi richiedono implementazioni diverse.
Fornitura di codice inline con SetScriptBuffer
Per configurare il tuo functoid personalizzato per utilizzare uno script inline:
Chiamare AddScriptTypeSupport con Microsoft.BizTalk.BaseFunctoids.ScriptType per abilitare il codice inline e impostare il tipo di script supportato.
Richiamare SetScriptBuffer per impostare il codice da usare per il functoid personalizzato. Questa funzione verrà chiamata tre volte con il
functionNumberparametro per i functoid cumulativi personalizzati e una volta per i functoid non cumulativi personalizzati.Usare SetScriptGlobalBuffer per dichiarare le variabili globali usate dal codice inline.
Usare RequiredGlobalHelperFunctions per indicare le funzioni helper richieste dal functoid inline personalizzato.
È possibile compilare lo script usando StringBuilder o costanti. Un approccio alla scrittura di codice script consiste nel scrivere prima un functoid personalizzato di riferimento e, quando tutti i bug vengono eliminati, convertirlo in inline copiando le proprie funzioni in costanti stringa.
Fornitura di codice inline con GetInlineScriptBuffer
Se il functoid inline personalizzato supporta un numero variabile di parametri, si eseguirà l'override di GetInlineScriptBuffer. Per configurare il vostro functoid personalizzato per utilizzare lo script inline:
Nel costruttore dichiarare che il functoid personalizzato dispone di input di variabili impostando HasVariableInputs su
true.Nel costruttore chiamare AddScriptTypeSupport con Microsoft.BizTalk.BaseFunctoids.ScriptType per abilitare il codice inline e impostare il tipo di script supportato.
Sovrascrivere GetInlineScriptBuffer per costruire e restituire il codice da utilizzare nella mappa per il tuo functoid personalizzato. Usare i parametri per costruire il codice corretto controllando tra
scriptTypeenumParams. Il parametro finale,functionNumber, deve essere 0. Ciò è dovuto al fatto che le funzioni cumulative hanno un numero fisso di input e non usano questo meccanismo.Usare SetScriptGlobalBuffer per dichiarare le variabili globali usate dal codice inline.
Usare RequiredGlobalHelperFunctions per indicare le funzioni helper richieste dal functoid inline personalizzato.
Il frammento di codice seguente compila una funzione C# con il numero di parametri passati
numParamsma senza corpo di funzione. Per usare questo frammento di codice, copiare l'esempio nella soluzione e aggiungere codice per eseguire operazioni con i parametri e restituire un valore.
// 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 di uno script inline
Il test è una considerazione importante in qualsiasi attività di sviluppo. I functoid inline personalizzati possono essere difficili da testare. Per semplificare il processo, usare una o entrambe le tecniche seguenti:
Esaminare l'XSLT di una mappa che usa il functoid inline personalizzato.
Verificare l'input e l'output di una mappa che usa una funzione inline personalizzata.
Esaminare l'XSLT di una mappa che utilizza un functoid inline personalizzato
Questa tecnica spesso rivela problemi con la logica o con problemi di sintassi sottili. Consente anche di comprendere cosa accade nella mappa.
Per visualizzare l'XSLT per una mappa:
Da un progetto BizTalk di Visual Studio fare clic sulla scheda Esplora soluzioni , fare clic con il pulsante destro del mouse su una mappa che usa il functoid inline personalizzato e quindi scegliere Convalida mappa.
Scorrere la finestra Output per trovare l'URL del file XSLT. Premere CTRL e fare clic sull'URL per visualizzare il file.
Annotazioni
Tenere presente che tutte le modifiche apportate al file XSLT non verranno riflesse nel functoid personalizzato.
Testare una mappa che utilizza il functoid inline personalizzato
In questo modo viene verificato se la mappa e il functoid inline personalizzato funzionano come previsto.
Per testare una mappa:
Da un progetto BizTalk di Visual Studio fare clic sulla scheda Esplora soluzioni , fare clic con il pulsante destro del mouse su una mappa che usa il functoid inline personalizzato e quindi scegliere Mappa di test.
Scorrere la finestra Output per trovare l'URL del file di output. Premere CTRL e fare clic sull'URL per visualizzare il file.
È possibile controllare i valori di input e output per verificare che la mappa si comporti come previsto.
Esempio
Nell'esempio seguente viene illustrato come creare un functoid inline personalizzato per concatenare due stringhe. Si basa su un file di risorse contenente tre risorse stringa e una risorsa bitmap di 16x16 pixel.
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();
}
}
}
Vedere anche
Uso di BaseFunctoid
Sviluppo di un functoid di riferimento personalizzato
Funzione personalizzata (esempio di BizTalk Server)