實作 IRenderingExtension 介面
轉譯延伸模組會從與實際資料結合的報表定義取得結果,並將產生的資料轉譯成可用的格式。 結合的資料與格式之轉換是利用實作 IRenderingExtension 的 Common Language Runtime (CLR) 類別來完成。 這可將物件模型轉換為檢視器、印表機或是其他輸出目標可取用的輸出格式。
IRenderingExtension 具有三個必須撰寫程式碼的方法:
Render - 轉譯報表。
RenderStream - 從報表轉譯特定的資料流。
GetRenderingResource - 取得報表所需的其他資訊,例如圖示。
下列各節針對這些方法進行更詳細的討論。
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 方法。