4.7 Raport na podstawie danych przekazanych w kolekcji ICollection

 

 

 

Nie zawsze źródłem danych, na podstawie których należy wygenerować raport są wartości historyczne zmiennych procesowych. Jeżeli dane pochodzą z innego źródła, to można je zgromadzić w dowolnej kolekcji spełniającej interfejs ICollection. W praktyce oznacza to użycie dowolnej kolekcji platformy .Net, np. List<T>, lub nawet zwykłej tablicy.

 

Omówiony w tym rozdziale skrypt będzie tworzył raport pokazujący wartości bieżące zmiennych procesowych z chwili wykonania raportu.

 

 

 

 

Rys. Raport pokazujący wartości bieżące zmiennych procesowych z chwili wykonania raportu.

 

 

 

 C#

 
using System;
		
using Askom.AsixEvo.Scripting;
		
using MigraDoc.DocumentObjectModel;
		
using MigraDoc.DocumentObjectModel.Shapes;
		
using MigraDoc.DocumentObjectModel.Shapes.Charts; 
		
 
public class CollectionReport : IScript
		
{
		
   class VData
		
   {
		
      public VData(string name, double value)
		
      {
		
         varname = name; varvalue = value; 
		
      }
		
      public string varname { getprivate set; }
		
      public double varvalue { getprivate set; }
		
   } 
		
 
   public bool Initialize(string[] aParameters, IApplication aApplication)
		
   {
		
      try
		
      {
		
         string outputFile = aParameters[1]; 
		
 
         VData[] values = { 
		
             new VData("sym01",
		
                   Convert.ToDouble(aApplication.GetVariableValue("sym01"true).RawValue)),
		
             new VData("sym02",
		
                   Convert.ToDouble(aApplication.GetVariableValue("sym02"true).RawValue)),
		
             new VData("sym03",
		
                   Convert.ToDouble(aApplication.GetVariableValue("sym03"true).RawValue)),
		
         }; 
		
 
         Report report = aApplication.CreateReport(); 
		
 
         report.SetStyle(ReportStyleStandardNames.TableHeader, "Calibri", 12, Colors.Blue,
		
                         truetrue, ParagraphAlignment.Center, Colors.LightYellow);
		
         report.SetStyle(ReportStyleStandardNames.TableRow, "Calibri", 10, Colors.Blue,
		
                         falsefalse, ParagraphAlignment.Right, Colors.Gray); 
		
 
         ReportTable vt = report.AddVerticalTable(values, true);
		
         vt.LeftIndent(30);
		
         vt.AddColumn("Zmienna""varname", 50, nullnull);
		
         vt.AddColumn("Wartość""varvalue", 50, "f2"null);
		
         vt.SetEdgeStyle(ReportTableEdgeType.Columns, Colors.Cyan); 
		
 
         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 CollectionReportVb
		
    Implements IScript 
		
 
    Class VData
		
        Dim _varname As String
		
        Public Property varname As String
		
            Get
		
                Return _varname
		
            End Get
		
            Set(value As String)
		
                _varname = Value
		
            End Set
		
        End Property 
		
 
        Dim _varvalue As Double
		
        Public Property varvalue As Double
		
            Get
		
                Return _varvalue
		
            End Get
		
            Set(value As Double)
		
                _varvalue = Value
		
            End Set
		
        End Property 
		
 
        Public Sub New(ByVal name As StringByVal value As Double)
		
            varname = name
		
            varvalue = value
		
        End Sub
		
    End Class 
		
 
    Public Function Initialize(ByVal aParameters() As StringByVal aApplication As _
		
                               IApplication) As Boolean Implements IScript.Initialize
		
        Try 
		
 
            Dim outputFile As String = aParameters(1) 
		
 
            Dim values As VData() = New VData(2) _
		
                { _
		
                New VData("sym01", Convert.ToDouble(aApplication.GetVariableValue _
		
 
                                                                 ("sym01"True).RawValue)), _
		
                New VData("sym02", Convert.ToDouble(aApplication.GetVariableValue _
		
                                                                 ("sym02"True).RawValue)), _
		
                New VData("sym03", Convert.ToDouble(aApplication.GetVariableValue _
		
                                                                  ("sym03"True).RawValue)) _
		
                } 
		
 
           ' Create report
		
            Dim report As Report = aApplication.CreateReport() 
		
 
            report.SetStyle(ReportStyleStandardNames.TableHeader, "Calibri", 12, _
		
                       Colors.Blue, TrueTrue, ParagraphAlignment.Center, Colors.LightYellow)
		
            report.SetStyle(ReportStyleStandardNames.TableRow, "Calibri", 10, _
		
                       Colors.Blue, FalseFalse, ParagraphAlignment.Right, Colors.Gray)
		
   
		
 
            Dim vt As ReportTable = report.AddVerticalTable(values, True)
		
            vt.LeftIndent(30)
		
            vt.AddColumn("Zmienna""varname", 50, NothingNothing)
		
            vt.AddColumn("Wartość""varvalue", 50, "f2"Nothing)
		
            vt.SetEdgeStyle(ReportTableEdgeType.Columns, Colors.Cyan) 
		
 
            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 Suk 
		
 
End Class
		

 

 

 

 

 

 

 

Poniższe wyjaśnienia dotyczą tylko elementów specyficznych dla raportów z kolekcji danych.

 

W przypadku tworzenia tabeli na podstawie danych z kolekcji pierwszym krokiem jest utworzenie klasy służącej do przechowania danych. Obiekty tej klasy będą następnie dodawane do kolekcji.

 

W przykładowym skrypcie zdefiniowana jest klasa VData. Jedynym wymaganiem co do konstrukcji klasy używanej w systemie raportowania jest zdefiniowanie grupy publicznych właściwości, które będą służyły do odczytu wartości umieszczanych w tabeli. W naszym przykładzie są to właściwości varname i varvalue.

 

W początkowej fazie skryptu tworzona jest tablica obiektów klasy VData. Następnie do tablicy wstawiane są trzy obiekty VData, w których przechowana jest nazwa zmiennej procesowej oraz jej bieżąca wartość odczytywana metodą GetVariableValue.

 

Dalsza część skryptu to właściwy kod tworzący raport zawierający pojedynczą tabelę pionową. Kolekcja danych, na podstawie których powstanie tabela, jest przekazywana w momencie jej utworzenia metodą AddVerticalTable. Metoda SetQueryData w tym schemacie działania nie jest używana.

 

Kolejnym krokiem jest dodanie do tabeli zestawu kolumn, wykorzystując metodę AddColumn. W przypadku tabel korzystających z danych kolekcji znaczenie parametrów jest następujące: nazwa kolumny umieszczana w linii nagłówka, nazwa publicznej właściwości zdefiniowanej w klasie służącej do przechowania danych kolekcji, szerokość kolumny, sposób formatowania wartości (jeżeli nie zostanie podany, to nastąpi formatowanie standardowe zależne od typu wartości), funkcja tworzenia zawartości komórki (jej użycie jest identyczne jak dla tabel z wartościami historycznymi i zostało opisane w rozdziale Kontrola zawartości komórek).