共用方式為


開發自訂內嵌運算質

自訂內嵌運算質藉由直接複製實作程式碼到對應中,以提供功能,而不是像自訂參考運算質一樣參考組件、類別和方法名稱。

建置內嵌指令碼

有兩種方式可以提供指令碼包含在對應中。 根據您的自訂運算質是否可支援不同數量的參數,從下列方法選擇:

  • 當您的自訂運算質接受可變數目的輸入參數,而且您已將HasVariableInputs屬性設定為 true 時,覆寫GetInlineScriptBuffer。 例如,若您要串連不同數量的字串或尋找一組值中的最大值,即可使用此方法。

  • 當您不需要支援可變數目的輸入參數時,請使用 SetScriptBuffer 。 您還是可以使用選擇性的參數,但參數的總數是固定的。

    這兩種方法需要不同的實作。

提供具有 SetScriptBuffer 的內嵌程式碼

將您的自訂運算質設定為使用內嵌指令碼:

  1. 使用Microsoft.BizTalk.BaseFunctoids.ScriptType呼叫AddScriptTypeSupport以啟用內嵌程式碼並設定支援的腳本類型。

  2. 叫用 SetScriptBuffer 以設定要用於自訂運算質的程式碼。 您將針對自訂累計運算質使用 functionNumber 參數呼叫此函式三次,一次用於自訂非重複運算質。

  3. 使用 SetScriptGlobalBuffer 宣告內嵌程式碼使用的任何全域變數。

  4. 使用 RequiredGlobalHelperFunctions 來指出自訂內嵌運算質所需的協助程式函式。

    您可以使用 StringBuilder 或常數建置您的指令碼。 撰寫指令碼的一個方法是先撰寫自訂參考運算質,排除所有錯誤之後,複製您的運算質到字串常數,以將它轉換為內嵌。

提供具有 GetInlineScriptBuffer 的內嵌程式碼

如果您的自訂內嵌運算質支援可變數目的參數,您將覆寫 GetInlineScriptBuffer。 將您的自訂運算質設定為使用內嵌指令碼:

  1. 在建構函式中,宣告您的自訂運算質具有變數輸入,方法是將 HasVariableInputs 設定為 true

  2. 在建構函式中,使用Microsoft.BizTalk.BaseFunctoids.ScriptType呼叫AddScriptTypeSupport,以啟用內嵌程式碼並設定支援的腳本類型。

  3. 覆寫 GetInlineScriptBuffer 以建構並傳回程序代碼,以用於自訂運算質的對應中。 藉由檢查 scriptTypenumParams ,使用 參數來建置正確的程式碼。 最後的參數 functionNumber 應該是 0。 這是因為累積函式具有固定數目的輸入,而且不會使用此機制。

  4. 使用 SetScriptGlobalBuffer 來宣告內嵌程式碼所使用的全域變數。

  5. 使用 RequiredGlobalHelperFunctions 來指出自訂內嵌運算質所需的協助程式函式。

    下列程式碼片段會建置 C# 函式,其中包含傳入 numParams 但不含函式主體的參數數目。 若要使用此程式碼片段,可將範例複製到您的解決方案,再新增程式碼以參數執行動作並傳回值。

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

測試內嵌指令碼

測試在所有開發工作中都是重要的考量。 自訂內嵌運算質可接受測試。 若要簡化此程序,可使用下列的一種或兩種技術:

  • 檢查使用自訂內嵌運算質的對應之 XSLT。

  • 驗證使用自訂內嵌運算質的對應之輸入和輸出。

檢查使用自訂內嵌運算質的對應之 XSLT

此技術通常可以發現邏輯問題或較容易忽略的語法問題。 也可以協助您瞭解對應中所發生的事。

檢視對應的 XSLT:

  1. 從 Visual Studio BizTalk 專案,按一下[方案總管]索引標籤,以滑鼠右鍵按一下使用自訂內嵌運算質的對應,然後按一下 [驗證對應]。

  2. 捲動至 [輸出] 視窗,以尋找 XSLT 檔案的 URL。 按 CTRL 再按一下 URL,以檢視檔案。

注意

請記住,對 XSLT 檔案所做的任何變更都不會反映在您的自訂運算質中。

測試使用自訂內嵌運算質的對應

這會測試對應和自訂內嵌運算質是否如預期運作。

測試對應:

  1. 從 Visual Studio BizTalk 專案,按一下[方案總管] 索引標籤,以滑鼠右鍵按一下使用自訂內嵌運算質的對應,然後按一下 [測試對應]。

  2. 捲動至 [輸出] 視窗,以尋找輸出檔案的 URL。 按 CTRL 再按一下 URL,以檢視檔案。

    您可以檢查輸入和輸出值,以驗證對應是否如預期運作。

範例

下列範例說明如何建立自訂內嵌運算質以供串連兩個字串。 它依賴包含三個字串資源以及一個 16x16 像素點陣圖資源的資源檔案。

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

另請參閱

使用 BaseFunctoid
開發自訂參考運算質
自訂運算質 (BizTalk Server 範例)