Lors de la conception de rapports, il peut être utile de déporter certains traitements directement dans le rapport. Microsoft, dans sa solution Reporting Services, offre la possibilité d’utiliser du code embarqué littéralement « embedded code » en anglais.
L’utilité, me direz-vous ? Pouvoir réaliser un traitement sur les données récupérées depuis le dataset, traitement qui serait laborieux ou tout simplement impossible à faire depuis la requête SQL ou la procédure stockée.
Dans mon exemple, nous allons procéder à la création d’une fonction permettant un traitement sur une date. Ce traitement, aussi simple qu’il soit, permettra de transformer une date pour qu’elle soit formatée correctement en français. Cette dernière transformera une date sous la forme « 1 juillet 2012 » en «1er juillet 2012 ».
Dans la suite de ce ticket, nous supposerons que le rapport est déjà créé et qu’il possède un dataset permettant la récupération d’une colonne de type « Datetime »
Accéder au "embedded code"
Pour pouvoir créer ou modifier le « embedded code », il vous faut accéder aux propriétés du rapport. Pour cela : Menu > Rapport > Propriétés du rapport
Une fois les propriétés ouvertes, un onglet « Code »
apparaît.
Il suffit ensuite d’écrire son code VB et de valider
Le code permettant le traitement de la date est le suivant :
Public Shared Function GetLitteralDate(ByVal myDate as Date) As String
GetLitteralDate =
String.Empty
If(DatePart(DateInterval.Day,myDate)=
1) Then
GetLitteralDate = "1er " & Format(myDate,
"MMMM yyyy")
Else
GetLitteralDate
= Format(myDate, "d MMMM yyyy")
End If
End
Function
Voilà donc une simple fonction en VB réalisant le traitement désiré
sur la date passée en paramètre.
Maintenant
que la fonction est écrite nous allons voir comment l’utiliser sur les données
du rapport.
Sur la zone
de texte sur laquelle vous voulez appliquer la fonction, faîtes clic-droit >
Propriétés de la zone de texte (Un double-clic est également possible). Pour la suite de ce ticket, nous ferons le
traitement sur le champ « DateReceptionDossier »
Ensuite dans « Valeur »,
cliquez sur « Fx ».
Il suffit alors d’insérer le code suivant qui fait référence à la
fonction créée précédemment.
=Code.GetLitteralDate(First(Fields!DateReceptionDossier.Value,
"MyDataset"))
Test
Il est
désormais temps de tester l’appel de cette fonction. Pour cela, assurez-vous d’avoir
un jeu de données ayant une date au premier jour du mois.
Pour mon
test j’ai pris un enregistrement en base de données pour lequel la valeur de « DateReceptionDossier »
est « 2010-09-01 00:00:00.000 ».
Voilà le
résultat à l’exécution du rapport :
Nous pouvons
voir que la date a bien été formatée grâce à la fonction « GetLitteralDate » .
Conclusion
L’utilisation
du code embarqué sur un rapport Reporting Services est intéressant et permet de
centraliser un traitement au sein d’un rapport.
Dans notre cas, nous aurions pu utiliser la méthode « GetLitteralDate »
pour un nombre infini de champs dans le rapport. Le code embarqué permet
également de réaliser un traitement plus ou moins complexe, sans avoir à toucher
à la requête du Dataset.
On peut
toutefois déplorer le fait de ne pas pouvoir utiliser directement du code en
VB.Net ou en C# .Net. L’utilisation d’une bibliothèque de classes aurait
également permis de pouvoir faire appel à une même méthode / fonction depuis
plusieurs rapports sans avoir à la dupliquer au sein de chacun de ces derniers. Nous ne pouvons donc qu'espérer que Microsoft fasse évoluer cette fonctionnalité dans les versions à venir, notamment la version 2012.
toutefois déplorer le fait de ne pas pouvoir utiliser directement du code en