4.4 Tabela pozioma dla danych archiwalnych

 

 

 

W tym rozdziale omówimy dokładniej proces budowania tabeli w układzie poziomym 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 dwugodzinne. Wygląd generowanej tabeli pokazuje ilustracja.

 

 

 

 

Rys. Tabela pozioma dla danych archiwalnych.

 

 

 

 

 

 

 C#

 
using System;
                
using Askom.AsixEvo.Scripting;
                
using MigraDoc.DocumentObjectModel;
                
using MigraDoc.DocumentObjectModel.Shapes;
                
using MigraDoc.DocumentObjectModel.Shapes.Charts; 
                
 
public class HorzTable : IScript
                
{
                
   public bool Initialize(string[] aParameters, IApplication aApplication)
                
   {
                
      try
                
      {
                
         DateTime reportDate = DateTime.Parse(aParameters[0]).Date;
                
         string outputFile = aParameters[1]; 
                
 
         Report report = aApplication.CreateReport();
                
         report.SetPageSetup(true, PageFormat.A4);
                
 
         // 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 ht = report.AddHorizontalTable(true, 25, 15, "Godzina", "HH:mm");
                
         ht.AddRow("V1 średnia", "sym01", "average", "f2",
                
                   ReportTableCellErrorBehavior.Empty, null);
                
         ht.AddRow("V1 minimum", "sym01", "min", "f2",
                
                   ReportTableCellErrorBehavior.Empty, null);
                
         ht.AddRow("V1 maksimum", "sym01", "max", "f2", 
                
                   ReportTableCellErrorBehavior.Empty, null);
                
         ht.SetEdgeStyle(ReportTableEdgeType.Columns, Colors.Cyan);
                
         ht.SetQueryData(reportDate.AddHours(0), reportDate.AddDays(1),"2H");
                
 
 
         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 HorzTableVb
                
    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()
                
            report.SetPageSetup(True, PageFormat.A4) 
                
 
            ' 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 ht As ReportTable = report.AddHorizontalTable(True,25,15,"Godzina","HH:mm")
                
            ht.AddRow("V1 średnia", "sym01", "average", "f2",
                
                      ReportTableCellErrorBehavior.Empty, Nothing)
                
            ht.AddRow("V1 minimum", "sym01", "min", "f2", 
                
                      ReportTableCellErrorBehavior.Empty, Nothing)
                
            ht.AddRow("V1 maksimum", "sym01", "max", "f2",
                
                      ReportTableCellErrorBehavior.Empty, Nothing)
                
            ht.SetEdgeStyle(ReportTableEdgeType.Columns, Colors.Cyan)
                
            ht.SetQueryData(reportDate.AddHours(0), reportDate.AddDays(1),"2H")
                
                            
                
 
 
            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 przypadku raportów poziomych z reguły konieczna jest zmiana orientacji strony raportu na poziomą. Dlatego bezpośrednio po utworzeniu obiektu Report użyta jest metoda SetPageSetup. Pierwszy parametr wywołania ustawiony na true oznacza poziome ułożenie strony.

 

Kolejny fragment kodu definiuje klika stylów o predefiniowanych nazwach. Zasady użycia tych stylów zostały opisane w rozdziale dotyczącym tabel pionowych.

 

Po zdefiniowaniu stylów tworzona jest tabela pionowa przy pomocy metody AddHorizontalTable. Parametry wywołania strony dotyczą głównie linii nagłówka tabeli. Ich znaczenie jest następujące: informacja czy linia nagłówka ma być dodana do tabeli, szerokość pierwszej kolumny tabeli, szerokość następnych kolumn tabeli, tekst umieszczony w pierwszej kolumnie linii nagłówka, sposób formatowanie czasu w następnych kolumnach nagłówka.

 

Pierwsza kolumna tabeli poziomej jest kolumną opisową, w której umieszczany jest tekst opisujący znaczenie danych w kolumnie. W linii nagłówka zawsze wyświetlane są czasy początków okresów agregacji, wynikające z wykonanego zapytania o dane archiwalne.

 

Istnieje również rozszerzona wersja metody AddHorizonatlTable pozwalająca jawnie wybrać style dla pierwszej i następnych kolumn nagłówka.

 

Kolejnym krokiem jest dodanie do tabeli zestawu wierszy, wykorzystując metodę AddRow. Parametry wywołania mają następujące znaczenie: nazwa wiersza umieszczana w pierwszej kolumnie wiersza, nazwa zmiennej procesowej i agregatu służące do pobrania danych archiwalnych, 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órki).

 

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 AddRow. 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 tabel.

 

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.