Was ist eine Ansicht?
dForge hat zwei verwandte Ansichts-Systeme, die zusammenarbeiten:
- Datenansichten sind gespeicherte Konfigurationen für Mehr-Datensatz-Bildschirme — Grids, Kanbans, Kalender. Sie sind an Menüpunkte angehängt: Wenn ein Anwender auf einen Menüpunkt klickt, wird die passende Datenansicht geladen.
- Entitätsansichten sind ordner-spezifische Spalten-Konfigurationen und Formular-Layouts für einen einzelnen Datensatz. Sie steuern, welche Spalten ein Anwender sieht, wenn er einen Datensatz aus einem Ordner öffnet, und wie das Formular angeordnet ist.
Zusammen lassen sie dieselbe Entität in zwei Ordnern völlig unterschiedlich aussehen — andere Spalten, andere Formulare, andere Filter — ohne die zugrunde liegende Tabelle zu duplizieren.
Datenansichts-Typen
| Typ | Am besten für | Beschreibung |
|---|---|---|
| Grid | Listen von Datensätzen | Tabellen-artige Darstellung mit sortierbaren Spalten, Inline-Bearbeitung und Auswahl. Immer verfügbar. |
| Kanban | Pipeline-Tracking | Board, gruppiert nach einem Status-/Kategorie-Feld. Erfordert, dass die Entität ein Status-Feld hat. |
| Liste | Kompaktes Durchstöbern | Titel + Untertitel-Vorlage, gut für einfache Daten und Mobile. |
| Kalender | Datumsbasierte Datensätze | Monats-/Wochen-/Tagesansicht. Erfordert ein Datumsfeld. |
| Timeline | Geplante Arbeit | Gantt-artige Timeline. Erfordert Start- und Enddatum-Felder. |
| Galerie | Bild-lastige Daten | Karten-Grid mit Bild-Thumbnails. (Geplant.) |
Die Karten-Ansicht ist kein Datenansichts-Typ — es ist das Einzel-Datensatz-Formular, das aus dem Layout einer Entitätsansicht gerendert wird, wenn ein Anwender eine Zeile öffnet.
Wenn ein Client einen Ansichtstyp empfängt, den er nicht unterstützt — oder einen, der nicht zur Entität passt (z. B. Kanban ohne Status-Feld) — fällt er automatisch auf Grid zurück.
Grid-Ansicht
Die Standard- und gebräuchlichste Ansicht. Funktionen:
- Spalten-Konfiguration — wählen, welche Felder erscheinen, ihre Reihenfolge und Breite
- Sortieren — Spaltenüberschriften klicken, um aufsteigend/absteigend zu sortieren
- Inline-Bearbeitung — Doppelklick auf eine Zelle, um sie an Ort und Stelle zu bearbeiten
- Auswahl — Checkbox-Spalte für Massenoperationen
- Aggregationen — Footer-Zeile mit Summe, Anzahl, Durchschnitt, Min, Max pro Spalte
- Master-Detail — eine Zeile aufklappen, um verbundene Kind-Datensätze anzuzeigen
Karte (Einzel-Datensatz-Formular)
Das Detail-Formular für einen einzelnen Datensatz. Layouts werden pro Entitätsansicht definiert, sodass dieselbe Entität in verschiedenen Ordnern unterschiedliche Formulare haben kann. Layouts bestehen aus zwei Element-Typen:
columnGroup— eine Sektion von Feldern, die zusammen gerendert werden. Mappt auf Entitäts-Spaltengruppen, die als zwei-zeilige Header in Grids angezeigt werden können.set— ein Inline-Detail-Grid für ein Kind-Set-Feld (Master-Detail), z. B. Rechnungspositionen innerhalb eines Rechnungs-Formulars.
Beide Element-Typen geben die exakte Liste der zu rendernden Felder in Reihenfolge an. Formel-Spalten und generierte Aggregate werden neben physischen Feldern angezeigt.
Kanban-Ansicht
Board-Layout, gruppiert nach einem Feldwert. Konfiguration:
- Gruppen-Feld — welches Feld die Spalten bestimmt (z. B. Status, Phase)
- Titel-Feld — was als Karten-Titel angezeigt wird
- Untertitel-Felder — zusätzliche Felder, die auf jeder Karte angezeigt werden
Eine Karte per Drag-and-Drop zwischen Spalten verschieben, um den Wert des Gruppen-Feldes zu aktualisieren.
Kalender-Ansicht
Stellt Datensätze auf einem Kalender dar. Konfiguration:
dateField— welches Feld das Ereignis positionierttitleField— was am Ereignis angezeigt wird
Timeline-Ansicht
Gantt-artige Timeline. Konfiguration:
startField/endField— Datumsbereich-FeldertitleField— Balken-Bezeichnung
Listen-Ansicht
Kompakte Liste mit Titel- und Untertitel-Vorlage. Konfiguration:
titleField— das primäre Anzeige-FeldsubtitleField— sekundäre Information
Datenquellen
Eine Datenansicht deklariert eine oder mehrere dataSources — die Entitäten und Spalten, die sie zeigt.
Einzelne Entität (am häufigsten)
{
"viewType": "grid",
"dataSources": [
{
"entityCode": "product",
"level": 0,
"columns": ["name", "sku", "category", "price", "quantity"]
}
]
}
Master-Detail (hierarchisch)
Eine Eltern-Entität auf level: 0 mit Detail-Entitäten auf level: 1+. Die Beziehung folgt einem Set-Feld auf dem Eltern. Zeilen klappen auf, um ihre Kinder zu zeigen.
{
"viewType": "grid",
"dataSources": [
{ "entityCode": "order", "level": 0,
"columns": ["order_number", "order_date", "status", "total"] },
{ "entityCode": "order_detail", "level": 1,
"parentSetField": "details",
"columns": ["product_id", "quantity", "price", "amount"] }
]
}
Selbe Ebene (Union)
Mehrere Entitäten auf Level 0, zusammen angezeigt — funktioniert am besten, wenn sie gemeinsame Spalten teilen (z. B. eine vereinheitlichte „letzte Aktivität“-Liste).
Ansichts-Spalten
Spalten können als einfache Strings (nur der Spalten-Code) oder als Objekte mit Overrides geschrieben werden. Beide Formen können gemischt werden:
"columns": [
"name",
{ "column_cd": "sku", "width": 120 },
{ "column_cd": "internal_note", "visible": false },
"price"
]
| Property | Beschreibung |
|---|---|
column_cd | Spalten-Code (entspricht einem entity_column.column_cd) |
width | Spaltenbreite in Pixel (Grid) |
visible | Ob die Spalte standardmäßig angezeigt wird |
Die String-Form wird in Modul-Paketen aus Kürze bevorzugt; anwender-angepasste Ansichten serialisieren als Objekte, um Breiten und Sichtbarkeit zu bewahren.
Filter
Filter-Komposition
Jede Abfrage wird durch vier Schichten gefiltert, die in der Datenbank mit AND verknüpft sind:
| Schicht | Quelle | Zweck |
|---|---|---|
| 1. Ordner-Filter | Der row_filter des Ordners | Schränkt Daten auf den Kontext des Ordners ein (z. B. Lager, Division) |
| 2. Ansichts-Filter | Der filter der Datenansicht | Schränkt auf eine ansichts-spezifische Teilmenge ein (z. B. amount > 1000) |
| 3. Sicherheits-Filter | Sicherheitsregeln auf Zeilenebene | Setzt Zugriffssteuerung durch (z. B. nur eigene Datensätze) |
| 4. Anwender-Ad-hoc-Filter | UI-Filter-Leiste | Temporäre Filter, die der Anwender zur Laufzeit hinzufügt |
Deshalb kann man sich Ordner als dynamische gefilterte Ansichten vorstellen: Die Ordner-Schicht allein bestimmt, welche Datensätze überhaupt in irgendeiner Ansicht innerhalb des Ordners erscheinen.
Anwender-Filter
Anwender können zur Laufzeit Filter pro Spalte hinzufügen:
- Text: enthält, gleich, beginnt mit
- Zahl: gleich, größer als, kleiner als, zwischen
- Datum: gleich, vor, nach, zwischen, heute, diese Woche, diesen Monat
- Dropdown/Flags: ist, ist nicht, ist eines von
- Lookup: ist, ist nicht (suchbasiert)
Sicherheit auf Spaltenebene
Entitätsansichten dienen auch als Schicht für Sicherheit auf Spaltenebene. Die entity_v_column-Zeilen für eine Ansicht listen auf, welche Spalten zugänglich sind — alles, was nicht aufgelistet ist, ist versteckt, und der Anwender kann es nicht abfragen. Verschiedene Ordner können dieselbe Entität an verschiedene Entitätsansichten binden, sodass ein Lagerverwalter-Ordner quantity und location zeigen kann, während ein Buchhaltungs-Ordner price, cost und margin auf genau derselben Produkttabelle zeigt.
Aggregationen
Grid-Ansichten können Footer-Aggregationen pro Spalte zeigen. Verfügbare Aggregations-Typen hängen vom Feldtyp ab:
| Aggregation | Unterstützte Typen |
|---|---|
| Summe | number, currency |
| Anzahl | alle Typen |
| Durchschnitt | number, currency, percent |
| Min | number, currency, date, datetime |
| Max | number, currency, date, datetime |