Ein Berichtsskript gehört zu einem einzelnen Berichtsdesign. Es wird ausgeführt, wenn dessen Daten und Ausgabe berechnet werden — in der Administration, bei einem Supervisor oder bei einem automatischen Bericht. Es ist weder das Agentenskript noch der Skriptcode eines Flows.
Für viele Berechnungen reichen Ausdrücke und Formelfelder. Verwenden Sie ein Skript, wenn eine Berechnung auf ein Ereignis reagieren oder mehrere Schritte ausführen muss. Manche mitgelieferten Vorlagen berechnen Werte bereits auf diese Weise.
Sprache und vorhandenen Code prüfen
- Öffnen Sie das Berichtsdesign im Berichtsdesigner. Zum Gestalten brauchen Sie die unter Berichtsdesigns beschriebenen Rechte.
- Markieren Sie den Bericht selbst, etwa über den Berichts Explorer.
- Prüfen Sie unter Eigenschaften die Skriptsprache. Die Beispiele unten verwenden C# oder Visual Basic; verwenden Sie nur die Fassung, die zur eingestellten Sprache passt.
- Wechseln Sie rechts oben zu Skripte oder drücken Sie F6. Prüfen Sie, ob das Design schon Code enthält, bevor Sie etwas ersetzen.
Die Skriptsprache gilt für das ganze Design. Ein Wechsel übersetzt vorhandenen Code nicht automatisch in die andere Sprache. Die mitgelieferte Grundvorlage Agentenbericht enthält Visual-Basic-Code; übernehmen Sie ihn zusammen mit seiner Spracheinstellung.
Ereignisse zuordnen
Eine Funktion im Skript läuft erst, wenn sie dem passenden Ereignis eines Elements zugeordnet ist. Der Name allein stellt diese Verbindung nicht her.
- Auf der Seite Skripte wählen Sie Steuerelement: und Ereignis:.
- Alternativ markieren Sie ein Element, öffnen unter Eigenschaften seine Skripte und wählen beim gewünschten Ereignis (Neu). Der Designer erzeugt den passenden Funktionsrumpf.
- Verwenden Sie diesen Rumpf, statt Parameter und Namen aus einem fremden Ereignis zu übernehmen. Ein Band, ein Textelement und ein Formelfeld haben unterschiedliche Aufgaben.
| Ereignis | Verwendung |
|---|---|
GetValue eines Formelfelds |
einen Wert für die aktuelle Datenzeile berechnen und über e.Value zurückgeben |
BeforePrint eines Elements oder Bands |
Eigenschaften vorbereiten, bevor das Element in die Berichtsausgabe eingeht |
Ein Ereignis kann für viele Datenzeilen oder Ausgabeelemente erneut laufen. Rechnen Sie daher mit dem Wert der aktuellen Zeile. Eine selbst hochgezählte globale Variable ist kein verlässlicher Ersatz für die Zusammenfassungen des Designers.
Beispiel: Gesprächszeit in Minuten
Das Beispiel ergänzt eine Liste von Konversationen um die Gesprächszeit in
Minuten. Das Feld TotalConnectDuration enthält Sekunden — siehe
Felder der Statistik.
- Legen Sie in der Feldliste ein Formelfeld mit dem Namen
ConversationMinutesan und ordnen Sie es derselben Abfrage wieTotalConnectDurationzu. - Verwenden Sie für seinen Ausdruck keine zusätzliche Berechnung. Die Berechnung übernimmt das Ereignis.
- Erzeugen Sie für dieses Formelfeld unter Skripte › GetValue eine
Funktion. Behalten Sie den vom Designer erzeugten Namen; im Beispiel
heißt sie
CalculateConversationMinutes. - Ergänzen Sie den Funktionsrumpf mit der Fassung Ihrer Skriptsprache.
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
- Ziehen Sie das Formelfeld auf ein Textelement im Band Detail.
- Klicken Sie auf Validieren und öffnen Sie die Vorschau mit einem Zeitraum, für den Daten vorhanden sind.
- Kontrollieren Sie eine bekannte Zeile: 90 Sekunden ergeben 1,5 Minuten; ein leerer Datenbankwert ergibt 0. Speichern Sie anschließend das Design.
Der Name in der Ereigniszuordnung muss genau zum Funktionsnamen passen. Ändern Sie einen Namen im Code, passen Sie auch die Zuordnung unter Skripte › GetValue an.
Validieren und Fehler finden
Validieren prüft den Skriptcode. Eine erfolgreiche Prüfung bestätigt die Übersetzung; sie beweist noch nicht, dass das Skript mit allen Datenzeilen fehlerfrei läuft. Öffnen Sie deshalb anschließend die Vorschau.
| Problem | Was Sie prüfen |
|---|---|
| Übersetzungsfehler | Skriptsprache, Schreibweise, Klammern und die gemeldete Zeile; Fehlermeldungen stehen im Berichtsdesign-Analysator. |
| Funktion fehlt | Die Ereigniszuordnung nennt eine Funktion, die im Code nicht oder unter einem anderen Namen steht. |
| Code läuft nicht | Das Element ist dem richtigen Ereignis zugeordnet und kommt in der Ausgabe vor. Eine unzugeordnete Funktion bleibt ohne Wirkung. |
| Spalte nicht gefunden | Der technische Feldname und die Abfrage des Formelfelds stimmen; im Beispiel wird TotalConnectDuration benötigt. |
| Fehler nur bei einzelnen Zeilen | Leere Datenbankwerte, Datentypen und Umwandlungen prüfen; ein leerer Wert kann DBNull.Value sein. |
| Abweichende Ergebnisse im automatischen Bericht | Parameter, Zeitraum, Spracheinstellung sowie Zugriffe auf lokale Dateien oder Programme vergleichen. Der automatische Bericht läuft auf dem Server. |
Ein Berichtsskript wird mit dem Design gespeichert. Bei einem automatischen Bericht muss der benötigte Code deshalb im verwendeten Design stehen; Code aus einem Agentenskript wird dort nicht mit ausgeführt.