Implémentation de l'interface IRenderingExtension

Comme il est décrit précédemment dans cette section, l'extension de rendu est chargée d'extraire les résultats d'une définition de rapport associée aux données effectives, et de restituer les données résultantes dans un format utilisable. La transformation de la combinaison des données et de la mise en forme s'effectue par le biais d'une classe CLR (Common Language Runtime) qui implémente IRenderingExtension, qui transforme le modèle objet en un format de sortie utilisable par une visionneuse, une imprimante ou une autre cible de sortie.

IRenderingExtension a trois méthodes qui doivent être codées. Il s'agit des méthodes suivantes :

  • Render : effectue le rendu du rapport.

  • RenderStream : effectue le rendu d'un flux spécifique à partir du rapport.

  • GetRenderingResource : obtient des informations supplémentaires, telles que les icônes, nécessaires au rapport.

Ces méthodes sont traitées en détail dans les sections suivantes.

Méthode Render

La méthode Render contient des arguments qui représentent les objets suivants :

  • Objet report lui-même que vous souhaitez restituer. Cet objet contient des informations sur les propriétés, les données et la disposition du rapport. Le rapport est la racine de l'arborescence du modèle objet de rapport.

  • reportServerParameters contenant l'objet dictionnaire de chaînes ainsi que les paramètres du serveur de rapports, le cas échéant.

  • Paramètres deviceInfo contenant les paramètres de périphérique. Pour plus d'informations sur les paramètres de périphérique, consultez Paramètres d'informations de périphérique Reporting Services.

  • Paramètre clientCapabilities qui contient un objet dictionnaire NameValueCollection avec des informations relatives au client destinataire du rendu.

  • RenderProperties contenant des informations sur le résultat du rendu.

  • La fonction createAndRegisterStream est une fonction déléguée à appeler pour obtenir un flux de rendu.

Paramètre deviceInfo

Le paramètre deviceInfo contient des paramètres de rendu, pas des paramètres de rapport. Ces paramètres de rendu sont passés à l'extension de rendu. Les valeurs deviceInfo sont converties en un objet NameValueCollection par le serveur de rapports. Les éléments dans le paramètre deviceInfo sont traités comme des valeurs ne respectant pas la casse. Si la demande de rendu résulte d'un accès URL, les paramètres d'URL de type rc:key=value sont convertis en paires clé/valeur dans l'objet dictionnaire deviceInfo. Le code de détection du navigateur fournit également les éléments suivants dans le dictionnaire clientCapabilities : EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type et AcceptLanguage. Toute paire nom/valeur dans deviceInfo qui n'est pas interprétée par l'extension de rendu est ignorée. L'exemple de code suivant montre un exemple de méthode GetRenderingResource qui extrait des icônes.

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;
}

Méthode RenderStream

La méthode RenderStream restitue un flux particulier à partir du rapport. Tous les flux de données sont créés pendant l'appel Render initial, mais les flux de données ne sont pas renvoyés initialement au client. Cette méthode est utilisée pour des flux de données secondaires (par exemple, des images dans le rendu HTML) ou des pages supplémentaires d'une extension de rendu multi-page (par exemple, Image/EMF).

Méthode GetRenderingResource

Il arrive que le rapport requiert des informations qui ne nécessitent pas le rendu du rapport lui-même. Par exemple, si vous avez besoin de l'icône associée à l'extension de rendu, utilisez le paramètre deviceInfo qui contient la balise unique <Icon>. Utilisez, dans ce cas, la méthode GetRenderingResource. Cette méthode récupère les informations sans exécuter un rendu entier du rapport.