4.3 Tabela pionowa dla danych archiwalnych

 

 

 

W tym rozdziale omówimy dokładniej proces budowania tabeli pionowej w oparciu o dane archiwalne zmiennych procesowych. Pokazany dalej skrypt tworzy tabelę, która pokazuje wartość średnią, maksymalną i minimalną zmiennej procesowej w rozbiciu na okresy trzygodzinne. Wygląd generowanej tabeli pokazuje ilustracja.

 

 

 

Rys. Tabela pionowa dla danych archiwalnych.

 

 

 

Ze względu na chęć skrócenia kodu, poniższe skrypty przykładowe zostały pozbawione fragmentów dodających do raportu elementy typu: nagłówek, stopka lub linia tytułu.

 

 

 

 

 

 C#

 
using System;
                
using Askom.AsixEvo.Scripting;
                
using MigraDoc.DocumentObjectModel;
                
using MigraDoc.DocumentObjectModel.Shapes;
                
using MigraDoc.DocumentObjectModel.Shapes.Charts;
                
 
public class VertTable : IScript
                
{
                
   public bool Initialize(string[] aParameters, IApplication aApplication)
                
   {
                
      try
                
      {
                
         DateTime reportDate = DateTime.Parse(aParameters[0]).Date;
                
         string outputFile = aParameters[1];
                
 
         Report report = aApplication.CreateReport();
                
 
         // Define standard and custom styles
                
         report.SetStyle(ReportStyleStandardNames.TableHeader, "Calibri", 12, Colors.Blue,
                
                         true, true, ParagraphAlignment.Center, Colors.LightYellow);
                
         report.SetStyle(ReportStyleStandardNames.TableRow, "Calibri", 10, Colors.Blue,
                
                         false, false, ParagraphAlignment.Right, Colors.Gray);
                
         report.SetStyle(ReportStyleStandardNames.TableAltRow, "Calibri", 10, Colors.Blue,
                
                         false, false, ParagraphAlignment.Right, Colors.DarkGray);
                
 
         // Build table
                
         ReportTable vt = report.AddVerticalTable(true);
                
         vt.LeftIndent(10);
                
         vt.AddColumn("Godzina", ReportTable.StartTimeColumn, null, 40, null,
                
                      ReportTableCellErrorBehavior.Normal, null);
                
         vt.AddColumn("V1 średnia", "sym01", "average", 30, "f2",
                
                      ReportTableCellErrorBehavior.Empty, null);
                
         vt.AddColumn("V1 minimum", "sym01", "min", 30, "f2",
                
                      ReportTableCellErrorBehavior.Empty, null);
                
         vt.AddColumn("V1 maksimum", "sym01", "max", 30, "f2",
                
                      ReportTableCellErrorBehavior.Empty, null);
                
         vt.SetEdgeStyle(ReportTableEdgeType.Columns, Colors.Cyan);
                
         vt.SetQueryData(reportDate, reportDate.AddDays(1), "3H");
                
 
         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 VertTableVb
                
    Implements IScript
                
 
    Public Function Initialize(ByVal aParameters() As String, ByVal aApplication As _
                
                               IApplication) As Boolean Implements IScript.Initialize
                
        Try
                
 
            Dim reportDate As DateTime = DateTime.Parse(aParameters(0)).Date
                
            Dim outputFile As String = aParameters(1)
                
 
            Dim report As Report = aApplication.CreateReport()
                
 
            ' Define standard And custom styles
                
            report.SetStyle(ReportStyleStandardNames.TableHeader, "Calibri", 12, Colors.Blue,_
                
                            True, True, ParagraphAlignment.Center, Colors.LightYellow)
                
            report.SetStyle(ReportStyleStandardNames.TableRow, "Calibri", 10, Colors.Blue,_
                
                            False, False, ParagraphAlignment.Right, Colors.Gray)
                
            report.SetStyle(ReportStyleStandardNames.TableAltRow, "Calibri", 10, Colors.Blue,_
                
                            False, False, ParagraphAlignment.Right, Colors.DarkGray)
                
 
            ' Build table
                
            Dim vt As ReportTable = report.AddVerticalTable(True)
                
            vt.LeftIndent(10)
                
            vt.AddColumn("Godzina", ReportTable.StartTimeColumn, Nothing, 40, Nothing,_
                
                         ReportTableCellErrorBehavior.Normal, Nothing)
                
            vt.AddColumn("V1 średnia", "sym01", "average", 30, "f2", _
                
                         ReportTableCellErrorBehavior.Empty, Nothing)
                
            vt.AddColumn("V1 minimum", "sym01", "min", 30, "f2", _
                
                         ReportTableCellErrorBehavior.Empty, Nothing)
                
            vt.AddColumn("V1 maksimum", "sym01", "max", 30, "f2",_
                
                          ReportTableCellErrorBehavior.Empty, Nothing)
                
            vt.SetEdgeStyle(ReportTableEdgeType.Columns, Colors.Cyan)
                
            vt.SetQueryData(reportDate, reportDate.AddDays(1), "3H")
                
 
            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 przykładowym kodzie wygląd tabeli określa kilka stylów o predefiniowanych nazwach. Są to przede wszystkim style TableHeader i TableRow, określające sposób tworzenia wiersza nagłówka tabeli oraz wierszy danych. Ponieważ w naszym przykładzie chcemy inaczej formatować parzyste i nieparzyste wiersze danych, to zdefiniowany został też styl TableAltRow. Style dla wierszy danych różnią się ostatnim parametrem, określającym kolor tła komórek tabeli.

 

Oprócz używanej czcionki oraz kolorów styl określa także sposób wyrównywania zawartości komórek. W linii nagłówka tekst będzie środkowany a w liniach danych wartości pomiarów będą wyrównywane do prawej strony.

 

Po zdefiniowaniu stylów tworzona jest tabela pionowa przy pomocy metody AddVerticalTable. Parametr wywołania metody określa, czy do tabeli zostanie dodany wiersz nagłówka.

 

Kolejnym krokiem jest dodanie do tabeli zestawów kolumn, wykorzystując metodę AddColumn. Parametry wywołania mają następujące znaczenie: nazwa kolumny umieszczana w linii nagłówka, nazwa zmiennej procesowej i agregatu - służące do pobrania danych archiwalnych, szerokość kolumny, sposób formatowania wartości (jeżeli nie zostanie podany, to użyty  zostanie atrybut formatu z bazy definicji zmiennych lub nastąpi formatowanie standardowe zależne od typu wartości), sposób postępowania w przypadku braku lub niepoprawnej wartości, funkcja tworzenia zawartości komórki (jej użycie zostanie opisane w rozdziale Kontrola zawartości komórek).

 

W wywołaniach AddColumn zamiast nazwy zmiennych można użyć jednej z dwóch specjalnych nazw: ReportTable.StartTimeColumn lub ReportTable.EndTimeColumn. Nazwy te oznaczają użycie w kolumnie, zamiast wartości zmiennych, czasów początków lub końców poszczególnych okresów agregacji zmiennych.

 

W przykładzie użyto stałej ReportTableCellErrorBehavior.Empty do określenia trybu postępowania w wypadku braku poprawnej wartości. Stała ta oznacza pozostawienie pustej komórki. Inne standardowe tryby są wyjaśnione w opisie metody AddColumn w części referencyjnej podręcznika.

 

Przykładowy skrypt używa prostszego wariantu metody AddColumn. Dostępny jest także wariant pozwalający podać nazwy stylów używanych w kolumnie. Style podane jawnie mają pierwszeństwo przed stylami standardowymi. Rozszerzony wariant metody pozwala indywidualnie określić sposób tworzenia poszczególnych kolumn tabeli.

 

Po dodaniu kolumn pozostaje jeszcze określić sposób tworzenia krawędzi komórek tabeli (metoda SetEdgeStyle) oraz parametry zapytania o dane archiwalne (metoda SetQueryData).

 

Końcowe wywołanie metody Render powoduje wykonanie wszystkich niezbędnych zapytań o dane archiwalne oraz wygenerowanie treści raportu.