Implementieren der IRenderingExtension-Schnittstelle

Wie bereits zuvor in diesem Kapitel beschrieben, sorgt die Renderingschnittstelle dafür, dass die Ergebnisse aus einer Berichtsdefinition, die mit den tatsächlichen Daten kombiniert wird, übernommen und die resultierenden Daten in ein gebräuchliches Format gerendert werden. Die Umwandlung der kombinierten Daten und der Formatierung erfolgt über eine CLR-Klasse (Common Language Runtime), die IRenderingExtension implementiert, wodurch das Objektmodell in ein Ausgabeformat umgewandelt wird, das von einem Viewer, Drucker oder einem anderen Ausgabegerät verwendet werden kann.

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 benötigt werden.

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

Render-Methode

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

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

  • reportServerParameters mit dem Zeichenfolgen-Wörterbuchobjekt (mit den Parametern für den Berichtsserver, sofern vorhanden).

  • Die deviceInfo-Parameter mit den Geräteeinstellungen. Weitere Informationen zu Geräteeinstellungen finden Sie unter Geräteinformationseinstellungen in Reporting Services.

  • Den clientCapabilities-Parameter mit einem NameValueCollection-Wörterbuchobjekt, das Informationen zu dem Client enthält, zu dem Sie den Rendervorgang durchführen.

  • RenderProperties mit Informationen zum Ergebnis des Rendervorgangs.

  • Bei createAndRegisterStream handelt es sich um eine Delegatfunktion, die aufgerufen wird, um einen Datenstrom für den Rendervorgang abzurufen.

deviceInfo-Parameter

deviceInfo enthält Renderingparameter, keine 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 infolge des URL-Zugriffs aufgetreten ist, werden die URL-Parameter im Format 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 in deviceInfo, 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 bestimmten 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

Manchmal benötigt ein Bericht Informationen, die es nicht erfordern, dass der Bericht selbst gerendert wird. Beispiel: Wenn Sie 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. Diese Methode ruft die Informationen ab, ohne den kompletten Rendervorgang für den Bericht auszuführen.