3950 Dashboard » Historie » Version 47
[X] Marcus F, 19.05.2026 14:11
| 1 | 46 | [X] Marcus F | {{toc}} |
|---|---|---|---|
| 2 | |||
| 3 | 1 | [E] Andre K | h1. 3950 Dashboard |
| 4 | 2 | [E] Andre K | |
| 5 | 20 | [X] Steffen A | Einstiegsvideo: Y:\KUNDENDATEN\CIMPCS\Intern\Arbeitsunterlagen\Schulungsvideos\Admin\Dashboard |
| 6 | |||
| 7 | 24 | [X] Steffen A | *Tastenkombinationen* |
| 8 | |||
| 9 | STRG + Rechte Maus auf Objekt = Administrierfunktionen |
||
| 10 | |||
| 11 | Hauptmenü ~> Alle Quellen Durchsuchen = SQL Gehirn |
||
| 12 | |||
| 13 | 20 | [X] Steffen A | |
| 14 | 18 | [X] Steffen A | h2. Möglichkeiten für Kunden |
| 15 | 17 | [Y] Andreas F | |
| 16 | 18 | [X] Steffen A | # Kundeneigene Erstellung von Dashboards |
| 17 | # Nutzung vorgefertigter ProdatStandardDashboards |
||
| 18 | 17 | [Y] Andreas F | # Entwicklung von kundenspezifischen Dashboards durch CIMPCS |
| 19 | |||
| 20 | h2. Anwendungsbeispiele |
||
| 21 | |||
| 22 | [[Dashboard Beispiele]] |
||
| 23 | |||
| 24 | 2 | [E] Andre K | h2. Erstellung |
| 25 | |||
| 26 | 15 | [E] Andre K | *Aufpassen:* %{color: red}beim Schließen wird nicht automatisch nach Speichern gefragt!% |
| 27 | 14 | [E] Andre K | |
| 28 | 5 | [E] Andre K | * Hauptmenü-Eintrag erstellen mit *action:* @dashboard@ und *proc:* Dashboard-Kennzeichen |
| 29 | {{collapse(zum Beispiel) |
||
| 30 | 1 | [E] Andre K | !hauptmenu_dashboard.png! |
| 31 | 5 | [E] Andre K | }} |
| 32 | * Dashboard öffnen |
||
| 33 | 7 | [E] Andre K | * @Zahnrad@ / @Bearbeiten@ |
| 34 | 5 | [E] Andre K | {{collapse(Aufklappen) |
| 35 | !dash_bearbeiten.png! |
||
| 36 | 3 | [E] Andre K | }} |
| 37 | 7 | [E] Andre K | * @Panel links@ / @Popupmenu@ / @Neue Seite erstellen@ |
| 38 | 6 | [E] Andre K | {{collapse(Aufklappen) |
| 39 | 1 | [E] Andre K | !neue_seite.png! |
| 40 | }} |
||
| 41 | 7 | [E] Andre K | ** und folgende Parameter eingeben: |
| 42 | *** Menu.Caption |
||
| 43 | *** Menu.Hint |
||
| 44 | *** Menu.ImageIndex (Passende Icon von USysModule/ImageListHot) |
||
| 45 | ** die Parameter kann man später über @Panel links@ / @Popupmenu@ / @Aktuelle Seite editieren@ anpassen |
||
| 46 | 8 | [E] Andre K | ** Seiten sind mit drag-n-drop miteinander kombinierbar (kann man als Baumstruktur darstellen) |
| 47 | {{collapse(zum Beispiel) |
||
| 48 | !tree_sites.png! |
||
| 49 | }} |
||
| 50 | 10 | [E] Andre K | |
| 51 | h2. TileControl |
||
| 52 | |||
| 53 | 9 | [E] Andre K | * Editierte Seite auswählen |
| 54 | * @Zahnrad@ / @Erstellen@ |
||
| 55 | 8 | [E] Andre K | {{collapse(Aufklappen) |
| 56 | !create_controls.png! |
||
| 57 | 1 | [E] Andre K | }} |
| 58 | 26 | [X] Marcus F | * Kontextmenü > Item bearbeiten |
| 59 | 15 | [E] Andre K | ** 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) |
| 60 | 13 | [E] Andre K | ** Text 1 (oben links) |
| 61 | ** Text 2 (oben rechts) |
||
| 62 | ** Text 3 (unten links) |
||
| 63 | ** Text 4 (unten rechts) |
||
| 64 | ** MainMenu-Link (mm_id) |
||
| 65 | ** Font.Size(1) |
||
| 66 | ** Font.Size(2-4) |
||
| 67 | ** ImageIndex (Glyph = False) %{color: red}[wovon geladen / wie kann man bedienen?] Vorschlag: löschen und Image von oben ausgewählter @mm_id@ laden.% |
||
| 68 | ** mit Schift+Linksklick kann man die Größe anpassen (werden vorgegebene Größe nacheinander gesetzt) |
||
| 69 | ** {{collapse(Beispiel) |
||
| 70 | 1 | [E] Andre K | !tilecontrol.png! |
| 71 | 10 | [E] Andre K | }} |
| 72 | 26 | [X] Marcus F | |
| 73 | 10 | [E] Andre K | |
| 74 | h2. LayoutControl |
||
| 75 | |||
| 76 | * Editierte Seite auswählen |
||
| 77 | * @Zahnrad@ / @Erstellen@ |
||
| 78 | {{collapse(Aufklappen) |
||
| 79 | !create_controls.png! |
||
| 80 | }} |
||
| 81 | * LayoutControl |
||
| 82 | * Popupmenu von LayoutControl: |
||
| 83 | ** @Eigenschaften@: heir kann man aktuell nur die Höhe anpassen |
||
| 84 | ** @LayoutControl-Customizer@: visuelle Layouteditor (Gruppierung, Positionierung, Ausrichtung, Umbenennung usw) |
||
| 85 | 12 | [E] Andre K | |
| 86 | 19 | [Y] Andreas F | Offen: wie erzeugt man ein Split Element? |
| 87 | |||
| 88 | 12 | [E] Andre K | h3. Grid |
| 89 | |||
| 90 | * @Hinzufügen@ / @Grid@ |
||
| 91 | * Popupmenu von Grid |
||
| 92 | 1 | [E] Andre K | {{collapse(Aufklappen) |
| 93 | 10 | [E] Andre K | !grid_popup.png! |
| 94 | }} |
||
| 95 | 12 | [E] Andre K | ** Erste zwei Zeilen: automatisch generierte Namen von Frame und Layout zur Info |
| 96 | ** bei SQL kann man Standard-SQL-Name eingeben oder direkte SQL-Statement: |
||
| 97 | 10 | [E] Andre K | {{collapse(zum Beispiel) |
| 98 | <pre><code class="sql"> |
||
| 99 | 11 | [E] Andre K | SELECT |
| 100 | dbrid, |
||
| 101 | ak_nr, |
||
| 102 | ak_bez |
||
| 103 | FROM |
||
| 104 | art |
||
| 105 | 1 | [E] Andre K | LIMIT 5 |
| 106 | 10 | [E] Andre K | </code></pre> |
| 107 | |||
| 108 | 1 | [E] Andre K | !grid_sql.png! |
| 109 | 11 | [E] Andre K | }} |
| 110 | 12 | [E] Andre K | ** @Parent anpassen@ für Master-Detail-Beziehungstabellen geeignet, |
| 111 | 11 | [E] Andre K | {{collapse(zum Beispiel) |
| 112 | Erstellen zweite LayoutControl mit Grid |
||
| 113 | <pre><code class="sql"> |
||
| 114 | SELECT |
||
| 115 | r_descr, |
||
| 116 | r_unit, |
||
| 117 | r_value |
||
| 118 | FROM |
||
| 119 | recnokeyword |
||
| 120 | 1 | [E] Andre K | WHERE |
| 121 | r_dbrid = :dbrid |
||
| 122 | </code></pre> |
||
| 123 | und setzen Beziehung zum erstem Frame |
||
| 124 | !grid-master-detail.png! |
||
| 125 | }} |
||
| 126 | 37 | [E] Oleg G | * Suche per Suchbegrif |
| 127 | {{collapse(SQL) |
||
| 128 | <pre><code class="sql"> |
||
| 129 | SELECT |
||
| 130 | [...] |
||
| 131 | FROM adk |
||
| 132 | WHERE (:edSearch = '' OR tadk.tsvector(adk) @@ to_tsquery('simple', :edSearch || ':*')); --- Suche |
||
| 133 | </code></pre> |
||
| 134 | }} |
||
| 135 | 12 | [E] Andre K | |
| 136 | 38 | [E] Oleg G | h3. Einstiegsfilter |
| 137 | |||
| 138 | * Daten werden erst nach Enter-Taste in Suchfeld oder nach Suchen-Button Klick geladen |
||
| 139 | {{collapse(Aufklappen) |
||
| 140 | !clipboard-202503210910-uyhpv.png! |
||
| 141 | }} |
||
| 142 | * Ganze Funktionalität nur bei Hauptframe möglich (wo keinen Parent angegeben ist) |
||
| 143 | * Aktivieren für das Grid: {{collapse(Aufklappen) |
||
| 144 | !clipboard-202503210911-j19c7.png! |
||
| 145 | }} |
||
| 146 | * Filter-Liste sind Einträge von der @datarowstate@ Tabelle |
||
| 147 | * BSP: {{collapse(Aufklappen) |
||
| 148 | !clipboard-202304130941-rv6kk.png! |
||
| 149 | }} |
||
| 150 | <pre><code class="sql"> |
||
| 151 | INSERT INTO datarowstate (drs_type, drs_code, drs_sort, drs_filtersql, drs_textnr, drs_defregister) |
||
| 152 | 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 |
||
| 153 | ('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 |
||
| 154 | </code></pre> |
||
| 155 | * @drs_type@ ist der Grid-Name. Dieser wird im Edit-Modus im Popupmenü angezeigt {{collapse(Aufklappen) |
||
| 156 | !clipboard-202304130947-ms0hy.png! |
||
| 157 | }} |
||
| 158 | |||
| 159 | 12 | [E] Andre K | h3. Chart |
| 160 | |||
| 161 | * @Hinzufügen@ / @Chart@ |
||
| 162 | * Popupmenu von Chart |
||
| 163 | 13 | [E] Andre K | ** Parent anpassen und SQL analor Grid (siehe oben) |
| 164 | ** Eigenschaften: |
||
| 165 | 12 | [E] Andre K | {{collapse(Aufklappen) |
| 166 | 1 | [E] Andre K | !chart_popup.png! |
| 167 | }} |
||
| 168 | 14 | [E] Andre K | *** GroupCaption |
| 169 | *** x[x] (Bezeichnung und Farbe definieren) |
||
| 170 | *** y[y1](Bezeichnung und Farbe definieren) |
||
| 171 | *** [y2] (Bezeichnung und Farbe definieren) |
||
| 172 | *** [y3] (Bezeichnung und Farbe definieren) |
||
| 173 | 12 | [E] Andre K | *** ToolBox (um Diagrammdarstellung im Laufzeit zu ändern) |
| 174 | *** ChartType ("Beschreibung":https://docs.devexpress.com/AspNet/15880/aspnet-webforms-controls/chart-control/concepts/creating-charts/2d-chart-types) |
||
| 175 | *** LegendPosition |
||
| 176 | 16 | [E] Andre K | ** Beispiel: {{collapse(Aufklappen) |
| 177 | <pre><code class="sql"> |
||
| 178 | SELECT |
||
| 179 | ag_bdat, |
||
| 180 | SUM(ag_brutto_basis_w) AS sum_brutto, |
||
| 181 | SUM(ag_netto_basis_w) AS sum_netto |
||
| 182 | FROM |
||
| 183 | auftg |
||
| 184 | WHERE |
||
| 185 | ag_astat='E' |
||
| 186 | AND |
||
| 187 | NOT ag_done |
||
| 188 | GROUP BY |
||
| 189 | ag_bdat, ag_lkn |
||
| 190 | 22 | [X] Philipp Wolak | ORDER BY |
| 191 | 23 | [X] Philipp Wolak | sum_netto DESC |
| 192 | LIMIT 8 |
||
| 193 | </code></pre> |
||
| 194 | 29 | [X] Steffen A | |
| 195 | 28 | [X] Steffen A | *Eigenschaften:* |
| 196 | 29 | [X] Steffen A | !chart_eigenschaften.png! |
| 197 | 28 | [X] Steffen A | |
| 198 | 29 | [X] Steffen A | *Diagramm:* |
| 199 | 28 | [X] Steffen A | !chart_ergebniss.png! |
| 200 | }} |
||
| 201 | 23 | [X] Philipp Wolak | |
| 202 | * *%{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) |
||
| 203 | {{collapse(Aufklappen) |
||
| 204 | !clipboard-202505221244-gd0rx.png! |
||
| 205 | }} |
||
| 206 | |||
| 207 | h3. Groups |
||
| 208 | |||
| 209 | Groups können sowohl als statische Gruppierung, als auch als Registerfenster verwendet werden. |
||
| 210 | |||
| 211 | ~> Layout-Control Customizer > Kontextmenü der Gruppe > Layout Direction |
||
| 212 | |||
| 213 | 22 | [X] Philipp Wolak | h2. Synchronisierung |
| 214 | |||
| 215 | 30 | [E] Andre K | *%{color:red}WICHTIGER HINWEIS:*% Von Kunden vorgenommene Änderungen an Prodat-Dashboards können nicht zusammengeführt werden und werden bei der Synchronisierung überschrieben. |
| 216 | 22 | [X] Philipp Wolak | |
| 217 | * Dashboards werden als OPTIONS (component_options) auf den SyncServer (PRODAT-18.08) synchronisiert und stehen damit für alle Kunden zur Verfügung |
||
| 218 | 1 | [E] Andre K | * Bei neuen Dashboards ist zusätzlich der neu erstellte Hauptmenüpunkt auf den SyncServer hochzuladen |
| 219 | 35 | [X] Christoph Wellm | |
| 220 | 46 | [X] Marcus F | --- |
| 221 | 1 | [E] Andre K | |
| 222 | 46 | [X] Marcus F | h2. Dashboard-Konfiguration (@TLayoutFrameGrid@) |
| 223 | |||
| 224 | h3. @_StandardSQL@ / @_StandardSQLWrap@ |
||
| 225 | |||
| 226 | 35 | [X] Christoph Wellm | 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: |
| 227 | |||
| 228 | !standard_sql_wrap.png! |
||
| 229 | |||
| 230 | 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: |
||
| 231 | |||
| 232 | <pre><code class="sql"> |
||
| 233 | SELECT * FROM (&standard_sql |
||
| 234 | 1 | [E] Andre K | ) AS standard_sql |
| 235 | </code></pre> |
||
| 236 | 36 | [X] Christoph Wellm | |
| 237 | 46 | [X] Marcus F | Es ist zu berücksichtigen, dass für die initiale *standard_sql* - Query die Syntax genau so (inklusive Zeilenumbrüchen) aussehen muss. |
| 238 | *Achtung*: Der _AutoCheck_ wird beim Term _&standard_sql_ fehlschlagen (intern definiertes Makro) - die Fehlermeldung an dieser Stelle kann man hier aber ignorieren. |
||
| 239 | 1 | [E] Andre K | |
| 240 | 46 | [X] Marcus F | |_. Property|_. Wirkung| |
| 241 | |@_StandardSQL@|Lädt SQL aus @systemsqlstatement@ (inkl. @sql_macro@-Mechanik).| |
||
| 242 | |@_StandardSQLWrap@|Erlaubt Wrapping-Statement mit Macro @&standard_sql@ (Inhalt des geladenen @_StandardSQL@).| |
||
| 243 | 1 | [E] Andre K | |
| 244 | 46 | [X] Marcus F | h4. Macro-Verhalten mit @_StandardSQL@ |
| 245 | 1 | [E] Andre K | |
| 246 | 46 | [X] Marcus F | * @sql_macro@-Einträge aus dem StandardSQL werden wie bisher berücksichtigt. |
| 247 | * Zusätzlich können Macros über @_Config@ in @[Settings]@ überschrieben werden (nur wenn das Macro im Query vorhanden ist). |
||
| 248 | * Schreibweisen für @_Config@-Macrokeys: @¯oname=...@ oder @macroname=...@. |
||
| 249 | 1 | [E] Andre K | |
| 250 | 46 | [X] Marcus F | h3. @_Config@ (INI-ähnlich) |
| 251 | 1 | [E] Andre K | |
| 252 | 46 | [X] Marcus F | |_. Key|_. Typ|_. Default|_. Wirkung| |
| 253 | 1 | [E] Andre K | |@FieldAliasViewTableName@|String|leer|Setzt Alias-Tabelle für Feldbezeichnungen im Grid.| |
| 254 | 47 | [X] Marcus F | |@BtMode@|Boolean|@false@|Vor Speichern fragen (Grünes Icon ganz links oben neben Tabelleneinstellungen )| |
| 255 | 46 | [X] Marcus F | |@Submenus@|Boolean|@false@|Steuert Submenüs im Popup für „Bearbeitbare Felder“ und Pivot-Menüeinträge.| |
| 256 | |@UpdateEditIcon@|Boolean|@true@|Steuert Stift-Icon bei editierbaren Feldern (@true@ = anzeigen, @false@ = ausblenden).| |
||
| 257 | |@PivotDirectEdit@|Boolean|@false@|Erlaubt direkte Bearbeitung von Pivot-Feldern auch ohne @_SQLUpdate@ (nur Pivot-View).| |
||
| 258 | |@EditableFields@|CSV/String|leer|Felder, die editierbar gesetzt werden (zusätzlich zur Pivot-Logik).| |
||
| 259 | |@FixedColumns@|CSV/String|leer|Felder, die im linken Fixed-Band fixiert werden.| |
||
| 260 | |@&<MacroName>@ oder @<MacroName>@|String|abhängig von @sql_macro@|Überschreibt vorhandene Query-Macros aus @_StandardSQL@/@sql_macro@ zur Laufzeit.| |
||
| 261 | 1 | [E] Andre K | |
| 262 | 46 | [X] Marcus F | h4. Beispiel @_Config@ |
| 263 | 1 | [E] Andre K | |
| 264 | 46 | [X] Marcus F | <pre> |
| 265 | [Settings] |
||
| 266 | EditableFields=ag_freigabe,ag_prio |
||
| 267 | FixedColumns=ag_nr,ag_kunde |
||
| 268 | Submenus=true |
||
| 269 | UpdateEditIcon=false |
||
| 270 | PivotDirectEdit=true |
||
| 271 | ¯owhere= AND ak_fertigung |
||
| 272 | </pre> |
||
| 273 | 1 | [E] Andre K | |
| 274 | 46 | [X] Marcus F | h3. @_SQLUpdate@ (Hinweis: Property heißt @_SQLUpdate@, nicht @_UpdateSQL@) |
| 275 | 1 | [E] Andre K | |
| 276 | 46 | [X] Marcus F | |_. Wert|_. Wirkung| |
| 277 | |gesetzt (nicht leer)|Aktiviert normalen Edit-/Post-Update-Pfad (@SQLUpdate@, Grid Editing, Post/Cancel).| |
||
| 278 | |leer|Normales SQL-Update deaktiviert (read-only), außer @PivotDirectEdit=true@ in Pivot-Views.| |
||
| 279 | 1 | [E] Andre K | |
| 280 | 46 | [X] Marcus F | Priorität: @_SQLUpdate@ hat Vorrang. Wenn @_SQLUpdate@ gesetzt ist, bleibt der Standard-Updatepfad aktiv; @PivotDirectEdit@ wirkt dann nur ergänzend. |
| 281 | |||
| 282 | h3. @_MultiSelect@ |
||
| 283 | |||
| 284 | |_. Wert|_. Wirkung| |
||
| 285 | |@true@|Mehrfachselektion im Grid aktiv; relevant für Sammelaktionen im Popup (z. B. boolesche Feldänderungen).| |
||
| 286 | |@false@|Einzelselektion.| |
||
| 287 | |||
| 288 | |||
| 289 | h3. Wichtige Kombinationen |
||
| 290 | |||
| 291 | # @_SQLUpdate@ gesetzt + @EditableFields@ gesetzt: klassischer editierbarer Grid-Betrieb. |
||
| 292 | # @_SQLUpdate@ leer + @PivotDirectEdit=true@: Pivot-Felder direkt bearbeitbar (Direktspeicherung über RecNoParam-Pfad). |
||
| 293 | # @Submenus=true@: Popup gruppiert Bearbeitungs- und Pivot-Einträge in Untermenüs. |
||
| 294 | # @UpdateEditIcon=false@: editierbare Felder ohne Stift-Icon. |