Procédure : créer des convertisseurs pour les rapports des services PerformancePoint Services
Dernière modification : mardi 30 août 2011
Dans Services PerformancePoint dans Microsoft SharePoint Server 2010, les convertisseurs de rapports sont des contrôles serveur Web qui affichent un rapport dans un composant WebPart. Un convertisseur écrit le code HTML pour la visualisation de rapport (par exemple un tableau ou un graphique), fournit la logique de gestion des paramètres de rapport et extrait l’objet de rapport à partir du référentiel.
S’applique à : SharePoint Server 2010
Les procédures et exemples de code fournis dans cette rubrique sont basés sur la classe SampleReportRenderer de l’exemple d’objets personnalisés. Le convertisseur affiche un tableau et le remplit avec des valeurs obtenues à partir d’un filtre lié. Le code complet de la classe est fourni dans la section « Exemple » de cette rubrique.
Notes
Nous vous recommandons d’utiliser l’exemple de convertisseur de rapport en guise de modèle. Il montre comment appeler des objets dans l’API PerformancePoint Services et illustre les méthodes conseillées pour le développement PerformancePoint Services.
La création d’un convertisseur de rapport nécessite d’effectuer les deux procédures de base suivantes :
Création et configuration de la classe de convertisseur
Définition de la fonctionnalité de convertisseur
Pour créer un convertisseur personnalisé, commencez par créer la classe de convertisseur.
Pour créer et configurer la classe de convertisseur
Installez PerformancePoint Services ou copiez les DLL utilisées par votre extension (répertoriées à l’étape 3) sur votre ordinateur. Pour plus d’informations, voir DLL PerformancePoint Services utilisées dans les scénarios de développement.
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#.
Ajoutez les DLL PerformancePoint Services suivantes en tant que références d’assemblys 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.
Dans votre classe de convertisseur, ajoutez des directives using pour les espaces de noms PerformancePoint Services suivants :
Selon la fonctionnalité de votre extension, il se peut que d’autres directives using soient requises.
Héritez de la classe de base ParameterizableControl.
Après avoir créé et configuré la classe de convertisseur, vous devez définir la fonctionnalité de votre convertisseur.
Pour définir la fonctionnalité du convertisseur
Substituez la méthode GetElement pour extraire l’objet de rapport à partir du référentiel.
Substituez la méthode SetData pour configurer le jeu de données du rapport et extraire les valeurs de paramètres entrantes.
Substituez la méthode Render afin de restituer le code HTML pour la visualisation du rapport.
Étape suivante : après avoir créé un convertisseur de rapport et un éditeur de rapport (notamment son interface utilisateur, le cas échéant), déployez l’extension comme décrit dans Procédure : enregistrer manuellement des extensions PerformancePoint Services. Pour obtenir des instructions sur la façon d’installer et de configurer l’exemple d’extension de filtre, voir la section « Installation des objets de rapport, de filtre et de source de données de l’exemple » dans Exemple de code : objets personnalisés de rapport, de filtre et de source de données tabulaires.
Exemple
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.
Notes
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) ? " " : 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()) ? " " : 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);
}
}
}
Compilation du code
Pour pouvoir compiler cet exemple de code, vous devez configurer votre environnement de développement comme décrit dans Pour créer et configurer une classe de convertisseur.
Sécurité
Vous devez signer votre DLL avec un nom fort. De plus, assurez-vous que tous les assemblys référencés par votre DLL ont des noms forts. Pour plus d’informations sur la façon de signer un assembly avec un nom fort et sur la façon de créer une paire de clés publique/privée, voir How to: Create a Public/Private Key Pair.
Voir aussi
Tâches
Procédure : Créer des éditeurs pour les rapports des services PerformancePoint Services
Autres ressources
Créer des objets personnalisés pour les services PerformancePoint Services
Exemples de code pour les pour les services PerformancePoint Services dans SharePoint Server 2010