Share via


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 zusätzliche Informationen ab, die für den Bericht erforderlich sind, z. B. Symbole.

In den folgenden Abschnitten werden diese Methoden ausführlicher erörtert.

Render-Methode

Die Render-Methode enthält Argumente, die folgende Objekte darstellen:

  • Den Bericht, 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.

  • Der deviceInfo-Parameter , der die Geräteeinstellungen enthält. Weitere Informationen finden Sie unter Übergeben von Geräteinformationseinstellungen zum Rendern von Erweiterungen.

  • Der Parameter "clientCapabilities ", der ein NameValueCollection Wörterbuchobjekt enthält, das Informationen zum Client enthält, auf den Sie rendern.

  • Der RenderProperties-Parameter , der Informationen zum Renderingergebnis enthält.

  • createAndRegisterStream ist eine Delegatfunktion, die aufgerufen wird, damit ein Stream 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 zur Browsererkennung bietet auch die folgenden Elemente im clientCapabilities-Wörterbuch: EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type und AcceptLanguage. Die Renderingerweiterung ignoriert jedes Name/Wert-Paar im deviceInfo-Parameter , den er nicht versteht. 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 anfänglichen Render Aufrufs erstellt, die Datenströme werden jedoch anfänglich nicht an den Client zurückgegeben. Diese Methode wird für sekundäre Datenströme verwendet, z. B. Bilder im HTML-Rendering oder andere Seiten einer Mehrseitenrenderingerweiterung, z. B. Image/EMF.

GetRenderingResource-Methode

Die GetRenderingResource-Methode ruft die Informationen ab, ohne den kompletten Renderingvorgang für den Bericht auszuführen. Es gibt Zeiten, in denen der Bericht Informationen erfordert, die nicht erforderlich sind, dass der Bericht selbst gerendert wird. Wenn Sie beispielsweise 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.