Implémentation de l'interface IRenderingExtension

L'extension de rendu prend les résultats d'une définition de rapport qui est combinée aux données réelles et restitue 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. Cela transforme le modèle objet en un format de sortie qui est consommable par une visionneuse, une imprimante ou une autre cible de sortie.

IRenderingExtension a trois méthodes qui doivent être codées :

  • 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 des icônes, nécessaires pour le 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 :

  • Le paramètre report 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.

  • Le paramètre ServerParameters qui contient l'objet dictionnaire de chaînes ainsi que les paramètres du serveur de rapports, le cas échéant.

  • Le paramètre deviceInfo qui contient les paramètres de périphérique. Pour plus d'informations, consultez Paramètres d'informations de périphérique Reporting Services.

  • Le paramètre clientCapabilities qui contient un objet dictionnaire NameValueCollection qui a des informations relatives au client destinataire du rendu.

  • Le paramètre RenderProperties qui contient les informations relatives au résultat de rendu.

  • La fonction createAndRegisterStream est une fonction de délégué à appeler pour obtenir un flux de données 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 le paramètre 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

La méthode GetRenderingResource extrait les informations sans exécuter un rendu entier du rapport. 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.