What is a View?
dForge has two related view systems that work together:
- Data views are saved multi-record screen configurations — grids, kanbans, calendars. They’re attached to menu items: when a user clicks a menu item, the matching data view loads.
- Entity views are per-folder column configurations and form layouts for a single record. They control which columns a user can see when opening a record from a folder, and how the form is laid out.
Together they let the same entity look completely different in two folders — different columns, different forms, different filters — without duplicating the underlying table.
Data View Types
| Type | Best for | Description |
|---|---|---|
| Grid | Lists of records | Spreadsheet-style table with sortable columns, inline editing, and selection. Always available. |
| Kanban | Pipeline tracking | Board grouped by a status/category field. Requires the entity to have a status field. |
| List | Compact browsing | Title + subtitle template, good for simple data and mobile. |
| Calendar | Date-based records | Month/week/day calendar. Requires a date field. |
| Timeline | Scheduled work | Gantt-style timeline. Requires start and end date fields. |
| Gallery | Image-heavy data | Card grid with image thumbnails. (Planned.) |
The card view isn’t a data view type — it’s the single-record form rendered from an entity view’s layout when a user opens a row.
If a client receives a view type it doesn’t support — or one that doesn’t fit the entity (e.g., kanban without a status field) — it falls back to grid automatically.
Grid View
The default and most common view. Features:
- Column configuration — choose which fields appear, their order, and width
- Sorting — click column headers to sort ascending/descending
- Inline editing — double-click a cell to edit in place
- Selection — checkbox column for bulk operations
- Aggregations — footer row with sum, count, average, min, max per column
- Master-detail — expand a row to show related child records
Card (Single-Record Form)
The detail form for a single record. Layouts are defined per entity view, so the same entity can have different forms in different folders. Layouts are made up of two element types:
columnGroup— a section of fields rendered together. Maps to entity column groups, which can show as two-line headers in grids.set— an inline detail grid for a child set field (master-detail), e.g., invoice lines inside an invoice form.
Both element types specify the exact list of fields to render, in order. Formula columns and generated aggregates display alongside physical fields.
Kanban View
Board layout grouped by a field value. Configuration:
- Group field — which field determines the columns (e.g., Status, Stage)
- Title field — what to show as the card title
- Subtitle fields — additional fields shown on each card
Drag and drop a card between columns to update the group field value.
Calendar View
Displays records on a calendar. Configuration:
dateField— which field positions the eventtitleField— what to show on the event
Timeline View
Gantt-style timeline. Configuration:
startField/endField— date range fieldstitleField— bar label
List View
Compact list with title and subtitle template. Configuration:
titleField— the primary display fieldsubtitleField— secondary information
Data Sources
A data view declares one or more dataSources — the entities and columns it shows.
Single Entity (Most Common)
{
"viewType": "grid",
"dataSources": [
{
"entityCode": "product",
"level": 0,
"columns": ["name", "sku", "category", "price", "quantity"]
}
]
}
Master-Detail (Hierarchical)
A parent entity at level: 0 with detail entities at level: 1+. The relationship follows a set field on the parent. Rows expand to show their children.
{
"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"] }
]
}
Same-Level Union
Multiple entities at level 0, shown together — works best when they share common columns (e.g., a unified “recent activity” list).
View Columns
Columns can be written as plain strings (just the column code) or as objects with overrides. Both forms can be mixed:
"columns": [
"name",
{ "column_cd": "sku", "width": 120 },
{ "column_cd": "internal_note", "visible": false },
"price"
]
| Property | Description |
|---|---|
column_cd | Column code (matches an entity_column.column_cd) |
width | Column width in pixels (grid) |
visible | Whether the column is shown by default |
The string form is preferred in module packages for brevity; user-customized views serialize as objects to preserve widths and visibility.
Filters
Filter Composition
Every query is filtered by four layers that are AND-ed together at the database:
| Layer | Source | Purpose |
|---|---|---|
| 1. Folder filter | The folder’s row_filter | Scopes data to the folder’s context (e.g., warehouse, division) |
| 2. View filter | The data view’s filter | Narrows to a view-specific subset (e.g., amount > 1000) |
| 3. Security filter | Row-level security rules | Enforces access control (e.g., own records only) |
| 4. User ad-hoc filter | UI filter bar | Temporary filters the user adds at runtime |
This is why folders can be thought of as dynamic filtered views: the folder layer alone determines which records ever appear in any view inside it.
User Filters
Users can add filters per column at runtime:
- Text: contains, equals, starts with
- Number: equals, greater than, less than, between
- Date: equals, before, after, between, today, this week, this month
- Dropdown/Flags: is, is not, is any of
- Lookup: is, is not (search-based)
Column-Level Security
Entity views also act as the column-level security layer. The entity_v_column rows for a view list which columns are accessible — anything not listed is hidden, and the user can’t query it. Different folders can bind the same entity to different entity views, so a Storekeeper folder can expose quantity and location while an Accounting folder exposes price, cost, and margin on the exact same product table.
Aggregations
Grid views can show footer aggregations per column. Available aggregation types depend on the field type:
| Aggregation | Supported types |
|---|---|
| Sum | number, currency |
| Count | all types |
| Average | number, currency, percent |
| Min | number, currency, date, datetime |
| Max | number, currency, date, datetime |