共用方式為


實作 IRenderingExtension 介面

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

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

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

Render 方法

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

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

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

  • 包含裝置設定的 deviceInfo 參數。 如需詳細資訊,請參閱 將裝置資訊設定傳遞至轉譯延伸模組

  • clientCapabilities 參數,其中包含NameValueCollection字典物件,其中包含您要轉譯之用戶端的相關信息。

  • 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 轉譯中的影像,或多頁轉譯延伸模組的其他頁面,例如 Image/EMF。

GetRenderingResource 方法

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