3950 Dashboard » Historie » Revision 49
Revision 48 ([X] Marcus F, 19.05.2026 14:14) → Revision 49/50 ([X] Marcus F, 19.05.2026 14:16)
{{toc}}
h1. 3950 Dashboard
Einstiegsvideo: Y:\KUNDENDATEN\CIMPCS\Intern\Arbeitsunterlagen\Schulungsvideos\Admin\Dashboard
*Tastenkombinationen*
STRG + Rechte Maus auf Objekt = Administrierfunktionen
Hauptmenü ~> Alle Quellen Durchsuchen = SQL Gehirn
h2. Möglichkeiten für Kunden
# Kundeneigene Erstellung von Dashboards
# Nutzung vorgefertigter ProdatStandardDashboards
# Entwicklung von kundenspezifischen Dashboards durch CIMPCS
h2. Anwendungsbeispiele
[[Dashboard Beispiele]]
h2. Erstellung
*Aufpassen:* %{color: red}beim Schließen wird nicht automatisch nach Speichern gefragt!%
* Hauptmenü-Eintrag erstellen mit *action:* @dashboard@ und *proc:* Dashboard-Kennzeichen
{{collapse(zum Beispiel)
!hauptmenu_dashboard.png!
}}
* Dashboard öffnen
* @Zahnrad@ / @Bearbeiten@
{{collapse(Aufklappen)
!dash_bearbeiten.png!
}}
* @Panel links@ / @Popupmenu@ / @Neue Seite erstellen@
{{collapse(Aufklappen)
!neue_seite.png!
}}
** und folgende Parameter eingeben:
*** Menu.Caption
*** Menu.Hint
*** Menu.ImageIndex (Passende Icon von USysModule/ImageListHot)
** die Parameter kann man später über @Panel links@ / @Popupmenu@ / @Aktuelle Seite editieren@ anpassen
** Seiten sind mit drag-n-drop miteinander kombinierbar (kann man als Baumstruktur darstellen)
{{collapse(zum Beispiel)
!tree_sites.png!
}}
h2. TileControl
* Editierte Seite auswählen
* @Zahnrad@ / @Erstellen@
{{collapse(Aufklappen)
!create_controls.png!
}}
* Kontextmenü > Item bearbeiten
** Name (Komponentname, also Groß- und Kleinschreibung ist nicht von Bedeutung, jedoch dürfen nur Buchstaben, Zahlen und der Unterstrich verwendet werden. Der Name muss mit einem Buchstaben beginnen)
** Text 1 (oben links)
** Text 2 (oben rechts)
** Text 3 (unten links)
** Text 4 (unten rechts)
** MainMenu-Link (mm_id)
** Font.Size(1)
** Font.Size(2-4)
** ImageIndex (Glyph = False) %{color: red}[wovon geladen / wie kann man bedienen?] Vorschlag: löschen und Image von oben ausgewählter @mm_id@ laden.%
** mit Schift+Linksklick kann man die Größe anpassen (werden vorgegebene Größe nacheinander gesetzt)
** {{collapse(Beispiel)
!tilecontrol.png!
}}
h2. LayoutControl
* Editierte Seite auswählen
* @Zahnrad@ / @Erstellen@
{{collapse(Aufklappen)
!create_controls.png!
}}
* LayoutControl
* Popupmenu von LayoutControl:
** @Eigenschaften@: heir kann man aktuell nur die Höhe anpassen
** @LayoutControl-Customizer@: visuelle Layouteditor (Gruppierung, Positionierung, Ausrichtung, Umbenennung usw)
Offen: wie erzeugt man ein Split Element?
h3. Grid
* @Hinzufügen@ / @Grid@
* Popupmenu von Grid
{{collapse(Aufklappen)
!grid_popup.png!
}}
** Erste zwei Zeilen: automatisch generierte Namen von Frame und Layout zur Info
** bei SQL kann man Standard-SQL-Name eingeben oder direkte SQL-Statement:
{{collapse(zum Beispiel)
<pre><code class="sql">
SELECT
dbrid,
ak_nr,
ak_bez
FROM
art
LIMIT 5
</code></pre>
!grid_sql.png!
}}
** @Parent anpassen@ für Master-Detail-Beziehungstabellen geeignet,
{{collapse(zum Beispiel)
Erstellen zweite LayoutControl mit Grid
<pre><code class="sql">
SELECT
r_descr,
r_unit,
r_value
FROM
recnokeyword
WHERE
r_dbrid = :dbrid
</code></pre>
und setzen Beziehung zum erstem Frame
!grid-master-detail.png!
}}
* Suche per Suchbegrif
{{collapse(SQL)
<pre><code class="sql">
SELECT
[...]
FROM adk
WHERE (:edSearch = '' OR tadk.tsvector(adk) @@ to_tsquery('simple', :edSearch || ':*')); --- Suche
</code></pre>
}}
h3. Einstiegsfilter
* Daten werden erst nach Enter-Taste in Suchfeld oder nach Suchen-Button Klick geladen
{{collapse(Aufklappen)
!clipboard-202503210910-uyhpv.png!
}}
* Ganze Funktionalität nur bei Hauptframe möglich (wo keinen Parent angegeben ist)
* Aktivieren für das Grid: {{collapse(Aufklappen)
!clipboard-202503210911-j19c7.png!
}}
* Filter-Liste sind Einträge von der @datarowstate@ Tabelle
* BSP: {{collapse(Aufklappen)
!clipboard-202304130941-rv6kk.png!
}}
<pre><code class="sql">
INSERT INTO datarowstate (drs_type, drs_code, drs_sort, drs_filtersql, drs_textnr, drs_defregister)
VALUES ('CRM_dframe_Angebote_MA_lcFrame_angebbylkn', 's30Tage', 10, 'COALESCE(_auftg.modified_date > (CURRENT_DATE - INTERVAL ''30 DAY'')::DATE, false)', 4624, false), --Letzte 30 Tage
('CRM_dframe_Angebote_MA_lcFrame_angebbylkn', 'sPosFirst', 20, '(SELECT MIN(ag_pos) FROM auftg AS _auftg WHERE _auftg.ag_nr = ag_nr) = ag_pos', 26573, true); --Nur erste Position
</code></pre>
* @drs_type@ ist der Grid-Name. Dieser wird im Edit-Modus im Popupmenü angezeigt {{collapse(Aufklappen)
!clipboard-202304130947-ms0hy.png!
}}
h3. Chart
* @Hinzufügen@ / @Chart@
* Popupmenu von Chart
** Parent anpassen und SQL analor Grid (siehe oben)
** Eigenschaften:
{{collapse(Aufklappen)
!chart_popup.png!
}}
*** GroupCaption
*** x[x] (Bezeichnung und Farbe definieren)
*** y[y1](Bezeichnung und Farbe definieren)
*** [y2] (Bezeichnung und Farbe definieren)
*** [y3] (Bezeichnung und Farbe definieren)
*** ToolBox (um Diagrammdarstellung im Laufzeit zu ändern)
*** ChartType ("Beschreibung":https://docs.devexpress.com/AspNet/15880/aspnet-webforms-controls/chart-control/concepts/creating-charts/2d-chart-types)
*** LegendPosition
** Beispiel: {{collapse(Aufklappen)
<pre><code class="sql">
SELECT
ag_bdat,
SUM(ag_brutto_basis_w) AS sum_brutto,
SUM(ag_netto_basis_w) AS sum_netto
FROM
auftg
WHERE
ag_astat='E'
AND
NOT ag_done
GROUP BY
ag_bdat, ag_lkn
ORDER BY
sum_netto DESC
LIMIT 8
</code></pre>
*Eigenschaften:*
!chart_eigenschaften.png!
*Diagramm:*
!chart_ergebniss.png!
}}
* *%{color:red}WICHTIGER HINWEIS:*% seit 22.05.2025 wurde bei Charts die Eigenschaft *_YSeries* implementiert, wenn Sie mit neuer Version alte Diagrammen anpassen möchten, sollen die als veraltete alte Eigenschaften verwendet werden, die orange markiert sind (für neue Version werden die komplett ignoriert)
{{collapse(Aufklappen)
!clipboard-202505221244-gd0rx.png!
}}
h3. Groups
Groups können sowohl als statische Gruppierung, als auch als Registerfenster verwendet werden.
~> Layout-Control Customizer > Kontextmenü der Gruppe > Layout Direction
h2. Synchronisierung
*%{color:red}WICHTIGER HINWEIS:*% Von Kunden vorgenommene Änderungen an Prodat-Dashboards können nicht zusammengeführt werden und werden bei der Synchronisierung überschrieben.
* Dashboards werden als OPTIONS (component_options) auf den SyncServer (PRODAT-18.08) synchronisiert und stehen damit für alle Kunden zur Verfügung
* Bei neuen Dashboards ist zusätzlich der neu erstellte Hauptmenüpunkt auf den SyncServer hochzuladen
---
h2. Dashboard-Konfiguration (@TLayoutFrameGrid@)
h3. @_StandardSQL@ / @_StandardSQLWrap@
Es besteht die Möglichkeit die Dashboard-Tabellen mittels StandardSQL zu befüllen, oder diese als Grundlage für eine weitere SQL-Query zu nehmen:
!standard_sql_wrap.png!
Dazu geht man zunächst in den Bearbeiten-Modus (1), stellt dann eine StandardSQL ein, und kann dann (optional, 2) diese als Grundlage für weitere SQL-Bearbeitung nehmen:
<pre><code class="sql">
SELECT * FROM (&standard_sql
) AS standard_sql
</code></pre>
Es ist zu berücksichtigen, dass für die initiale *standard_sql* - Query die Syntax genau so (inklusive Zeilenumbrüchen) aussehen muss.
*Achtung*: Der _AutoCheck_ wird beim Term _&standard_sql_ fehlschlagen (intern definiertes Makro) - die Fehlermeldung an dieser Stelle kann man hier aber ignorieren.
|_. Property|_. Wirkung|
|@_StandardSQL@|Lädt SQL aus @systemsqlstatement@ (inkl. @sql_macro@-Mechanik).|
|@_StandardSQLWrap@|Erlaubt Wrapping-Statement mit Macro @&standard_sql@ (Inhalt des geladenen @_StandardSQL@).|
h4. Macro-Verhalten mit @_StandardSQL@
* @sql_macro@-Einträge aus dem StandardSQL werden wie bisher berücksichtigt.
* Zusätzlich können Macros über @_Config@ in @[Settings]@ überschrieben werden (nur wenn das Macro im Query vorhanden ist).
* Schreibweisen für @_Config@-Macrokeys: @¯oname=...@ oder @macroname=...@.
h3. @_Config@ (INI-ähnlich)
|_. Key|_. Typ|_. Default|_. Wirkung|
|@FieldAliasViewTableName@|String|leer|Setzt Alias-Tabelle für Feldbezeichnungen im Grid.|
|@BtMode@|Boolean|@false@|Vor Speichern fragen (Grünes Icon ganz links oben neben Tabelleneinstellungen )|
|@Submenus@|Boolean|@false@|Steuert Submenüs im Popup für „Bearbeitbare Felder“ und Pivot-Menüeinträge.|
|@UpdateEditIcon@|Boolean|@true@|Steuert Stift-Icon bei editierbaren Feldern (@true@ = anzeigen, @false@ = ausblenden).|
|@PivotDirectEdit@|Boolean|@false@|Erlaubt direkte Bearbeitung von Pivot-Feldern auch ohne @_SQLUpdate@ (nur Pivot-View).|
|@EditableFields@|CSV/String|leer|Felder, die editierbar gesetzt werden (zusätzlich zur Pivot-Logik).|
|@FixedColumns@|CSV/String|leer|Felder, die im linken Fixed-Band fixiert werden.|
|@&<MacroName>@ oder @<MacroName>@|String|abhängig von @sql_macro@|Überschreibt vorhandene Query-Macros aus @_StandardSQL@/@sql_macro@ zur Laufzeit.|
h4. Beispiel @_Config@
<pre>
[Settings]
EditableFields=ag_freigabe,ag_prio
FixedColumns=ag_nr,ag_kunde
Submenus=true
UpdateEditIcon=false
PivotDirectEdit=true
¯owhere= AND ak_fertigung
</pre>
*Achtung: Achtung: ein @_Config@ _Config macro zu verwenden sollte bevorzugt gegenüber @_StandardSQLWrap@ SQLWrap verwendet werden. Die Pivot-Funktionen stehen sonst nicht zur Verfügung, wenn der Pivot-Aufruf im StandardSql definiert ist.* ist.
h3. @_SQLUpdate@ (Hinweis: Property heißt @_SQLUpdate@, nicht @_UpdateSQL@)
|_. Wert|_. Wirkung|
|gesetzt (nicht leer)|Aktiviert normalen Edit-/Post-Update-Pfad (@SQLUpdate@, Grid Editing, Post/Cancel).|
|leer|Normales SQL-Update deaktiviert (read-only), außer @PivotDirectEdit=true@ in Pivot-Views.|
Priorität: @_SQLUpdate@ hat Vorrang. Wenn @_SQLUpdate@ gesetzt ist, bleibt der Standard-Updatepfad aktiv; @PivotDirectEdit@ wirkt dann nur ergänzend.
h3. @_MultiSelect@
|_. Wert|_. Wirkung|
|@true@|Mehrfachselektion im Grid aktiv; relevant für Sammelaktionen im Popup (z. B. boolesche Feldänderungen).|
|@false@|Einzelselektion.|
h3. Wichtige Kombinationen
# @_SQLUpdate@ gesetzt + @EditableFields@ gesetzt: klassischer editierbarer Grid-Betrieb.
# @_SQLUpdate@ leer + @PivotDirectEdit=true@: Pivot-Felder direkt bearbeitbar (Direktspeicherung über RecNoParam-Pfad).
# @Submenus=true@: Popup gruppiert Bearbeitungs- und Pivot-Einträge in Untermenüs.
# @UpdateEditIcon=false@: editierbare Felder ohne Stift-Icon.