Auf dieser Seiten ist erklärt, wie die Erstellung und das Design einer DataGrid-Auswertung funktioniert.

Version: Dieser Artikel ist mindestens gültig ab der stabilen Version 5.5.8.


1. Voraussetzungen

  • DataGrid-Tabs benötigen für ihre vollständige Funktionalität eine Datenquelle - eine Prozedur. Es gibt die folgende grundlegenden Möglichkeiten:

    • OCT liefert bei der Installation Standardprozeduren aus, z.B. die “result.spPlanningProfit”.

    • Eine selbstgeschriebene Prozedur - diese benötigt aber SQL-Kenntnisse und ein SQL Server Management Studio.

  • Ein Produkt oder mehrere Produkte mit Wertreihen und eingetragenen Werten. Hierbei benötigt es keine konkreten Einstellungen.


2. Verwendungsanleitung

Der Prozess rund um die Verwendung eines Pivot-Tabs wird:


2.1. Einstellungen der Produkte

Der Tab-Typ DataGrid, mit der Standardprozedur “result.spPlanningProfit”, stellt an die Produkte keine konkreten Anforderungen. Die Prozedur zieht sowohl die Globalattribute der Produkte, als auch die Attribute der Produktdatentabelle (umgerechnete TimeIDs, Wertreihen & deren Eigenschaften).


2.2. Einschränkungen

  • es können keine Zwischensummen erzeugt werden.

  • es können Zeilen nicht gleichzeitig auf und zu geklappt werden.


2.3. Datenbankkopplung

  • neue Spalten der Prozedur erscheinen automatisch in der Oberfläche.

  • gelöschte Spalten in der Prozedur verschwinden automatisch aus der Oberfläche.


3. Expertenbereich

Prozeduren können für die Verwendung im Tab-Typ DataGrid auf Datenbankebene individualisiert werden. Es richtet sich an User mit fortgeschrittenem SQL-Wissen und Zugriff auf ein SQL Server Management Studio.

3.1. Steuerung über den Spaltennamen in der Datenbankabfrage

Bei der Erstellung einer Tabelle für eine DataGrid-Prozedur gibt es verschiedene Spaltennamen-Suffixe, deren Verwendung einen direkten Einfluss auf die Eigenschaften der Spalte an der Programmoberfläche haben:

Ausrichtung

Format

beispielhafter Spaltenname

Effekt an der Programmoberfläche (des Beispiels)

“_L” = linksbündig

“M” = Money

SpaltenName_LS

linksbündiger String

“_R” = rechtsbündig

“S” = String

SpaltenName2_RM

rechtsbündiger Moneywert

“_C” = zentrierte Ausrichtung

“Int” = Integer

SpaltenNameZahl_CInt

zentrierter Zahlenwert

“L” = Link

SpaltenNameLink_CL

linksbündiger Link

  • Das Format sollte immer passend zum Datenbanktyp der Spalte gewählt werden, es ändert nicht den definierten Datenbanktyp.

  • Links müssen von der Prozedur als volle URL zurückgegeben werden z.B. 'https://www.google.de ' - in der Anzeige des DataGrids erscheint nur das Wort "link", falls die URL länger als 50 Zeichen ist.


3.2. Beispielprozedur für alle Formate

Diese Prozedur kann in jeder Datenbank ausgeführt werden und als Quelle "result.spSampleGrid" für ein DataGrid Tab genutzt werden - sie braucht keine Tabelle, da sie ihre Daten selbst erzeugt.
Sie beinhaltet auch Spaltennamen_Suffix-Kombinationen für alle Ausrichtungen & Formate, welche definierbar sind.

Es kann in der Prozedur folgendes konfiguriert werden:

  • die Anzahl der zu erzeugenden Zeilen.

  • die Gruppierungen.

/*
Author:     Gerd Tautenhahn
Created:    2020/06
Summary:    Sample for DataGrid
   
Testcall
EXEC result.spSampleGrid 'SQL',''
*/
   
DROP PROCEDURE IF EXISTS result.spSampleGrid;
GO
   
CREATE PROCEDURE result.spSampleGrid  
                            @Username           NVARCHAR(255),
                            @FactoryID          NVARCHAR(255),
                            @Host               https://factory..de 
AS
  
    BEGIN
        SET NOCOUNT ON
 
        DECLARE @Counter        INT = 100000; -- set number of records to create here
        DECLARE @CreatedRows    INT = 1;
 
        DROP TABLE IF EXISTS #tmp;
        CREATE TABLE #tmp
            (
                 RowNumber      INTEGER                                 NULL
                ,IntRowGroup10  INTEGER                                 NULL
                ,IntRowGroup100 INTEGER                                 NULL
                ,TxtRowGroup10  NVARCHAR(255) COLLATE DATABASE_DEFAULT  NULL
                ,TxtRowGroup100 NVARCHAR(255) COLLATE DATABASE_DEFAULT  NULL
                ,TextL_LS       NVARCHAR(255) COLLATE DATABASE_DEFAULT  NULL
                ,TextR_RS       NVARCHAR(255) COLLATE DATABASE_DEFAULT  NULL
                ,TextC_CS       NVARCHAR(255) COLLATE DATABASE_DEFAULT  NULL
                ,GeldL_LM       MONEY                                   NULL
                ,GeldR_RM       MONEY                                   NULL
                ,GeldC_CM       MONEY                                   NULL
                ,ZahlL_LInt     INTEGER                                 NULL
                ,ZahlR_RInt     INTEGER                                 NULL
                ,ZahlC_CInt     INTEGER                                 NULL
                ,LinkL_LL       NVARCHAR(255) COLLATE DATABASE_DEFAULT  NULL
                ,LinkR_RL       NVARCHAR(255) COLLATE DATABASE_DEFAULT  NULL
                ,LinkC_CL       NVARCHAR(255) COLLATE DATABASE_DEFAULT  NULL
                );
 
        WHILE @Counter + 1 > @CreatedRows
            BEGIN
                INSERT INTO #tmp
                    SELECT
                         @CreatedRows                                           AS RowNumber
                        ,@CreatedRows/10    +1                                  AS RowGroup10
                        ,@CreatedRows/100   +1                                  AS RowGroup100
                        ,'Group ' + CAST(@CreatedRows/10 + 1 AS NVARCHAR(255))  AS RowGroup1000
                        ,'Group ' + CAST(@CreatedRows/100 + 1 AS NVARCHAR(255)) AS RowGroup10000
                        ,'Ein Text LS'                                          AS TextL_LS
                        ,'Ein Text RS'                                          AS TextR_RS
                        ,'Ein Text CS'                                          AS TextC_CS
                        ,88.99                                                  AS GeldL_LM
                        ,88.22                                                  AS GeldR_RM
                        ,88.11                                                  AS GeldC_CM
                        ,8                                                      AS ZahlL_LInt
                        ,9                                                      AS ZahlR_RInt
                        ,10                                                     AS ZahlC_CInt
                        ,'https://www.youtube.com/user/saxessGmbH/'             AS LinkL_LL
                        ,'https://www.youtube.com/user/saxessGmbH/'             AS LinkR_RL
                        ,'https://www.youtube.com/user/saxessGmbH/'             AS LinkC_CL
                    SET @CreatedRows = @CreatedRows +1
            END
 
            SELECT * FROM #tmp;
  
    RETURN 200;
    END
GO
   
GRANT EXECUTE ON OBJECT ::result.spSampleGrid TO pf_PlanningFactoryService;
GO
CODE

3.3. Performance

Die Aussagen zur Performance sind immer ohne Datenbankzeit getroffen, d.h. dass die Datenbank die Daten sofort ausliefert. Die Laufzeit der Datenbankprozedur kommt hinzu, liegt aber nicht in der Performanceverantwortung der Applikation:

Kriterium

Im lokalen Netzwerk

Anzahl der performant dargestellten Zeilen ohne Definition des Layouts

100.000 (max 1.0 Mio)

Ladezeit bei o.g. Zeilenzahl

2 - 10 Sekunden

Performancebeeinträchtigung durch Gruppierungen nach Nummerischen Feldern

gering

Performancebeeinträchtigung durch Gruppierungen nach Text Feldern

gering

Filterperformance Nummerisches Feld

sehr gut

Filterperformance Textfeld

sehr gut