Sviluppo di functoid personalizzati
Sebbene in BizTalk Server siano disponibili vari functoid a sostegno di una serie di operazioni diverse, è possibile che si verifichino situazioni in cui è necessario un approccio differente. I functoid personalizzati consentono di allargare la gamma di operazioni disponibili nell'ambiente di mapping di BizTalk Server. Ogni functoid personalizzato viene distribuito come assembly .NET usando classi derivate da Microsoft.BizTalk.BaseFunctoids. Un assembly può contenere più di un functoid personalizzato.
È consigliabile prendere in considerazione l'utilizzo di un functoid personalizzato negli scenari seguenti:
Si dispone di regole di convalida e di conversione speciali per un campo di codice carattere in cui sono utilizzati dati accessibili solo mediante una API proprietaria di una versione precedente.
È necessario crittografare o decrittografare i campi utilizzando la regola business personalizzata e la gestione delle chiavi.
È necessario generare un codice hash da una parte del messaggio da utilizzare in un'altra applicazione.
Il reparto di contabilità richiede che nei messaggi a esso destinati siano incluse informazioni di riepilogo sulle vendite totali, ordinate per tipo di prodotto.
Si desidera ridurre la complessità di una mappa riunendo vari passaggi correlati, utilizzando un approccio diverso o nuove librerie di classi.
Più di una mappa utilizza lo stesso codice di script in un functoid Script.
È necessario scrivere nel registro eventi in caso di errore di un'operazione.
I functoid personalizzati possono essere integrati in una soluzione direttamente utilizzando codice inline o indirettamente facendo riferimento a un metodo in una libreria di classi distribuita nella Global Assembly Cache. Entrambi i tipi di integrazione si basano sulla classe BizTalk.BaseFunctoid e seguono lo stesso set di passaggi generali:
Creazione di un nuovo progetto di libreria di classi con il linguaggio .NET prescelto.
Creazione di un keyfile, mediante l'utilità sn.exe per l'attribuzione di nomi sicuri, da assegnare al progetto.
Aggiungere un riferimento a Microsoft.BizTalk.BaseFunctoids.dll. Questo assembly contiene la classe base BaseFunctoid .
Creazione di un file di risorse da aggiungere al progetto. Aggiunta di risorse di stringa per nome, descrizione comando e descrizione generica del functoid. Aggiunta di una risorsa immagine da 16x16 pixel che rappresenti il functoid nella tavolozza di progettazione mappe.
Implementare la classe functoid derivando da BaseFunctoid, stabilendo i parametri di base nel costruttore e quindi scrivendo il metodo functoid e tutti i metodi di supporto. L'assembly può contenere più functoid personalizzati.
Distribuzione dell'assembly e verifica che il nuovo functoid sia disponibile nella Tavolozza della Casella degli strumenti. Vedere Aggiunta e rimozione di functoid personalizzati dalla casella degli strumenti di Visual Studio.
Di seguito viene riportata un'illustrazione per il functoid +++Floor.
/// <summary>
/// Floor Functoid - finds the floor of input
/// </summary>
public class FloorFunctoid : BaseFunctoid
{
public FloorFunctoid()
: base()
{
this.ID = 11001;
SetupResourceAssembly("MultipleFunctoids.Resource", Assembly.GetExecutingAssembly());
SetName("NAME_FLOOR");
SetDescription("DESCRIPTION_FLOOR");
SetTooltip("DESCRIPTION_FLOOR");
SetBitmap("IMAGE_FLOOR");
SetExternalFunctionName(GetType().Assembly.FullName, " MultipleFunctoids.FloorFunctoid", "MathFloor");
this.RequiredGlobalHelperFunctions = InlineGlobalHelperFunction.IsNumeric;
AddScriptTypeSupport(ScriptType.CSharp);
SetMinParams(1);
SetMaxParams(1);
this.Category = FunctoidCategory.Math;
this.OutputConnectionType = ConnectionType.AllExceptRecord;
AddInputConnectionType(ConnectionType.AllExceptRecord);
this.HasSideEffects = false;
}
/// <summary>
/// To create the C# function
/// </summary>
/// <param name="scriptType">Script type</param>
/// <param name="numParams">Number of parameters</param>
/// <param name="functionNumber">Functoid number</param>
/// <returns>C# script</returns>
protected override string GetInlineScriptBuffer(ScriptType scriptType, int numParams, int functionNumber)
{
if (ScriptType.CSharp == scriptType)
{
StringBuilder builder = new StringBuilder();
builder.Append("public string MathFloor(string input)\n");
builder.Append("{\n");
builder.Append(" if(string.IsNullOrEmpty(input))\n");
builder.Append(" return string.Empty;\n");
builder.Append("double d = 0.0;\n");
builder.Append("if (IsNumeric(input, ref d))\n");
builder.Append(" return Math.Floor(d).ToString(System.Globalization.CultureInfo.InvariantCulture);\n");
builder.Append("else\n");
builder.Append(" return string.Empty;\n");
builder.Append("}\n");
return builder.ToString();
}
else
{
return string.Empty;
}
}
}
Quando si utilizza questo codice di esempio nell'ambito del proprio progetto C#, il "Nome assembly" deve essere impostato su "+++MultipleFunctoids". Il proprio progetto C# (contenente tale codice) dovrebbe includere un file Resource.resx.
SetName("NAME_FLOOR");
SetDescription("DESCRIPTION_FLOOR");
SetTooltip("DESCRIPTION_FLOOR");
SetBitmap("IMAGE_FLOOR");
Nel suddetto codice, i valori "NAME_FLOOR", "DESCRIPTION_FLOOR" e "DESCRIPTION_FLOOR" sono le "chiavi" delle stringhe delle risorse incorporate nel file Resource.resx. "IMAGE_FLOOR" è invece il nome di un'immagine incorporata nel file Resource.resx. Questa immagine fungerà da icona per il functoid.
Se non si specificano chiavi di risorsa appropriate o se si elimina il metodo SetName, viene creato un functoid personalizzato senza nome, il che non è consigliabile. Ciò si verifica anche per i metodi SetDescription e SetTooltip. Utilizzare sempre questi metodi in modo appropriato per evitare comportamenti indesiderati del garbage. Tuttavia, è possibile ignorare il metodo SetBitmap se non si dispone di immagini appropriate da utilizzare come icone di functoid. In tal caso, il functoid personalizzato utilizzerà un'icona predefinita innocua (a meno che non esistano più functoid senza icona).
Per altre informazioni su come creare un functoid personalizzato, vedere Functoid personalizzato (esempio di BizTalk Server).
Importante
Alcuni ID functoid sono riservati per i functoid standard/incorporati di BizTalk Mapper. In genere, i functoid Mapper standard usano gli ID da 1 a 10000. Durante la creazione di functoid personalizzati, non usare gli ID functoid minori di 10000.
Contenuto della sezione
In questa sezione:
Sviluppo di un functoid personalizzato a cui si fa riferimento
Aggiunta e rimozione di functoid personalizzati dalla casella degli strumenti di Visual Studio