4.9 Użycie wykresu w treści raportu

 

 

 

Oprócz tabel do treści raportu mogą być także wstawiane wykresy. Podobnie jak w przypadku tabel, wykresy mogą być tworzone na podstawie danych pochodzących z odczytu danych archiwalnych zmiennych procesowych lub danych dostarczonych w kolekcji lub obiekcie DataTable.

 

Przykładowy skrypt służy do generacji raportu pokazanego na ilustracji.

 

 

 

 

 

Rys. Raport z wykresem.

 

 

 

 C#

 
using System;
		
using Askom.AsixEvo.Scripting;
		
using MigraDoc.DocumentObjectModel;
		
using MigraDoc.DocumentObjectModel.Shapes;
		
using MigraDoc.DocumentObjectModel.Shapes.Charts; 
		
 
public class Wykres : IScript
		
{
		
   public bool Initialize(string[] aParameters, IApplication aApplication)
		
   {
		
      try
		
      {
		
         DateTime reportDate = DateTime.Parse(aParameters[0]).Date;
		
         string outputFile = aParameters[1];
		
 
 
 
         // Create report
		
         Report report = aApplication.CreateReport(); 
		
 
         // Define standard and custom styles
		
         report.SetStyle(ReportStyleStandardNames.Normal, "Arial", 10, Colors.Black,
		
                        falsefalse, ParagraphAlignment.Left, Color.Empty);
		
         report.SetStyle("Axis""Arial", 10, Colors.Red, falsefalse,
		
                         ParagraphAlignment.Left, Color.Empty);
		
         report.SetStyle("Legend""Arial", 8, Colors.Blue, falsefalse,
		
                         ParagraphAlignment.Left, Color.Empty);
		
         report.SetStyle("Labels""Arial", 6, Colors.Black, falsefalse,
		
                         ParagraphAlignment.Left, Color.Empty); 
		
 
         ReportChart rc = report.AddChart(0, 150, 100); 
		
 
         rc.SetXAxisTitle("Time""Axis");
		
         rc.CustomizeXAxis(Colors.Red, "Axis""HH:mm", 4); 
		
 
         rc.SetYAxisTitle("Values""Axis");
		
         rc.CustomizeYAxis(nullnullnulltrue, Colors.Red, "Axis""f2"); 
		
 
         rc.AddLegend(ReportChartLegendPosition.Top, "Legend"); 
		
 
         ReportChartSeries s = rc.AddSeries("Average", ChartType.Column2D,
		
                                            "sym01""average", Colors.Red, Colors.Green);
		
         s.SetDataLabels("Labels""f2", DataLabelPosition.OutsideEnd);
		
         s = rc.AddSeries("Min", ChartType.Line, "sym01""min", Colors.Blue, Color.Empty);
		
         s.SetMarkersStyle(MarkerStyle.Diamond, 1, Colors.Blue, Colors.BlueViolet); 
		
 
         rc.SetQueryData(reportDate, reportDate.AddDays(1), TimeSpan.FromHours(2));
		
         report.Render(outputFile);
		
      }
		
      catch (Exception e)
		
      {
		
         aApplication.ReportMessage(EvoMessageType.Error, 
		
                                         "Error generating report: " + e.ToString());
		
      } 
		
 
      return true;
		
   } 
		
 
   public void FinalizeScript()
		
   {
		
   }
		
}
		

 

 

 

 VB

 
Imports System
		
Imports Askom.AsixEvo.Scripting
		
Imports MigraDoc.DocumentObjectModel
		
Imports MigraDoc.DocumentObjectModel.Shapes
		
Imports MigraDoc.DocumentObjectModel.Shapes.Charts 
		
 
Public Class WykresVb
		
    Implements IScript 
		
 
    Public Function Initialize(ByVal aParameters() As StringByVal aApplication _
		
                                As IApplication) As Boolean Implements IScript.Initialize
		
        Try 
		
 
            Dim reportDate As DateTime = DateTime.Parse(aParameters(0)).Date
		
            Dim outputFile As String = aParameters(1) 
		
 
            ' Create report
		
            Dim report As Report = aApplication.CreateReport()
		
 
 
            report.SetStyle(ReportStyleStandardNames.Normal, "Arial", 10, Colors.Black, _
		
                            FalseFalse, ParagraphAlignment.Left, Color.Empty)
		
            report.SetStyle("Axis""Arial", 10, Colors.Red, FalseFalse, _
		
                            ParagraphAlignment.Left, Color.Empty)
		
            report.SetStyle("Legend""Arial", 8, Colors.Blue, FalseFalse, _
		
                            ParagraphAlignment.Left, Color.Empty)
		
            report.SetStyle("Labels""Arial", 6, Colors.Black, FalseFalse, _
		
                            ParagraphAlignment.Left, Color.Empty) 
		
 
            Dim rc As ReportChart = report.AddChart(0, 150, 100) 
		
 
            rc.SetXAxisTitle("Time""Axis")
		
            rc.CustomizeXAxis(Colors.Red, "Axis""HH:mm", 4) 
		
 
            rc.SetYAxisTitle("Values""Axis")
		
            rc.CustomizeYAxis(NothingNothingNothingTrue, Colors.Red, "Axis""f2"
		
 
            rc.AddLegend(ReportChartLegendPosition.Top, "Legend"
		
 
            Dim s As ReportChartSeries = rc.AddSeries("Average", ChartType.Column2D, _
		
                                              "sym01""average", Colors.Red, Colors.Green)
		
            s.SetDataLabels("Labels""f2", DataLabelPosition.OutsideEnd)
		
            s = rc.AddSeries("Min", ChartType.Line, "sym01""min", Colors.Blue, Color.Empty)
		
            s.SetMarkersStyle(MarkerStyle.Diamond, 1, Colors.Blue, Colors.BlueViolet) 
		
 
            rc.SetQueryData(reportDate, reportDate.AddDays(1), TimeSpan.FromHours(2))
		
            report.Render(outputFile) 
		
 
        Catch e As Exception 
		
 
            aApplication.ReportMessage(EvoMessageType.Error, _
		
                                          "Error generating report: " + e.ToString()) 
		
 
        End Try 
		
 
        Return True 
		
 
    End Function 
		
 
    Public Sub FinalizeScript() Implements IScript.FinalizeScript
		
     End Sub
		
 
End Class
		

 

 

 

W początkowej części skryptu definiowany jest zestaw stylów, które zostaną użyte w różnych częściach składowych tworzonego wykresu.

 

Pierwszym obowiązkowym fragmentem kodu jest wywołanie metody AddChart, które wstawia wykres do raportu oraz tworzy obiekt, za pośrednictwem którego będą wykonywane wszystkie następne operacje. W parametrach wywołania podawane jest położenie i rozmiar wykresu.

 

Kolejne wywołania dotyczą opcjonalnych parametryzacji osi wykresu oraz legendy.

 

Metoda SetXAxisTitle dodaje opis osi X jednocześnie określając nazwę stylu. Metoda CustomizeXAxis określa sposób rysowania skali osi X. Zdefiniowany jest kolor linii, styl elementów tekstowych, sposób formatowania opisów (dla wykresów danych archiwalnych oś X jest zawsze osią czasu) oraz gęstość opisów osi (wartość 1 oznacza opis wszystkich punktów, użyta wartość 4 oznacza opisywanie co czwartego punktu).

 

Metoda SetYAxisTitle dodaje opis osi Y jednocześnie określając nazwę stylu. Metoda CustomizeYAxis określa sposób rysowania skali osi Y. Pierwsze 3 parametry służą do zdefiniowania zakresu i podziału skali - użyte wartości null (Nothing) oznaczają automatyczne skalowanie. Kolejne parametry określają, czy rysować siatkę wykresu, kolor linii, styl elementów tekstowych oraz sposób formatowania opisów skali.

 

Opcjonalne wywołanie metody AddLegend dodaje do wykresu legendę, jednocześnie określając jej położenie oraz używany styl.

 

Następna część skryptu to właściwy kod budujący zawartość wykresu. Wywołania metody AddSeries dodają do wykresu kolejne serie danych. Parametry wywołań oznaczają: nazwa serii (używana w legendzie wykresu), typ graficzny serii, nazwa zmiennej procesowej i odczytywanego agregatu wartości archiwalnych, kolory używane do rysowania punktów serii (ich dokładne znaczenie zależy od użytego typu serii). Możliwe jest mieszanie na jednym wykresie serii różnych typów, ale nie wszystkie kombinacje są dozwolone.

 

Po utworzeniu obiektu serii danych można na nim wykonywać dalsze parametryzacje. Pokazane wywołania metod SetDataLabels i SetMarkerStyle pozwalają dodać do serii etykiety wartości i znaczniki punktów. Dostępność tych metod zależy jednak od użytego typu serii.

 

W przypadku wykresów tworzonych na podstawie danych kolekcji lub zapisanych w obiekcie DataTable sposób postępowania jest zbliżony do pokazanego w przykładzie. W wywołaniu metody AddChart należy dodatkowo podać odwołanie do obiektu, w którym dane są przechowywane. W wywołaniach AddSeries należy podać nazwę pola lub kolumny zamiast nazwy zmiennej i agregatu. Dodatkowo można użyć metodę AddXSeries w celu określenia serii danych służących do opisu skali osi X (brak wywołania spowoduje, że punkty skali będą opisane kolejnymi numerami).