共用方式為


實作 IRenderingExtension 介面

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

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

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

Render 方法

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

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

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

  • 包含裝置設定的 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 方法

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