次の方法で共有


カスタム Functoid の開発

BizTalk Server にはさまざまな操作をサポートする Functoid が多数用意されていますが、別のアプローチが必要な状況が発生する可能性があります。 カスタム Functoid は、BizTalk Server マッピング環境内で使用できる操作の範囲を拡張する方法を提供します。 各カスタム Functoid は、 Microsoft.BizTalk.BaseFunctoid から派生したクラスを使用して.NET アセンブリとして展開されます。 アセンブリには、複数のカスタム Functoid を含めることができます。

次のシナリオでは、カスタム ファンクトイドの使用を検討する必要があります。

  • 独自のレガシ API を介してのみアクセスできるデータを使用する文字コード フィールドには、特別な検証規則と変換規則があります。

  • カスタム ビジネス ロジックとキー管理を使用して、フィールドを暗号化または復号化する必要があります。

  • 別のアプリケーションで使用するために、メッセージの一部からハッシュ コードを生成する必要があります。

  • 部署に送信されたメッセージに、各製品の種類別の売上合計に関する概要情報が含まれるという会計要求。

  • マップの複雑さを軽減するには、関連する複数の手順を組み合わせるか、別の方法を使用するか、新しいクラス ライブラリを使用します。

  • 複数のマップが、スクリプト Functoid で同じスクリプト コードを使用しています。

  • 操作が失敗した場合は、イベント ログに書き込む必要があります。

    カスタム Functoid は、インライン コードを使用して直接、またはグローバル アセンブリ キャッシュに配置されたクラス ライブラリ内のメソッドを参照して間接的にソリューションに統合できます。 どちらの種類の統合も BizTalk.BaseFunctoid クラスに依存し、同じ一連の一般的な手順に従います。

  1. 任意の .NET 言語を使用して、新しいクラス ライブラリ プロジェクトを作成します。

  2. 厳密な名前付けユーティリティ sn.exeを使用して、キーファイルを作成し、プロジェクトに割り当てます。

  3. Microsoft.BizTalk.BaseFunctoids.dllへの参照を追加します。 このアセンブリには、 BaseFunctoid 基本クラスが含まれています。

  4. リソース ファイルを作成し、プロジェクトに追加します。 Functoid の名前、ヒント、説明の文字列リソースを追加します。 マップ デザイナー パレットで Functoid を表す 16 x 16 ピクセルの画像リソースを追加します。

  5. BaseFunctoid から派生し、コンストラクターで基本的なパラメーターを確立し、Functoid メソッドと任意のサポート メソッドを記述して、Functoid クラスを実装します。 アセンブリには、複数のカスタム Functoid を含めることができます。

  6. アセンブリを配置し、ツールボックス パレットから新しい Functoid を使用できることを確認します。 Visual Studio ツールボックスからのカスタム Functoid の追加と削除を参照してください。

    Floor Functoid の図解を次に示します。

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

このサンプル コードを C# プロジェクトの一部として使用するときは、"アセンブリ名" を "MultipleFunctoids" に設定する必要があります。 C# プロジェクト (このコードを含む) には、Resource.resx ファイルを含める必要があります。

SetName("NAME_FLOOR");  
SetDescription("DESCRIPTION_FLOOR");  
SetTooltip("DESCRIPTION_FLOOR");  
SetBitmap("IMAGE_FLOOR");  
  

上記のコードでは、値 "NAME_FLOOR"、"DESCRIPTION_FLOOR"、および "DESCRIPTION_FLOOR" は、Resource.resx ファイルに埋め込まれたリソース文字列の "キー" です。 また、"IMAGE_FLOOR" は Resource.resx ファイルに埋め込まれたイメージの名前です。 この画像は Functoid のアイコンとして機能します。

適切なリソース キーを指定しない場合、または SetName メソッドを削除した場合は、名前のないカスタム Functoid が作成されます。これは適切な方法ではありません。 SetDescription メソッドと SetTooltip メソッドでも同じことが当てはまります。 不要なガベージ動作を回避するには、常にこれらのメソッドを適切に使用してください。 ただし、Functoid アイコンとして使用する適切なイメージがない場合は、SetBitmap メソッドをスキップできます。 このような場合は、既定のアイコンがカスタム Functoid によって使用されます。これは無害です (アイコンのない Functoid が複数ある場合を除く)。

カスタム Functoid を作成する方法の詳細については、「 カスタム Functoid (BizTalk Server サンプル)」を参照してください。

Von Bedeutung

特定の Functoid ID は、標準または組み込みのマッパー Functoid によって予約されています。 通常、標準のマッパー Functoid では、1 から 10000 までの ID が使用されます。 カスタム Functoid を作成するときに、10000 未満の Functoid ID を使用しないでください。

このセクションにて

このセクションには、次のものが含まれます。

こちらもご覧ください

Functoid を使用してより複雑なマッピングを作成する