轉譯延伸模組會從與實際數據結合的報表定義中取得結果,並將產生的數據轉譯成可使用的格式。 合併數據和格式的轉換是使用實作 的 Common Language Runtime (CLR) 類別 IRenderingExtension來完成。 這會將物件模型轉換成查看器、印表機或其他輸出目標所消耗的輸出格式。
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 會擷取資訊,而不執行報表的整個轉譯。 有時候報表需要不需要轉譯報表本身的資訊。 例如,如果您需要與轉譯延伸模組相關聯的圖示,請使用包含單一標記<圖示>的 deviceInfo 參數。 在這些情況下,您可以使用 GetRenderingResource 方法。