Implémenter l’interface IRenderingExtension

L’extension de rendu prend les résultats d’une définition de rapport combinée avec les données réelles et rend les données résultantes dans un format utilisable. La transformation des données combinées et du formatage est effectuée en utilisant une classe d’exécution du langage commun (CLR) qui implémente IRenderingExtension. Cela transforme le modèle objet en un format de sortie consommable par un visualiseur, une imprimante ou une autre cible de sortie.

Il IRenderingExtension possède trois méthodes à coder :

  • Render - rend le rapport.

  • RenderStream - affiche un flux spécifique à partir du rapport.

  • GetRenderingResource - obtient des informations supplémentaires requises pour le rapport, telles que des icônes.

Les sections suivantes abordent ces méthodes plus en détail.

Méthode de rendu

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

  • Le rapport que vous souhaitez rendre. Cet objet contient les propriétés, les données et les informations de mise en page du rapport. Le rapport est la racine de l’arbre de modèles d’objets du rapport.

  • Les ServerParameters qui contiennent l’objet du dictionnaire de chaînes, avec les paramètres du serveur de rapports, s’il y en a.

  • Le paramètre deviceInfo qui contient les paramètres de l’appareil. Pour plus d’informations, voir Passer les paramètres d’information des appareils vers les extensions de rendu.

  • Le paramètre clientCapabilities qui contient un NameValueCollection objet dictionnaire contenant des informations sur le client auquel vous effectuez le rendu.

  • Le paramètre RenderProperties qui contient des informations sur le résultat de rendu.

  • Le createAndRegisterStream est une fonction de délégué à appeler pour obtenir un flux dans lequel s’afficher.

paramètre deviceInfo

Le paramètre deviceInfo contient les paramètres de rendu, pas les paramètres de rapport. Ces paramètres de rendu sont transmis à l’extension de rendu. Les valeurs deviceInfo sont converties en objet NameValueCollection par le serveur de rapports. Les éléments du paramètre deviceInfo sont traités comme des valeurs insensibles à la majuscule. Si la requête de rendu est la suite d’un accès à URL, les paramètres URL du formulaire rc:key=value sont convertis en paires clé/valeur dans l’objet du 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. L’extension de rendu ignore toute paire nom/valeur dans le paramètre deviceInfo qu’elle ne comprend pas. L’exemple de code suivant montre une méthode d’exemple GetRenderingResource qui récupère les 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 RenderStream méthode affiche un flux particulier à partir du rapport. Tous les flux sont créés lors de l’appel initial Render , mais ils ne sont pas renvoyés au client au départ. Cette méthode est utilisée pour les flux secondaires, tels que les images dans le rendu HTML, ou d’autres pages d’une extension de rendu multi-pages, comme Image/EMF.

Méthode GetRenderingResource

La GetRenderingResource méthode récupère l’information sans exécuter un rendu complet du rapport. Il arrive que le rapport nécessite des informations qui ne nécessitent pas que le rapport lui-même soit fourni. Par exemple, si vous avez besoin de l’icône associée à l’extension de rendu, utilisez le paramètre deviceInfo contenant l’unique tag <Icon>. Dans ces cas, vous pouvez utiliser la GetRenderingResource méthode.