Un script de rapport appartient à un modèle de rapport individuel. Il s’exécute lors du calcul des données et de la sortie de ce rapport — dans l’Administration, pour un superviseur ou pour un rapport automatique. Il est distinct du script de l’agent et du code de script d’un flow.
Les expressions et champs calculés suffisent à de nombreux calculs. Utilisez un script si le calcul doit réagir à un événement ou effectuer plusieurs étapes. Certains gabarits fournis calculent déjà des valeurs de cette manière.
Le concepteur de rapports reste libellé en anglais dans l’interface française ; les instructions reprennent ces libellés.
Vérifier le langage et le code existant
- Ouvrez le modèle dans le concepteur de rapports. La conception nécessite les droits décrits sous Modèles de rapport.
- Sélectionnez le rapport lui-même, par exemple dans Report Explorer.
- Vérifiez Script Language sous Properties. Les exemples ci-dessous utilisent C# ou Visual Basic ; utilisez uniquement la version correspondant au langage sélectionné.
- Passez à Scripts en haut à droite ou appuyez sur F6. Vérifiez si le modèle contient déjà du code avant de le remplacer.
Le langage de script s’applique à tout le modèle. Le changer ne traduit pas automatiquement le code existant. Le gabarit de base fourni Rapport de l'agent contient du code Visual Basic ; conservez son réglage de langage avec ce code.
Associer les événements
Une fonction du script s’exécute seulement lorsqu’elle est associée à l’événement correspondant d’un élément. Son nom seul ne crée pas cette association.
- Sur la page Scripts, choisissez Control: et Event:.
- Vous pouvez aussi sélectionner un élément, ouvrir ses Scripts sous Properties, puis choisir (New) pour l’événement souhaité. Le concepteur génère le corps de fonction adapté.
- Utilisez ce corps plutôt que de reprendre les paramètres et les noms d’un autre événement. Une bande, un élément de texte et un champ calculé ont des rôles différents.
| Événement | Utilisation |
|---|---|
GetValue d’un champ calculé |
calculer une valeur pour la ligne de données courante et la retourner par e.Value |
BeforePrint d’un élément ou d’une bande |
préparer des propriétés avant l’intégration de l’élément à la sortie du rapport |
Un événement peut s’exécuter plusieurs fois pour les lignes de données ou les éléments de sortie. Ne supposez pas un appel unique par rapport. Un compteur incrémenté par le script ou une variable globale ne remplace pas fiablement les agrégats du concepteur.
Exemple : durée de conversation en minutes
Cet exemple ajoute la durée de conversation en minutes à une liste de
conversations. TotalConnectDuration contient des secondes — voir
Les champs des statistiques.
- Dans Field List, ajoutez un champ calculé nommé
ConversationMinuteset associez-le à la même requête queTotalConnectDuration. - Ne définissez pas de calcul supplémentaire dans son Expression. L’événement effectue le calcul.
- Sous Scripts › GetValue, créez une fonction pour ce champ calculé.
Conservez le nom généré par le concepteur ; dans l’exemple, il s’agit de
CalculateConversationMinutes. - Ajoutez le calcul avec la version correspondant au langage de script.
C# :
using System;
using DevExpress.XtraReports.UI;
private void CalculateConversationMinutes(object sender, GetValueEventArgs e)
{
const string durationColumn = "TotalConnectDuration";
const double secondsPerMinute = 60.0;
const int decimalPlaces = 1;
object duration = e.GetColumnValue(durationColumn);
if (duration is null || duration == DBNull.Value)
{
e.Value = default(double);
return;
}
e.Value = Math.Round(Convert.ToDouble(duration) / secondsPerMinute, decimalPlaces);
}
Visual Basic :
Private Sub CalculateConversationMinutes(ByVal sender As Object, ByVal e As DevExpress.XtraReports.UI.GetValueEventArgs)
Dim duration As Object = e.GetColumnValue("TotalConnectDuration")
If duration Is Nothing OrElse duration Is System.DBNull.Value Then
e.Value = 0.0
Return
End If
e.Value = System.Math.Round(System.Convert.ToDouble(duration) / 60.0, 1)
End Sub
- Faites glisser le champ calculé sur un élément de texte de la bande Detail.
- Cliquez sur Validate, puis ouvrez Preview pour une période contenant des données.
- Vérifiez une ligne connue : 90 secondes donnent 1,5 minute ; une valeur vide de la base donne 0. Enregistrez ensuite le modèle.
Le nom dans l’association de l’événement doit correspondre exactement à celui de la fonction. Si vous modifiez un nom dans le code, adaptez aussi l’association sous Scripts › GetValue.
Valider et rechercher les erreurs
Validate vérifie le code du script. Une validation réussie confirme la compilation ; elle ne prouve pas que le script s’exécute sans erreur pour toutes les lignes. Ouvrez donc ensuite Preview.
| Problème | Points à vérifier |
|---|---|
| Erreur de compilation | Langage du script, orthographe, parenthèses et ligne indiquée ; les messages apparaissent dans Report Design Analyzer. |
| Fonction absente | L’association de l’événement indique une fonction absente ou portant un autre nom dans le code. |
| Le code ne s’exécute pas | L’élément est associé au bon événement et figure dans la sortie. Une fonction non associée reste sans effet. |
| Colonne introuvable | Le nom technique du champ et la requête du champ calculé correspondent ; l’exemple nécessite TotalConnectDuration. |
| Erreur sur certaines lignes seulement | Vérifiez les valeurs vides de la base, les types et les conversions ; une valeur vide peut être DBNull.Value. |
| Résultats différents dans un rapport automatique | Comparez les paramètres, la période, le langage et les accès aux fichiers ou programmes locaux. Le rapport automatique s’exécute sur le serveur. |
Le script est enregistré avec le modèle. Pour un rapport automatique, le code nécessaire doit donc être dans le modèle utilisé ; le code d’un script de l’agent n’est pas exécuté avec lui.