共用方式為


實作 IRenderingExtension 介面

如本節中前面所述,轉譯延伸模組是負責從與實際資料結合的報表定義取得結果,並將產生的資料轉譯成可用的格式。結合的資料與格式之轉換,是透過實作 IRenderingExtension 的 Common Language Runtime (CLR) 類別來完成,這可將物件模型轉換為檢視器、印表機或是其他輸出目標所取用的輸出格式。

IRenderingExtension 具有三個必須撰寫程式碼的方法。包括:

下列小節針對這些方法進行更詳細的討論。

Render 方法

Render 方法包含代表下列物件的引數:

  • 您要轉譯的 report 本身。這個物件包含報表的屬性、資料與配置資訊。報表是報表物件模型樹狀結構的根目錄。

  • reportServerParameters,包含字串字典物件,含有報表伺服器的參數 (如果有的話)。

  • deviceInfo 參數,包含裝置設定。如需有關裝置資訊設定的詳細資訊,請參閱<Reporting Services 裝置資訊設定>。

  • 包含 NameValueCollection 字典物件的 clientCapabilities 參數,該物件含有您正在轉譯的用戶端之資訊。

  • RenderProperties,包含有關轉譯結果的詳細資訊。

  • createAndRegisterStream 是要呼叫的委派函數,以取得要轉譯成的資料流。

deviceInfo 參數

deviceInfo 包含轉譯參數,而不是報表參數。會將這些轉譯參數傳遞給轉譯延伸模組。報表伺服器會將 deviceInfo 值轉換為 NameValueCollection 物件。在 deviceInfo 參數中的項目會視為不區分大小寫的值。如果轉譯要求是由於 URL 存取而產生,則 rc:key=value 格式的 URL 參數會轉換成 deviceInfo 字典物件中的索引鍵/值組。瀏覽器偵測程式碼也在 clientCapabilities 字典中提供下列項目:EcmaScriptVersion、JavaScript、MajorVersion、MinorVersion、Win32、Type 及 AcceptLanguage。會忽略在 deviceInfo 中轉譯延伸模組不了解的任何名稱/值組。下列程式碼範例會示範擷取圖示的範例 GetRenderingResource 方法。

public void GetRenderingResource (CreateStream createStreamCallback, NameValueCollection deviceInfo)
{
    string[] iconTagValues = deviceInfo.GetValues("Icon");
    if ((iconTagValues != null) && (iconTagValues.Length > 0) )
    {
        // Create a stream to output to.
        Stream outputStream = createStreamCallback(m_iconResourceName, "gif", null, "image/gif", false);
        // Get the GIF image for one of the buttons on the toolbar
        Image requiredImage = (Image) m_resourcemanager.GetObject(m_iconResourceName
        // Write the image to the output stream
        requiredImage.Save(outputStream, requiredImage.RawFormat);
    }
    return;
}

RenderStream 方法

RenderStream 方法會從報表轉譯特定的資料流。在初始 Render 呼叫期間會建立所有的資料流,但是一開始不會將資料流傳回用戶端。這個方法是用於第二個資料流 (例如 HTML 轉譯中的影像) 或是多頁面轉譯延伸模組的其他頁面 (例如影像/EMF)。

GetRenderingResource 方法

有時報表需要的資訊,並不需要轉譯報表本身。例如,如果您需要與轉譯延伸模組相關聯的圖示,請使用包含單一標記 <Icon> 的 deviceInfo 參數。在這些情況下,您可以使用 GetRenderingResource 方法。這個方法會擷取資訊,而不需執行報表的整個轉譯。