Projekt

Allgemein

Profil

3950 Dashboard » Historie » Revision 48

Revision 47 ([X] Marcus F, 19.05.2026 14:11) → Revision 48/50 ([X] Marcus F, 19.05.2026 14:14)

{{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: @&macroname=...@ 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 
 &macrowhere= AND ak_fertigung 
 </pre> 

 Achtung: ein _Config macro zu verwenden sollte bevorzugt gegenüber SQLWrap verwendet werden. Die Pivot-Funktionen stehen sonst nicht zur Verfügung, wenn der Pivot-Aufruf im StandardSql definiert 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.