Implementieren der IRenderingExtension-Schnittstelle
Die Renderingerweiterung nimmt die Ergebnisse von einer Berichtsdefinition, die mit den tatsächlichen Daten kombiniert wird, und rendert die resultierenden Daten zu einem Format, das verwendbar ist. Die Transformation der kombinierten Daten und der Formatierung wird mit einer Common Language Runtime (CLR)-Klasse ausgeführt, die IRenderingExtension implementiert. Dies wandelt das Objektmodell in ein Ausgabeformat um, das durch einen Viewer, Drucker oder ein anderes Ausgabeziel konsumierbar ist.
IRenderingExtension verfügt über drei Methoden, die codiert werden müssen.
Render – rendert den Bericht.
RenderStream – rendert einen bestimmten Datenstrom aus dem Bericht.
GetRenderingResource- ruft weitere Informationen ab, z. B. Symbole, die für den Bericht erforderlich sind.
In den folgenden Abschnitten werden diese Methoden ausführlicher erörtert.
Render-Methode
Die Render-Methode enthält Argumente, die folgende Objekte darstellen:
Der report selbst, den Sie rendern möchten. Dieses Objekt enthält Eigenschaften, Daten und Layoutinformationen für den Bericht. Der Bericht ist der Stamm für die Modellstruktur des Berichtsobjekts.
Die ServerParameters>, die das Zeichenfolgen-Wörterbuchobjekt mit den Parametern für den Berichtsserver enthalten, sofern vorhanden.
Die deviceInfo-Parameter mit den Geräteeinstellungen. Weitere Informationen finden Sie unter Geräteinformationseinstellungen in Reporting Services.
Der clientCapabilities-Parameter, der ein NameValueCollection-Wörterbuch enthält, das Informationen über den Client umfasst, zu dem Sie den Rendervorgang durchführen.
RenderProperties mit Informationen zum Ergebnis des Rendervorgangs.
createAndRegisterStream ist eine Delegatfunktion, die aufgerufen wird, damit ein Datenstrom hineingerendert wird.
deviceInfo-Parameter
Der deviceInfo-Parameter enthält Renderingparameter, nicht Berichtsparameter. Diese Renderingparameter werden an die Renderingerweiterung übergeben. Die deviceInfo-Werte werden vom Berichtsserver zu einem NameValueCollection-Objekt konvertiert. Elemente im deviceInfo-Parameter werden als Werte behandelt, bei denen die Groß- und Kleinschreibung nicht beachtet wird. Wenn die Renderinganforderung als Ergebnis des URL-Zugriffs aufgetreten ist, werden die URL-Parameter in Form von rc:key=value zu Schlüssel/Wert-Paaren im deviceInfo-Wörterbuchobjekt umgewandelt. Der Code für die Browserabfrage enthält folgende Elemente im clientCapabilities-Wörterbuch: "EcmaScriptVersion", "JavaScript", "MajorVersion", "MinorVersion", "Win32", "Type" und "AcceptLanguage". Jedes Name/Wert-Paar im deviceInfo-Parameter, das nicht von der Renderingerweiterung erkannt wird, wird ignoriert. Das folgende Codebeispiel zeigt eine GetRenderingResource-Methode, die Symbole abruft:
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-Methode
Die RenderStream-Methode rendert einen besonderen Datenstrom aus dem Bericht. Alle Datenströme werden während des ersten Render-Aufrufs erstellt, aber die Ströme werden anfangs nicht zum Client zurückgegeben. Diese Methode wird für Sekundärströme (wie Bilder in HTML-Rendering) oder zusätzliche Seiten einer mehrseitigen Renderingerweiterung (wie Image/EMF) verwendet.
GetRenderingResource-Methode
Die GetRenderingResource-Methode ruft die Informationen ab, ohne den kompletten Renderingvorgang für den Bericht auszuführen. Manchmal benötigt ein Bericht Informationen, die es nicht erfordern, dass der Bericht selbst gerendert wird. Wenn Sie zum Beispiel das zur Renderingerweiterung gehörige Symbol benötigen, verwenden Sie den deviceInfo-Parameter, der das Einzeltag <Icon> enthält. In diesen Fällen können Sie die GetRenderingResource-Methode verwenden.