Utilisation de références de code personnalisé dans des expressions (Reporting Services)

Mis à jour : 14 avril 2006

Vous pouvez ajouter des fonctions personnalisées à un rapport ou des références aux fonctions qui existent dans des assemblys externes. ‎Le serveur de rapports ajoute automatiquement des références pour les assemblys Microsoft.VisualBasic, System.Convert et System.Math. Des assemblys supplémentaires peuvent être référencés à l'aide de la boîte de dialogue Propriétés du rapport ou de l'élément CodeModules de la définition de rapport.

La boîte de dialogue Propriétés du rapport permet également de définir de nouvelles fonctions personnalisées. Pour définir des fonctions personnalisées dans la définition de rapport, utilisez l'élément Code. Cependant, les fonctions ne peuvent pas recevoir des ensembles de valeurs de données : les agrégations personnalisées ne sont notamment pas prises en charge.

Vous pouvez écrire votre propre code sur mesure afin de l'utiliser dans les expressions d'un rapport. Pour cela, deux solutions s'offrent à vous : vous pouvez incorporer le code dans un rapport ou faire référence à des méthodes présentes dans un assembly personnalisé. L'incorporation de code convient dans le cas de fonctions complexes ou de fonctions utilisées plusieurs fois dans un même rapport. Quant aux assemblys, il est préférable de les utiliser si vous voulez centraliser du code en un emplacement unique et le partager entre plusieurs rapports.

Code incorporé

Pour utiliser du code dans un rapport, vous devez ajouter un bloc de code dans le rapport. Ce bloc de code peut contenir plusieurs méthodes. Les méthodes du code incorporé doivent être écrites en Microsoft Visual Basic et doivent être basées sur des instances.

Pour plus d'informations sur l'ajout de code à un rapport, consultez Procédure : ajouter du code à un rapport (Générateur de rapports).

Les méthodes du code incorporé sont disponibles par l'intermédiaire d'un membre Code globalement défini. Pour y accéder, vous devez faire référence au membre Code et au nom de la méthode. L'exemple de code ci-dessous appelle la méthode ToUSD, qui convertit la valeur du champ StandardCost en une valeur exprimée en dollars :

=Code.ToUSD(Fields!StandardCost.Value)

Pour faire référence à des collections globales dans votre code personnalisé, incluez une référence à l'objet Report intégré :

=Report.Parameters!Param1

Les exemples ci-dessous indiquent comment définir des variables et des constantes personnalisées.

Public Const MyNote = "Authored by Bob"
Public Const NCopies As Int32 = 2
Public Dim  MyVersion As String = "123.456"
Public Dim MyDoubleVersion As Double = 123.456

Bien que les constantes personnalisées n'apparaissent pas dans la vue Constantes de l'éditeur d'expressions (qui affiche uniquement les constantes intégrées), vous pouvez leur ajouter des références de n'importe quelle expression, comme le montrent les exemples suivants. Dans une expression, une constante personnalisée est traitée comme une valeur de type Variant.

=Code.MyNote
=Code.NCopies
=Code.MyVersion
=Code.MyDoubleVersion

L'exemple suivant inclut la référence au code et l'implémentation de code de la fonction FixSpelling, qui substitue Bicycle à toutes les occurrences du texte Bike de la valeur du champ SubCategory.

=Code.FixSpelling(Fields!SubCategory.Value)

Le code suivant, lorsqu'il est incorporé dans une définition de rapport, affiche une implémentation de la méthode FixSpelling. Lors de la première exécution de ce code personnalisé, une zone de message affiche le texte substitué. Cet exemple indique comment faire référence à la classe Microsoft .NET Framework StringBuilder et à la classe System.Windows.Forms.MessageBox. Vous devez ajouter une référence aux propriétés de votre rapport pour System.Windows.Forms. Pour plus d'informations, consultez Procédure : ajouter du code à un rapport (Générateur de rapports) et Procédure : ajouter une référence d'assembly à un rapport (Générateur de rapports).

Dim firstTime As Boolean = True 
Public Function FixSpelling(ByVal s As String) As String
   Dim strBuilder As New System.Text.StringBuilder(s)
   If s.Contains("Bike") Then
      strBuilder.Replace("Bike", "Bicycle")
      If firstTime Then
        System.Windows.Forms.MessageBox.Show(strBuilder.ToString())
'       or MsgBox(strBuilder.ToString())
        firstTime = False
      End If
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

Pour plus d'informations sur les collections d'objets globales et leur initialisation, consultez Utilisation de collections globales dans les expressions et Initializing Custom Assembly Objects.

Assemblys personnalisés

Pour utiliser un assembly personnalisé dans un rapport, vous devez créer l'assembly, le rendre accessible au Concepteur de rapports, ajouter une référence à l'assembly dans le rapport et utiliser une expression dans le rapport qui fait référence aux méthodes contenues dans cet assembly. Lorsque le rapport est déployé sur le serveur de rapports, vous devez également déployer l'assembly personnalisé sur le serveur de rapports.

Pour plus d'informations sur la création d'un assembly personnalisé et sur la façon de le rendre disponible pour Reporting Services, consultez Using Custom Assemblies with Reports. Pour obtenir des instructions sur l'ajout d'une référence à un rapport, consultez Procédure : ajouter une référence d'assembly à un rapport (Générateur de rapports).

Pour faire référence à du code personnalisé dans une expression, vous devez appeler le membre d'une classe au sein de l'assembly. La procédure pour ce faire dépend du type de méthode, à savoir statique ou basée sur une instance. Les méthodes statiques d'un assembly personnalisé sont disponibles de façon globale dans le rapport. Elles sont accessibles dans les expressions en spécifiant l'espace de noms, la classe et le nom de la méthode. L'exemple de code ci-dessous appelle la méthode ToGBP, qui convertit la valeur en dollars du champ StandardCost en une valeur exprimée en livres sterling :

=CurrencyConversion.DollarCurrencyConversion.ToGBP(Fields!StandardCost.Value)

Les méthodes basées sur des instances sont disponibles par l'intermédiaire d'un membre Code globalement défini. Vous pouvez y accéder en faisant référence au membre Code, suivi du nom de l'instance et de la méthode. L'exemple de code ci-dessous appelle la méthode ToEUR, qui convertit la valeur en dollars du champ StandardCost en une valeur exprimée en euros :

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)
ms155798.note(fr-fr,SQL.90).gifRemarque :
Dans le Concepteur de rapports, un assembly personnalisé est chargé une fois et il n'est pas déchargé tant que vous ne fermez pas Visual Studio. Si vous affichez un aperçu d'un rapport, modifiez un assembly personnalisé utilisé dans ce rapport, puis affichez à nouveau l'aperçu, vos modifications n'apparaissent pas dans ce deuxième aperçu. Pour recharger l'assembly, fermez et rouvrez Visual Studio, puis affichez l'aperçu du rapport.

Voir aussi

Autres ressources

Utilisation des expressions dans Reporting Services

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

14 avril 2006

Nouveau contenu :
  • Ajout d'exemples.

5 décembre 2005

Nouveau contenu :
  • Nouvelle référence à un objet Report pour des collections globales.