Partager via


Créer des convertisseurs de rapport pour PerformancePoint Services dans SharePoint

Découvrez comment créer le composant de rendu dans une extension de rapport personnalisée pour PerformancePoint Services.

Quelles sont les convertisseurs de rapport personnalisé pour PerformancePoint Services ?

Dans PerformancePoint Services, les renderers de rapport personnalisés sont des contrôles serveur web qui affichent un rapport personnalisé dans un composant WebPart. Un convertisseur écrit le code HTML pour la visualisation du rapport (par exemple, un tableau ou un graphique), fournit une logique permettant de gérer les paramètres du rapport et récupère l'objet de rapports à partir du référentiel.

Les procédures suivantes et les exemples de code sont basées sur la classe SampleReportRenderer à partir de l' exemple d'objets personnalisés. Le moteur de rendu restitue un tableau et remplit avec les valeurs provenant d'un filtre lié. Pour obtenir le code complet de la classe, voir Exemple de code : Créer un renderer pour les rapports PerformancePoint Services personnalisés dans SharePoint.

Nous vous recommandons d'utiliser le Générateur de rapports d'exemple en tant que modèle. L'exemple montre comment appeler des objets dans l'API PerformancePoint Services et illustre les meilleures pratiques pour le développement de PerformancePoint Services.

Créer des convertisseurs pour les rapports personnalisés PerformancePoint Services

  1. Install PerformancePoint Services, or copy the DLLs that your extension uses (listed in step 3) to your computer. Pour plus d’informations, consultez DLL avec bibliothèques de classes.

  2. Dans Visual Studio, créez une bibliothèque de classes C#. Si vous avez déjà créé une bibliothèque de classes pour votre extension, ajoutez une nouvelle classe C#.

    Vous devez signer votre DLL en utilisant un nom fort. Par ailleurs, assurez-vous que tous les assemblys référencés par votre DLL ont des noms forts. Pour plus d’informations sur la signature d’un assembly avec un nom fort et sur la création d’une paire de clés publique/privée, consultez Guide pratique pour créer une paire de clés publique/privée.

  3. Ajoutez la suivante PerformancePoint Services DLL en tant que références d'assembly au projet :

    • Microsoft.PerformancePoint.Scorecards.Client.dll
    • Microsoft.PerformancePoint.Scorecards.Server.dll
    • Microsoft.PerformancePoint.Scorecards.Store.dll

    Selon la fonctionnalité de votre extension, il se peut que d'autres références de projet soient requises.

  4. Dans votre classe de convertisseur, ajoutez des directives using pour les espaces de noms PerformancePoint Services suivantes :

    Selon la fonctionnalité de votre extension, il se peut que d'autres directives using soient requises.

  5. Héritez de la classe de base ParameterizableControl .

  6. Remplacez la méthode GetElement pour récupérer l’objet de rapport à partir du référentiel.

  7. Remplacez la méthode SetData pour configurer le jeu de données de rapport et récupérer les valeurs des paramètres entrants.

  8. Remplacez la méthode Render pour afficher le code HTML de la visualisation de rapport.

Exemple de code : Créer un renderer pour les rapports PerformancePoint Services personnalisés dans SharePoint

La classe dans l’exemple de code suivant crée un convertisseur de rapport qui affiche des informations de stock passées à partir d’un exemple de filtre.

Pour pouvoir compiler cet exemple de code, vous devez configurer votre environnement de développement comme décrit dans Pour créer et configurer la classe de convertisseur.

using System;
using System.Collections.Generic;
using System.Data;
using System.Web.UI;
using Microsoft.PerformancePoint.Scorecards;
using Microsoft.PerformancePoint.Scorecards.Server.Extensions;
using Microsoft.PerformancePoint.Scorecards.Store;

namespace Microsoft.PerformancePoint.SDK.Samples.SampleReport
{

    // The class that define the sample report's renderer.
    public class SampleReportRenderer : ParameterizableControl
    {
        private ReportView reportView;

        private ReportView ReportView
        {
            get
            {

                // The GetElement method is used internally by this property, which is used
                // in turn by the SetData method.
                reportView = GetElement(ElementLocation) as ReportView;
                return reportView;
            }
        }

        // Initializes the current instance according to a standard interface. This method
        // sets up the dataset.
        public override void SetData(RepositoryLocation elementLocation, string resourcePath, string targetControlId, BIDataContainer dataContainer, bool accessibilityMode)
        {

            // The renderer must call the base implementation of the SetData method
            // to set report properties.
            base.SetData(elementLocation, resourcePath, targetControlId, dataContainer, accessibilityMode);

            if (null != ReportView)
            {

                // If the report view's custom data represents a serialized object, deserialize
                // it, and then use it to access a data source or other object.
                string customData = ReportView.CustomData;
                if (!string.IsNullOrEmpty(customData))
                {
                    System.Diagnostics.Debug.WriteLine(string.Format("Report view '{0}' has the following custom data: {1}", ReportView.Name.Text, customData));
                }

                // Iterate through the user's selections sent by the filter.
                // The MultiSelectTreeControl filter control can send multiple
                // rows of data but other native controls send one message only.
                foreach (ParameterMessage message in BIDataContainer.ParameterMessages)
                {
                    // This line demonstrates how to do something with each incoming parameter message.
                    System.Diagnostics.Debug.WriteLine(string.Format("Parameter message: {0}", message.DisplayName));
                }
            }
        }

        // Render page content using the specified writer.
        protected override void Render(HtmlTextWriter output)
        {
            try
            {
                if (null != ReportView && !string.IsNullOrEmpty(ReportView.CustomData))
                {
                    output.RenderBeginTag(HtmlTextWriterTag.P);
                    output.RenderBeginTag(HtmlTextWriterTag.B);

                    // This line shows how to retrieve the content of the
                    // report's optional CustomData property. CustomData can store
                    // information that the report does not store elsewhere.
                    output.Write(string.Format("The ReportView "{0}" has CustomData information. The CustomData is "{1}"",
                        ReportView.Name.Text, ReportView.CustomData));
                    output.RenderEndTag(); // B
                    output.RenderEndTag(); // P
                }

                Dictionary<Guid, ParameterMessage> parametersIndex =
                    IndexParameterMessages(BIDataContainer.ParameterMessages.ToArray());

                // Each connection gets a unique identifier.
                foreach (Guid parameterMappingId in parametersIndex.Keys)
                {
                    ParameterMessage message = parametersIndex[parameterMappingId];

                    output.RenderBeginTag(HtmlTextWriterTag.Table);

                    output.AddAttribute(HtmlTextWriterAttribute.Style, "ms-partline");
                    output.RenderBeginTag(HtmlTextWriterTag.Tr);

                    output.AddAttribute(HtmlTextWriterAttribute.Colspan, "5");
                    output.RenderBeginTag(HtmlTextWriterTag.Td);

                    output.RenderBeginTag(HtmlTextWriterTag.B);
                    output.Write(string.Format("EndPoint name is: {0}", message.Values.TableName));

                    output.RenderEndTag();  // B
                    output.RenderEndTag();  // Td
                    output.RenderEndTag();  // Tr

                    output.AddAttribute(HtmlTextWriterAttribute.Style, "\\"border-bottom:solid 10px #ffdd00; background:PapayaWhip\\"");
                    output.RenderBeginTag(HtmlTextWriterTag.Tr);

                    // Read the message.Values data table and print the column names.
                    foreach (DataColumn col in message.Values.Columns)
                    {
                        output.RenderBeginTag(HtmlTextWriterTag.Td);
                        output.Write(string.IsNullOrEmpty(col.Caption) ? "&amp;nbsp;" : col.Caption);
                        output.RenderEndTag();
                    }
                    output.RenderEndTag();  // Tr

                    // Print the data from the Values property, which is a data table.
                    foreach (DataRow row in message.Values.Rows)
                    {
                        output.RenderBeginTag(HtmlTextWriterTag.Tr);
                        for (int i = 0; i < message.Values.Columns.Count; i++)
                        {
                            output.RenderBeginTag(HtmlTextWriterTag.Td);
                            output.Write(string.IsNullOrEmpty(row[i].ToString()) ? "&amp;nbsp;" : row[i].ToString());
                            output.RenderEndTag();
                        }
                        output.RenderEndTag();  // Tr
                    }
                    output.RenderEndTag(); // table
                }
            }
            catch (Exception e)
            {
                output.RenderBeginTag(HtmlTextWriterTag.H1);
                output.Write("Error! An exception has occurred!");
                output.RenderEndTag();

                output.RenderBeginTag(HtmlTextWriterTag.P);
                output.Write(e.Message);
                output.RenderEndTag();

                output.RenderBeginTag(HtmlTextWriterTag.P);
                output.Write(e.StackTrace);
                output.RenderEndTag();
            }
        }

        // Get the report object.
        protected override Element GetElement(RepositoryLocation elementLocation)
        {
            ReportView rv = null;
            if (!RepositoryLocation.IsNullOrEmpty(elementLocation))
            {
                rv = SPDataStore.GlobalDataStore.GetReportViewForExecution(elementLocation);
            }
            return (rv);
        }
    }
}

Étapes suivantes

Après avoir créé un renderer de rapport et un éditeur de rapport (y compris son interface utilisateur, si nécessaire), déployez l’extension comme décrit dans Guide pratique pour inscrire manuellement PerformancePoint Services extensions.

Voir aussi