pgkiln 0.41.0 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/db/migrations/097_generated_app_quality.sql +911 -0
- package/db/migrations/098_app_activity.sql +37 -0
- package/db/migrations/099_layout_positions.sql +29 -0
- package/docs/apex-feature-parity.md +38 -11
- package/docs/guide/03-builder.md +133 -31
- package/docs/guide/04-pages-and-regions.md +46 -3
- package/docs/guide/05-items.md +1 -1
- package/docs/guide/09-reference.md +10 -3
- package/docs/guide/11-from-apex.md +1 -1
- package/docs/guide/12-development.md +3 -2
- package/docs/guide/14-globalization.md +7 -3
- package/docs/guide/17-mobile.md +1 -1
- package/package.json +1 -1
- package/public/app.css +233 -33
- package/public/app.js +263 -0
- package/public/builder.css +142 -2
- package/public/builder.js +311 -3
- package/src/builder/appfromfile.ts +5 -4
- package/src/builder/appsheets.ts +23 -9
- package/src/builder/appwizard.ts +215 -70
- package/src/builder/arrange.ts +133 -17
- package/src/builder/blueprints.ts +2 -1
- package/src/builder/components.ts +29 -23
- package/src/builder/designer.ts +67 -18
- package/src/builder/forms.ts +4 -1
- package/src/builder/home.ts +2 -32
- package/src/builder/newapp.ts +182 -5
- package/src/builder/object-browser.ts +342 -0
- package/src/builder/pwa.ts +3 -3
- package/src/builder/routes.ts +86 -51
- package/src/builder/shared.ts +103 -1
- package/src/builder/sql.ts +13 -65
- package/src/builder/ui.ts +21 -6
- package/src/i18n/ar.ts +17 -0
- package/src/i18n/cs.ts +17 -0
- package/src/i18n/da.ts +17 -0
- package/src/i18n/de.ts +17 -0
- package/src/i18n/el.ts +17 -0
- package/src/i18n/es.ts +17 -0
- package/src/i18n/fi.ts +17 -0
- package/src/i18n/fr.ts +17 -0
- package/src/i18n/he.ts +17 -0
- package/src/i18n/it.ts +17 -0
- package/src/i18n/ja.ts +17 -0
- package/src/i18n/ko.ts +17 -0
- package/src/i18n/nb.ts +17 -0
- package/src/i18n/pl.ts +17 -0
- package/src/i18n/pt.ts +17 -0
- package/src/i18n/ru.ts +17 -0
- package/src/i18n/sv.ts +17 -0
- package/src/i18n/tr.ts +17 -0
- package/src/i18n/uk.ts +17 -0
- package/src/i18n/zh.ts +17 -0
- package/src/i18n.ts +34 -0
- package/src/icons.ts +2 -1
- package/src/layout.ts +2 -2
- package/src/metadata.ts +5 -1
- package/src/runtime/charts.ts +8 -3
- package/src/runtime/devbar.ts +35 -14
- package/src/runtime/engine.ts +13 -4
- package/src/runtime/format.ts +52 -0
- package/src/runtime/items.ts +27 -0
- package/src/runtime/locale.ts +5 -2
- package/src/runtime/regions.ts +61 -4
- package/src/runtime/render.ts +38 -8
- package/src/runtime/report.ts +149 -88
- package/src/runtime/routes.ts +34 -3
- package/src/runtime/styles.ts +5 -2
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- =====================================================================
|
|
2
|
+
-- 098: activity reporting for an application's administrators (sprint 73;
|
|
3
|
+
-- APEX: the Activity Reporting feature of the Create Application wizard)
|
|
4
|
+
--
|
|
5
|
+
-- meta.app_activity(days): the page views, sign-ins and errors of the
|
|
6
|
+
-- current application (meta.app_id()) in the last days (1 to 366), newest
|
|
7
|
+
-- first, at most 10,000 rows. Only for a signed-in user with the admin role
|
|
8
|
+
-- whose session belongs to that application; anyone else gets an error.
|
|
9
|
+
-- The client's IP address and the error details are left out.
|
|
10
|
+
--
|
|
11
|
+
-- The wizard's Activity page (page 9010, authorization ADMIN) reads it:
|
|
12
|
+
-- select * from meta.app_activity(30)
|
|
13
|
+
-- =====================================================================
|
|
14
|
+
create function meta.app_activity(p_days int default 30)
|
|
15
|
+
returns table (at timestamptz, username text, event text, page_no int, elapsed_ms int)
|
|
16
|
+
language plpgsql stable security definer set search_path = meta, pg_catalog as $$
|
|
17
|
+
declare
|
|
18
|
+
v_app int := meta.app_id();
|
|
19
|
+
v_session uuid := nullif(current_setting('pgkiln.session_id', true), '')::uuid;
|
|
20
|
+
begin
|
|
21
|
+
if v_app is null or v_session is null
|
|
22
|
+
or not exists (select 1 from meta.session s where s.id = v_session and s.app_id = v_app)
|
|
23
|
+
or not meta.has_role('admin') then
|
|
24
|
+
raise exception 'the activity of this application is for its administrators' using errcode = '42501';
|
|
25
|
+
end if;
|
|
26
|
+
return query
|
|
27
|
+
select l.at, l.username, l.event, l.page_no, l.elapsed_ms
|
|
28
|
+
from meta.activity_log l
|
|
29
|
+
where l.app_id = v_app
|
|
30
|
+
and l.at > now() - make_interval(days => least(greatest(coalesce(p_days, 30), 1), 366))
|
|
31
|
+
order by l.at desc
|
|
32
|
+
limit 10000;
|
|
33
|
+
end
|
|
34
|
+
$$;
|
|
35
|
+
revoke all on function meta.app_activity(int) from public;
|
|
36
|
+
grant execute on function meta.app_activity(int) to public;
|
|
37
|
+
comment on function meta.app_activity(int) is 'The current application''s activity (page views, sign-ins, errors) for its administrators (098).';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-- =====================================================================
|
|
2
|
+
-- 099: display positions, button positions and side-column page templates
|
|
3
|
+
-- (sprint 77; APEX: a region's Layout → Position, a button's Layout →
|
|
4
|
+
-- Button Position, the Left / Right Side Column page templates)
|
|
5
|
+
--
|
|
6
|
+
-- meta.region.position: where the region shows on the page: banner (above
|
|
7
|
+
-- everything), breadcrumb (the bar under the title), left or right (the side
|
|
8
|
+
-- column of a side-column page template; on other pages in the body, in
|
|
9
|
+
-- sequence), body (the default) or footer (after the body). Null is body.
|
|
10
|
+
-- meta.button.slot: where a region's button shows: create, edit, change,
|
|
11
|
+
-- copy, help or up (the region's top bar), previous, close or delete (the
|
|
12
|
+
-- bottom bar, on the left), next (the bottom bar, on the right) or region
|
|
13
|
+
-- (with the region's other buttons, as before). Null is region.
|
|
14
|
+
-- meta.page.page_template: left_side_column and right_side_column too.
|
|
15
|
+
--
|
|
16
|
+
-- The columns are nullable (older exports and imports leave them null) and
|
|
17
|
+
-- travel with an application's export like its other columns.
|
|
18
|
+
-- =====================================================================
|
|
19
|
+
alter table meta.region add column position text
|
|
20
|
+
check (position in ('banner', 'breadcrumb', 'left', 'body', 'right', 'footer'));
|
|
21
|
+
comment on column meta.region.position is 'Where the region shows (099): banner, breadcrumb, left, body (null), right or footer.';
|
|
22
|
+
|
|
23
|
+
alter table meta.button add column slot text
|
|
24
|
+
check (slot in ('create', 'edit', 'change', 'copy', 'help', 'up', 'previous', 'close', 'delete', 'next', 'region'));
|
|
25
|
+
comment on column meta.button.slot is 'Where a region''s button shows (099): the top bar (create, edit, change, copy, help, up), the bottom bar (previous, close, delete; next on the right) or with the other buttons (region, null).';
|
|
26
|
+
|
|
27
|
+
alter table meta.page drop constraint page_page_template_check;
|
|
28
|
+
alter table meta.page add constraint page_page_template_check
|
|
29
|
+
check (page_template in ('standard', 'minimal', 'left_side_column', 'right_side_column'));
|
|
@@ -7,7 +7,7 @@ open item and open an issue or pull request; see [CONTRIBUTING.md](../CONTRIBUTI
|
|
|
7
7
|
Legend: ✅ available · 🟡 partial (see notes) · ❌ not yet · ➖ not planned (a deliberate choice,
|
|
8
8
|
or better served by the PostgreSQL ecosystem; see the notes and [extensions](guide/15-extensions.md))
|
|
9
9
|
|
|
10
|
-
Last reviewed: 2026-10-14 (sprint 70: treemap, sunburst and timeline charts; sprint 69: dragging tasks on a Gantt chart; sprint 68: the Data Reporter's welcome page, Find my workspace; sprint 67: REST source catalogs from OpenAPI documents, a workspace's export and import (two rows added); sprint 66: a blueprint from an existing application; sprint 65: facet charts; sprint 64: approval vacation rules and expiration policies; sprint 63: range, box plot and stock charts; sprint 62: workspace preferences (SQL Workshop and RESTful services per workspace), extension links, Manage backups across applications, SQL Workshop utilities with object reports, About Database and a database monitor; sprint 61: the builder's screens compared with APEX 26.1: the workspace sign-in page, the Administration menu with workspace message, environment banner and utilization, the SQL Workshop home, the App Gallery, application groups and cross application reports (four rows added); sprint 60: isolated workspaces with their own database logins, row-level security on pgkiln's tables and workspace database roles, workspace administrators; sprint 59: the Page Designer's help pane, Quick edit from the developer toolbar; sprint 58: page groups; sprint 57: region templates hero, title bar, buttons container, inline dialog and drawer, wizard with wizard progress, the carousel; sprint 56: Generate DDL and Schema Comparison in the SQL Workshop, `pgkiln ddl` and `pgkiln compare`; sprint 55: an editable login page with a Login region and the Minimal page template, Forgot password through the application's mail service; sprint 54: interactive grid views, the single row view, group by and chart; sprint 53: application settings, user preferences and items kept per user, dynamic translations, `meta.data_export` and data export downloads, display image and geocoded address items; sprint 52: every dynamic action event and action, Ajax callbacks, an error handling function, the session timeout warning; sprint 51: checked imports, application backups, availability and Run only, feedback, type-specific attribute help; sprint 50: lost update detection, warn on unsaved changes, the URL and search regions with search configurations, the developer toolbar with a session state viewer, and e-mail through SMTP with OAuth2, Microsoft Graph, Amazon SES and HTTP APIs; import checks, application availability, property help and e-mail compared again; 2026-10-06: pgkiln 0.31.0, in progress: static application files and the Execute JavaScript dynamic action; region, item, dynamic action and process plug-ins; conditional and dynamic theme styles; XML and Excel in `meta.parse_data`, zips in SQL, `meta.v_boolean`; file items in S3-compatible object storage; map layers by the visible area and as vector tiles; a graphical query builder; tenants for workflows and tasks; application files as YAML and region static IDs; Lucide icons and icon modifiers; PWA push notifications; 0.30.0: 136 icons and an icon picker; an axe-core accessibility audit; cropping pictures; session sharing between applications; twenty-two built-in languages; 0.29.0: workspaces; the Iris base style; drawers; built-in template components including the metric card; Theme Roller dark-mode colours, live preview and template options on items and report columns; report selection across pages; instance settings; fourteen built-in languages; 0.28.0: AI with Claude and OpenAI; 0.27.0: Data Reporter; sample data generator; create application from several sheets, pasted data or existing tables; 0.26.0: working copies with a three-way merge; theme, library and boilerplate applications with subscriptions; 0.25.0: Gantt, pyramid and polar charts; map layers, clustering and server-side spatial filters; REST data sources that write back from forms and grids and synchronise into tables, OAuth2 password and refresh-token grants; debug messages per request and an install/upgrade log; `meta.web_request()` and `meta.parse_data()`; Theme Roller style variants and template options; 0.24.0: automations with several actions, error handling per row and runs from SQL; invoke-API workflow steps; Unload Data in the Data Workshop; create page wizards for cards, calendar, chart, map, faceted search, form and master-detail; create an application from a file; 0.23.0: interactive grid aggregates, frozen/moved/resized columns, layouts and saved grid reports, master-detail, row actions and copy/paste; download processes, execution chains in the background, workflow processes, branches to a function's URL or another app, the Dialog Closed event; number format masks, automatic time zone, runtime messages in German, French and Spanish; SQL scripts, Quick SQL, a query builder, XML loading and data load definitions; custom authentication, lists, page and application locks with developer comments, supporting objects; 0.22.0: keyset paging, report PDFs and REST collections streamed from a cursor, database-account authentication; 0.21.0: HTTP-header authentication behind a reverse proxy; 0.20.0: a popup list of values with server-side search; 0.19.0: row-range pagination, maximum row counts and row limits, lazy loading and caching of regions, streamed CSV/Excel downloads; 0.18.0: calendar week/day/list views with drag and drop, bubble/gauge/funnel/radar charts and drill-down, smart filters, a region display selector and more facet types, computations, conditional branches, build options, menu buttons, REST data sources and web credentials, rich text/Markdown, rating, combobox, date range and QR code items; 0.17.0: an App Builder home, workspace dashboard and utilities like APEX's; 0.16.0: a Page Designer with drag-and-drop layout, a code editor with autocomplete, template components and plug-ins, parallel branches and versions of workflows, the `pgkiln` command line with one file per component; 0.15.0: drop and paste files, heat maps, filtering a report by the map area; 0.14.0: stacked, combo, scatter and pie charts, several files per upload item; 0.13.0: map and tree regions; 0.12.0: REST modules in the builder; 0.11.0: workflows and Progressive Web Apps; 0.10.0: LDAP, SAML, "Keep me signed in", document templates, JSON loading, approvals and the task list; pgkiln installs no application, HR is an example).
|
|
10
|
+
Last reviewed: 2026-10-14 (sprint 77: the Page Designer's layout and tree by display position, button positions, the tree's context menu with Duplicate and Copy to other page, Show Common / Show All, Go to group and the Template Options dialog; display positions, button positions and side-column page templates at runtime; sprint 76: the interactive report's menus and pagination, date items in the date format; sprint 75: the SQL Workshop's Object Browser and tabs; sprint 74: the builder's information architecture: Shared Components grid, Settings tabs, application home search and tasks; sprint 73: the Create Application wizard on one page with page types and features; sprint 72: the runtime chrome compared with APEX 26.2's: the developer toolbar, the Iris look, the navigation bar's Help menu and Install button; sprint 71: generated applications compared with APEX 26.2's: labels, foreign key names in reports, file columns, format masks, the Home page and the dashboard; sprint 70: treemap, sunburst and timeline charts; sprint 69: dragging tasks on a Gantt chart; sprint 68: the Data Reporter's welcome page, Find my workspace; sprint 67: REST source catalogs from OpenAPI documents, a workspace's export and import (two rows added); sprint 66: a blueprint from an existing application; sprint 65: facet charts; sprint 64: approval vacation rules and expiration policies; sprint 63: range, box plot and stock charts; sprint 62: workspace preferences (SQL Workshop and RESTful services per workspace), extension links, Manage backups across applications, SQL Workshop utilities with object reports, About Database and a database monitor; sprint 61: the builder's screens compared with APEX 26.1: the workspace sign-in page, the Administration menu with workspace message, environment banner and utilization, the SQL Workshop home, the App Gallery, application groups and cross application reports (four rows added); sprint 60: isolated workspaces with their own database logins, row-level security on pgkiln's tables and workspace database roles, workspace administrators; sprint 59: the Page Designer's help pane, Quick edit from the developer toolbar; sprint 58: page groups; sprint 57: region templates hero, title bar, buttons container, inline dialog and drawer, wizard with wizard progress, the carousel; sprint 56: Generate DDL and Schema Comparison in the SQL Workshop, `pgkiln ddl` and `pgkiln compare`; sprint 55: an editable login page with a Login region and the Minimal page template, Forgot password through the application's mail service; sprint 54: interactive grid views, the single row view, group by and chart; sprint 53: application settings, user preferences and items kept per user, dynamic translations, `meta.data_export` and data export downloads, display image and geocoded address items; sprint 52: every dynamic action event and action, Ajax callbacks, an error handling function, the session timeout warning; sprint 51: checked imports, application backups, availability and Run only, feedback, type-specific attribute help; sprint 50: lost update detection, warn on unsaved changes, the URL and search regions with search configurations, the developer toolbar with a session state viewer, and e-mail through SMTP with OAuth2, Microsoft Graph, Amazon SES and HTTP APIs; import checks, application availability, property help and e-mail compared again; 2026-10-06: pgkiln 0.31.0, in progress: static application files and the Execute JavaScript dynamic action; region, item, dynamic action and process plug-ins; conditional and dynamic theme styles; XML and Excel in `meta.parse_data`, zips in SQL, `meta.v_boolean`; file items in S3-compatible object storage; map layers by the visible area and as vector tiles; a graphical query builder; tenants for workflows and tasks; application files as YAML and region static IDs; Lucide icons and icon modifiers; PWA push notifications; 0.30.0: 136 icons and an icon picker; an axe-core accessibility audit; cropping pictures; session sharing between applications; twenty-two built-in languages; 0.29.0: workspaces; the Iris base style; drawers; built-in template components including the metric card; Theme Roller dark-mode colours, live preview and template options on items and report columns; report selection across pages; instance settings; fourteen built-in languages; 0.28.0: AI with Claude and OpenAI; 0.27.0: Data Reporter; sample data generator; create application from several sheets, pasted data or existing tables; 0.26.0: working copies with a three-way merge; theme, library and boilerplate applications with subscriptions; 0.25.0: Gantt, pyramid and polar charts; map layers, clustering and server-side spatial filters; REST data sources that write back from forms and grids and synchronise into tables, OAuth2 password and refresh-token grants; debug messages per request and an install/upgrade log; `meta.web_request()` and `meta.parse_data()`; Theme Roller style variants and template options; 0.24.0: automations with several actions, error handling per row and runs from SQL; invoke-API workflow steps; Unload Data in the Data Workshop; create page wizards for cards, calendar, chart, map, faceted search, form and master-detail; create an application from a file; 0.23.0: interactive grid aggregates, frozen/moved/resized columns, layouts and saved grid reports, master-detail, row actions and copy/paste; download processes, execution chains in the background, workflow processes, branches to a function's URL or another app, the Dialog Closed event; number format masks, automatic time zone, runtime messages in German, French and Spanish; SQL scripts, Quick SQL, a query builder, XML loading and data load definitions; custom authentication, lists, page and application locks with developer comments, supporting objects; 0.22.0: keyset paging, report PDFs and REST collections streamed from a cursor, database-account authentication; 0.21.0: HTTP-header authentication behind a reverse proxy; 0.20.0: a popup list of values with server-side search; 0.19.0: row-range pagination, maximum row counts and row limits, lazy loading and caching of regions, streamed CSV/Excel downloads; 0.18.0: calendar week/day/list views with drag and drop, bubble/gauge/funnel/radar charts and drill-down, smart filters, a region display selector and more facet types, computations, conditional branches, build options, menu buttons, REST data sources and web credentials, rich text/Markdown, rating, combobox, date range and QR code items; 0.17.0: an App Builder home, workspace dashboard and utilities like APEX's; 0.16.0: a Page Designer with drag-and-drop layout, a code editor with autocomplete, template components and plug-ins, parallel branches and versions of workflows, the `pgkiln` command line with one file per component; 0.15.0: drop and paste files, heat maps, filtering a report by the map area; 0.14.0: stacked, combo, scatter and pie charts, several files per upload item; 0.13.0: map and tree regions; 0.12.0: REST modules in the builder; 0.11.0: workflows and Progressive Web Apps; 0.10.0: LDAP, SAML, "Keep me signed in", document templates, JSON loading, approvals and the task list; pgkiln installs no application, HR is an example).
|
|
11
11
|
|
|
12
12
|
## At a glance
|
|
13
13
|
|
|
@@ -36,10 +36,10 @@ two, REST source catalogs and the workspace export, with their features.)
|
|
|
36
36
|
| APEX | pgkiln | Notes |
|
|
37
37
|
|---|---|---|
|
|
38
38
|
| App Builder: create, edit, delete, run apps | ✅ | Builder at `/builder` |
|
|
39
|
-
| Create application wizard | ✅ | Blank app with its own database role and schema, started from a **boilerplate application** if wanted; **from a file**: CSV/TSV/XLSX/JSON/XML, where an Excel workbook with several sheets (or JSON with several arrays) becomes several tables, with a preview to include or leave out each sheet, edit table/column names, types and primary keys, and **foreign keys proposed** from matching columns; **from pasted data** (CSV/TSV text); **from existing tables** (pick the tables and views of a schema). Each gives a report and form per table, navigation and an optional dashboard (a chart per table), plus an optional faceted search for a single table, all created in one transaction. **Missing:** blueprints (26.1) |
|
|
39
|
+
| Create application wizard | ✅ | Blank app with its own database role and schema, started from a **boilerplate application** if wanted; **from a file**: CSV/TSV/XLSX/JSON/XML, where an Excel workbook with several sheets (or JSON with several arrays) becomes several tables, with a preview to include or leave out each sheet, edit table/column names, types and primary keys, and **foreign keys proposed** from matching columns; **from pasted data** (CSV/TSV text); **from existing tables** (pick the tables and views of a schema). Each gives a report and form per table, navigation and an optional dashboard (a chart per table), plus an optional faceted search for a single table, all created in one transaction. (sprint 73) **One page like APEX's**: name, icon and description, appearance (theme style, side or top menu, accent), a **page type per table** (interactive report with form, faceted search, cards, calendar, master detail, interactive grid, report, none; large tables proposed as a grid), **features** (About page, access control roles, activity reporting, feedback, theme style selection, PWA, push), settings (alias, authentication, first user, language) and a boilerplate under Advanced; a progress message, then straight to the new application. (sprint 71) The generated pages read like APEX's: human labels (abbreviations, run-together words, column and table comments), plural page and menu names with singular form titles, foreign keys shown by the parent's name in reports, `bytea` columns as one file item with their name/mime/size/updated columns, number format masks, a pencil per report row, the Dashboard after Home with *(none)* and top-N charts, and a Home page with a hero and a card per page. **Missing:** blueprints (26.1) |
|
|
40
40
|
| Create page wizards | ✅ | Report and form, interactive grid, form, cards, calendar, chart, map, faceted search and master-detail (stacked grids) from any table or view, with defaults from the catalog (columns, key, dates, positions, foreign keys), an optional modal form page and a navigation entry; also from SQL (`meta.generate_page`). No side-by-side or drill-down master-detail, no wizard for smart filters or trees |
|
|
41
|
-
| Page Designer | ✅ | IDE-style window (dark or light): component tree, a layout canvas with drag and drop (with keyboard and button alternatives) and a gallery of regions, items and buttons, a filterable property editor; undo/redo; panes become tabs on phones. Settings forms for report, grid, chart, cards, calendar, faceted search, smart filters, display selector, map, tree and template component regions. A code editor for SQL, PL/pgSQL, JSON and HTML with highlighting and autocomplete of tables, columns and `:ITEM` binds (no extra libraries). Drag and drop needs a mouse; on touch screens the Arrange buttons move components |
|
|
42
|
-
| Shared components | ✅ | Navigation menu, **lists** (static entries with nesting, badges, conditions, authorization and build options, or a query; for list regions, the navigation menu and the navigation bar), authorization schemes, build options, lists of values, application items and processes, access control, globalization, template components and plug-ins, web credentials, REST data sources, data load definitions, supporting objects |
|
|
41
|
+
| Page Designer | ✅ | IDE-style window (dark or light): component tree, a layout canvas with drag and drop (with keyboard and button alternatives) and a gallery of regions, items and buttons, a filterable property editor; undo/redo; panes become tabs on phones. Settings forms for report, grid, chart, cards, calendar, faceted search, smart filters, display selector, map, tree and template component regions. A code editor for SQL, PL/pgSQL, JSON and HTML with highlighting and autocomplete of tables, columns and `:ITEM` binds (no extra libraries). Drag and drop needs a mouse; on touch screens the Arrange buttons move components. (sprint 77) The layout draws the page template's display positions (banner, breadcrumb bar, left/right column, body, footer) as drop zones and a region's button positions; the rendering tree groups by position and has a context menu (create in or below, Duplicate, Copy to other page, expand/collapse all, delete); the property editor has Common / All, Go to group and a Template Options dialog; a page number in the toolbar. No nested regions (APEX's sub regions) and no Comment Out |
|
|
42
|
+
| Shared components | ✅ | (sprint 74) A grid of ten groups with counts like APEX's, a searchable, sortable list per type with Create, and Settings-backed types linking to their Settings tab ([mapping below](#shared-components-apex-links-and-pgkiln)). Navigation menu, **lists** (static entries with nesting, badges, conditions, authorization and build options, or a query; for list regions, the navigation menu and the navigation bar), authorization schemes, build options, lists of values, application items and processes, access control, globalization, template components and plug-ins, web credentials, REST data sources, data load definitions, supporting objects |
|
|
43
43
|
| Export / import | ✅ | `meta.export_app()` / `meta.import_app()`: portable JSON, also in the builder (new applications; `pgkiln import --replace` and the MCP `import_app` update one in place, live for every user at the commit). (sprint 51) **Checked imports**: `pgkiln import --check` (`--dry-run`, `--force`), the MCP import (by default) and the builder's import run the Advisor inside the import's transaction (SQL planned as the application's role: missing tables, columns, functions, types, grants; references) and refuse on errors, so nothing changes; APEX doesn't check. The version an import replaces is [backed up](guide/03-builder.md#backups) first ([chapter 18](guide/18-cli.md#checking-before-an-import)) |
|
|
44
44
|
| APEXlang: human-readable, diffable app files; static IDs (26.1) | ✅ | `pgkiln export --format dir`: one JSON file per component with sorted keys, SQL and HTML in sibling files, references by static id instead of database ids; `pgkiln import --replace` updates an app in place, `pgkiln diff` compares ([chapter 18](guide/18-cli.md)). (0.31) **`--format text`**: the same files as YAML (a strict subset any YAML tool reads) with the SQL and templates inline, read back losslessly ([text files](guide/18-cli.md#text-files-apexlang)); regions have a stored **Static ID** (exported as their key, rendered as `data-static-id`), other components are named by their stored names. The syntax is YAML rather than APEXlang's own, so APEXlang files don't import |
|
|
45
45
|
| Working copies, merge, team development | ✅ | **Working copies** of an application ([chapter 3](guide/03-builder.md#working-copies)): a second app on the same schema and data, compared three ways per component (settings, each shared component, page, region, item, …) with the main app as it was when copied; changes on one side merge, conflicts are chosen per component with a line diff; merge into the main app or refresh the copy, keeping users, sessions, saved reports, secrets and automation switches; locks respected. Conflicts are resolved per component, not per property |
|
|
@@ -61,11 +61,11 @@ two, REST source catalogs and the workspace export, with their features.)
|
|
|
61
61
|
| APEX | pgkiln | Notes |
|
|
62
62
|
|---|---|---|
|
|
63
63
|
| Classic report | ✅ | `report` with `interactive: false` |
|
|
64
|
-
| Interactive report | ✅ | Search, column filters, sort, rows per page, control break, aggregates (with subtotals), highlight, saved private and public reports, computed columns, group by, pivot, chart view, row selection into a page item, CSV, Excel (typed cells) and PDF download, print, reset, reflow on phones. a maximum row count (`max_rows`), natural-language control (*Ask in your own words*, 26.1) and row selection that stays across pages. Not possible: flashback queries (PostgreSQL has none; use an audit or temporal table) |
|
|
64
|
+
| Interactive report | ✅ | (sprint 76) An Actions menu of nine entries with dialogs, a column heading menu (sort, hide, control break, the column's values to filter by), a search in one column, hidden columns, pagination with the range, first/last and rows per page. Search, column filters, sort, rows per page, control break, aggregates (with subtotals), highlight, saved private and public reports, computed columns, group by, pivot, chart view, row selection into a page item, CSV, Excel (typed cells) and PDF download, print, reset, reflow on phones. a maximum row count (`max_rows`), natural-language control (*Ask in your own words*, 26.1) and row selection that stays across pages. Not possible: flashback queries (PostgreSQL has none; use an audit or temporal table) |
|
|
65
65
|
| Interactive grid | ✅ | Inline edit, add and delete rows, lists of values, required columns, per-row errors, all-or-nothing save, signed row keys, search and paging; **aggregates** over the whole result (developer and user defined), **frozen columns**, column **reorder/resize/hide** (Actions → Columns, or drag and drop), per-user layouts and **saved grid reports** (private and public), **master-detail** (signed row selection, details refreshed in place), a **row actions menu** (edit, duplicate, delete, links) and **copy/paste** of cell ranges (tab-separated, spreadsheet compatible) ([chapter 4](guide/04-pages-and-regions.md)) |
|
|
66
66
|
| Interactive grid views: single row view, chart view, group by | ✅ | (sprint 54) **Single row view**: one row of the search as a form with first/previous/next/last and *Add row*, from the Actions or row actions menu, saved by the grid's own process with the same checks; **group by** and **chart** set up in the Actions menu over every row of the search, as for the interactive report; `views` limits them; Save comes back to the same search, page and view ([chapter 4](guide/04-pages-and-regions.md#grid-interactive-grid)). No pivot view on grids (the interactive report has one), no editing in the single row view of columns the grid doesn't show |
|
|
67
67
|
| Form (automatic row processing) | ✅ | Fetch, insert, update, delete, in a page or a modal dialog. Detects rows deleted meanwhile. (sprint 50) **Lost update detection** (APEX: *Prevent Lost Updates* and *Lock Row*): the page carries a checksum of the row's form columns (`meta.row_version`, independent of time zone and date format, as the app's role); *Save* and *Delete* lock the row and refuse when it changed meanwhile; off per form with `{"lost_update": false}` ([chapter 4](guide/04-pages-and-regions.md#form)) |
|
|
68
|
-
| Charts | ✅ | Bar, column, stacked, line, area, combination (columns + lines), scatter, bubble, donut, pie, gauge, funnel, radar, **Gantt** (start/end, progress, milestones, dependencies, a today line, a time axis from hours to years), **pyramid** (area-proportional segments, or two series back to back) and **polar** (polar area); (sprint 63) **range** (floating columns from low to high), **box plot** (from one value per row or five statistics) and **stock** (candlesticks from open, high, low and close); multi-series, tooltips, data table, palette checked for colour-vision deficiency; drill-down links on chart marks (checksummed, only to pages the user may open). Drawn on the server as SVG without inline styles. (sprint 69) **Gantt editing**: drag a task or its end, or the arrow keys, runs the region's SQL as the app's role. (sprint 70) **treemap** (squarified, two levels shown), **sunburst** (up to four rings) from `node_id` / `parent_id` columns, and **timeline** (lanes by a `series` column, points and periods, overlaps in rows). **Missing:** other Oracle JET types (e.g. picto, NBox, Sankey) |
|
|
68
|
+
| Charts | ✅ | Bar, column, stacked, line, area, combination (columns + lines), scatter, bubble, donut, pie, gauge, funnel, radar, **Gantt** (start/end, progress, milestones, dependencies, a today line, a time axis from hours to years), **pyramid** (area-proportional segments, or two series back to back) and **polar** (polar area); (sprint 63) **range** (floating columns from low to high), **box plot** (from one value per row or five statistics) and **stock** (candlesticks from open, high, low and close); multi-series, tooltips, data table, (sprint 71) a value axis with gridlines on horizontal bars and top-N with an *Other* bar (`"top": 10`), palette checked for colour-vision deficiency; drill-down links on chart marks (checksummed, only to pages the user may open). Drawn on the server as SVG without inline styles. (sprint 69) **Gantt editing**: drag a task or its end, or the arrow keys, runs the region's SQL as the app's role. (sprint 70) **treemap** (squarified, two levels shown), **sunburst** (up to four rings) from `node_id` / `parent_id` columns, and **timeline** (lanes by a `series` column, points and periods, overlaps in rows). **Missing:** other Oracle JET types (e.g. picto, NBox, Sankey) |
|
|
69
69
|
| Cards and metric cards (26.1 metric card template) | ✅ | Cards from SQL, with a KPI "metric" style |
|
|
70
70
|
| Calendar | ✅ | Month, week, day and list views (agenda list on phones); create on click (a checksummed link with the slot); drag and drop to move events through the developer's move SQL, run as the app's role (CSRF, a *who may drag* authorization, only events the user sees). Works without JavaScript; dragging adds on top ([chapter 4](guide/04-pages-and-regions.md#calendar)) |
|
|
71
71
|
| Faceted search | ✅ | Checkbox, range (predefined, or a custom from/to on numbers and dates), star rating and search facets with live counts that honour the other facets; exclude on checkbox facets (26.1). Values travel as query parameters, never as SQL text. (sprint 65) **Facet charts**: a bar or pie chart of a facet's counts, each mark filtering on its value |
|
|
@@ -156,7 +156,7 @@ two, REST source catalogs and the workspace export, with their features.)
|
|
|
156
156
|
|
|
157
157
|
| APEX | pgkiln | Notes |
|
|
158
158
|
|---|---|---|
|
|
159
|
-
| Universal Theme look and layout | ✅ | Header, side/top navigation, breadcrumbs, 12-column grid, region templates |
|
|
159
|
+
| Universal Theme look and layout | ✅ | Header, side/top navigation, breadcrumbs, 12-column grid, region templates. (sprint 77) Region display positions (banner, breadcrumb bar, left and right column, body, footer), the Left / Right Side Column page templates and button positions (create, edit, change, copy, help, up, previous, close, delete, next) ([chapter 4](guide/04-pages-and-regions.md#side-columns-and-display-positions)) |
|
|
160
160
|
| Region templates (Carousel, Hero, Inline Dialog/Popup/Drawer, Wizard Container, Title Bar, Buttons Container, Login) | ✅ | Standard, plain and collapsible; (sprint 57) **hero**, **title bar**, **buttons container**, **inline dialog** and **inline drawer** (opened by the dynamic action *Open region* or a link to `#R<id>`), **wizard** with the list template **wizard progress**, and the **carousel** style of the display selector; dialog and drawer **pages**; the login page's **Login** region (sprint 55) ([chapter 4](guide/04-pages-and-regions.md#layout)). An inline popup (anchored to a button) is an inline dialog |
|
|
161
161
|
| Warn on unsaved changes | ✅ | (sprint 50) A page attribute: the browser asks before the user leaves the page (links, redirect buttons, other forms, closing a dialog, closing or reloading the tab) while an item differs from the value it was shown with, also after a submit that failed; submitting doesn't ask; items opt out with `{"warn_unsaved": false}`; `pgkiln.isChanged()` (APEX: `apex.page.isChanged()`); on for the form pages the wizards make. The interactive grid keeps its own check ([chapter 4](guide/04-pages-and-regions.md#warn-on-unsaved-changes)). No per-button "do not check" |
|
|
162
162
|
| Responsive: phone, tablet, desktop | ✅ | Tested at 390, 768, 1024 and 1440px on every change (`npm run test:e2e`) |
|
|
@@ -166,7 +166,7 @@ two, REST source catalogs and the workspace export, with their features.)
|
|
|
166
166
|
| Icons (Font APEX 2.5) | ✅ | 136 line icons of pgkiln's own and (0.31) the **Lucide** set of about 1,600 more in the same line style, each served on its own; **modifiers** like Font APEX's (sizes, spin, rotate, flip, colours) and Font APEX names (`fa-users fa-lg`) where Lucide has the icon; a visual picker in the builder that searches all of them by name and search word ([chapter 9](guide/09-reference.md#icons)). Font APEX's own drawings are Oracle's, so icons look different and a few Font APEX names have no match |
|
|
167
167
|
| Accessibility | ✅ | Labels, keyboard, focus rings, reduced motion, table alternatives for charts, scrolling tables reachable from the keyboard; an automated WCAG 2.1 A/AA audit (axe-core) of every example page in light, dark and Iris and of the builder's main pages runs in CI with no violations allowed. Not a manual expert audit |
|
|
168
168
|
| Drawers, top/bottom dialogs (26.1) | ✅ | Modal pages open as a centred dialog or as a drawer from the left, right, top or bottom edge, in three sizes, sliding in (without animation for reduced motion); on phones full screen ([chapter 4](guide/04-pages-and-regions.md#dialogs-and-drawers)). Not yet: a footer slot for inline drawers |
|
|
169
|
-
| New "Iris" default style (26.1) | ✅ | Base style **Iris
|
|
169
|
+
| New "Iris" default style (26.1) | ✅ | Base style **Iris**, the default for new applications, light by default with the user's choice of dark: (sprint 72) like APEX 26's: a white body, a dark warm-grey header with an accent strip and a dark menu, 4 px corners, region headers with a rule, a dark primary button, a large page title; light and dark palettes checked for WCAG AA contrast. The earlier look stays as **Lavender** ([chapter 14](guide/14-globalization.md#base-styles-iris-lavender-and-standard)) |
|
|
170
170
|
| Progressive Web App (push notifications: 23.1) | ✅ | Per app: installable (manifest, icon, standalone), service worker, offline pages (opt-in, wiped at sign-in/out), **forms sent offline queued on the device and sent later** (files included, once only, under the same user), location, camera and barcode items. (0.31) **Push notifications**: users turn them on per device (My account, or the dynamic action `push_subscribe`); `meta.send_push(user, title, body, page, items)` and a `send_push` process queue them, sent after the commit, encrypted for the device (RFC 8291) and signed with the application's own VAPID key (RFC 8292, stored encrypted, never exported); links signed for the recipient; devices end at sign-out, a new password, deactivation or removed access ([chapter 17](guide/17-mobile.md#push-notifications)). No images or action buttons in notifications |
|
|
171
171
|
|
|
172
172
|
## Globalization
|
|
@@ -176,7 +176,7 @@ two, REST source catalogs and the workspace export, with their features.)
|
|
|
176
176
|
| Translated applications (26.1: text-message-based translation of one app) | ✅ | One app with translations, like 26.1; XLIFF 1.2 and CSV export/import, coverage per language |
|
|
177
177
|
| Text messages (`APEX_LANG.MESSAGE`, `&APP_TEXT$…`) | ✅ | `meta.message()`, `&APP_TEXT$NAME.`, fallback to the base and primary language |
|
|
178
178
|
| Language from browser, preference or session | ✅ | Browser, user preference or primary; `?lang=`; right-to-left languages |
|
|
179
|
-
| Date and timestamp format masks | ✅ | Per app or per language |
|
|
179
|
+
| Date and timestamp format masks | ✅ | Per app or per language; (sprint 76) date items show and read the application's date format (or their own) with a calendar button |
|
|
180
180
|
| Dynamic translations (`APEX_LANG.LANG`: translated data values, e.g. list of values entries) | ✅ | (sprint 53) Shared Components → Dynamic translations; `meta.lang(text)` in a query returns the value in the session's language (base language fallback); exported with the application |
|
|
181
181
|
| Number format masks, automatic time zone | ✅ | Oracle-style number masks (`999G999G990D00`, `FML…`, `0000`, `%`, `S`/`MI`/`PR`, `EEEE`, `X`, `RN`) on report, grid and cards columns, charts and number/display items, in the language's separators with the app's currency; Automatic Time Zone (browser, My account, app or database), `timestamptz` shown in it ([chapter 14](guide/14-globalization.md)) |
|
|
182
182
|
|
|
@@ -184,7 +184,7 @@ two, REST source catalogs and the workspace export, with their features.)
|
|
|
184
184
|
|
|
185
185
|
| APEX | pgkiln | Notes |
|
|
186
186
|
|---|---|---|
|
|
187
|
-
| SQL Workshop: SQL commands, object browser | ✅ | (sprint 61) A **home page** like APEX's: tiles, recently created tables, your recent SQL commands and the workspace's recent scripts, and the session's **default schema** (first in the search path of SQL Commands and Scripts). The object
|
|
187
|
+
| SQL Workshop: SQL commands, object browser | ✅ | (sprint 61) A **home page** like APEX's: tiles, recently created tables, your recent SQL commands and the workspace's recent scripts, and the session's **default schema** (first in the search path of SQL Commands and Scripts). (sprint 75) The **Object Browser** like APEX's: a schema in the header, a tree by object type (tables, views, materialized views, indexes, sequences, types, functions, procedures, triggers) with a filter and a Create menu, system and extension objects hidden unless asked, and a table in tabs (columns with Add/Rename/Drop column writing the ALTER TABLE to review, data in pages, indexes, constraints, triggers, grants, row level security, dependencies, statistics, DDL); the tools as main tabs and a More menu. (sprint 62) **Utilities** like APEX's: the tools on one page, **Object Reports** (tables without a primary key, unindexed foreign keys, row-level security without policies or not enabled, PUBLIC grants, unused indexes, largest tables, missing comments), **About Database** and a **Database Monitor** of sessions and blocked queries for administrators. **Missing:** a recycle bin (PostgreSQL has none), user interface defaults (pgkiln's wizards read the catalog and comments) |
|
|
188
188
|
| RESTful services (ORDS) | ✅ | [PostgREST](https://postgrest.org) next to pgkiln: `api` schema, the same RLS as the UI, per-app API role, tokens in the builder, a pre-request check, and **OAuth clients** (client credentials, like ORDS `oauth.create_client`) so tokens renew themselves |
|
|
189
189
|
| REST handler editor, REST-enabled SQL | ✅ | **REST modules** in the builder: handlers (method, path with parameters, SQL as collection, item or statements, roles, public) served by pgkiln with bearer tokens and an OpenAPI description; plus PostgREST for schema-wide APIs. **Missing:** REST-enabled SQL (rarely desirable) |
|
|
190
190
|
| SQL scripts, query builder, Quick SQL | ✅ | **SQL Scripts**: saved, upload/download, a result per statement, stop or continue on errors, optionally one transaction, run history. **Quick SQL** (a subset: tables, child tables, types, the main column directives, `/auditcols`, settings, views). A graphical **query builder**: tables as boxes on a canvas (dragged, placed where left), joins along foreign keys or drawn from column to column (inner or left), column functions with automatic `group by`, conditions, sort, open in SQL Commands; without JavaScript the same as forms ([chapter 3](guide/03-builder.md#sql-workshop)) |
|
|
@@ -219,7 +219,7 @@ two, REST source catalogs and the workspace export, with their features.)
|
|
|
219
219
|
| Workspace message, environment banner, workspace utilization, preferences and extension links (Manage Service) | ✅ | (sprint 61) An **Administration** menu in the icon rail; administrators and workspace administrators set a **workspace message** (on the App Builder home) and an **environment banner** (a coloured label on every builder page of the workspace), and see **workspace utilization** (applications, pages, page views, users, static files, schema storage) ([chapter 3](guide/03-builder.md#workspace-message-and-environment-banner)). (sprint 62) **Workspace preferences**: the SQL Workshop and the applications' RESTful services (REST modules) on or off per workspace; **extension links** in an Extensions menu of the rail ([chapter 3](guide/03-builder.md#workspace-preferences)). **Missing:** the account login controls of APEX's preferences (pgkiln's password policy and sign-in throttling are installation-wide) |
|
|
220
220
|
| Instance administration, install/upgrade logs (26.1) | ✅ | Versioned migrations (`npm run db:migrate`), every run logged; Workspace utilities → **Installation** (administrators): server version, install and upgrade runs with errors, applied migrations, and warnings for migrations the database misses or the server doesn't know ([chapter 3](guide/03-builder.md)). Workspace utilities → **Instance settings**: session length and sign-in throttling (stored in the database, over the environment variables) and an overview of the server's configuration without secrets; a server whose database lacks migrations says so (503) or applies them (`MIGRATE_ON_START`). Other settings stay environment variables |
|
|
221
221
|
| Debug messages | ✅ | Debug levels 1–9 per app; `meta.debug(level, text)` and `meta.debug_enabled(level)` from application SQL (APEX_DEBUG); timed entries per request (page steps, regions, processes, branches, errors, SQL notices); Activity → **Debug messages** viewer per page view with filters and the slowest step highlighted; retention 1–90 days; password item values are never recorded ([chapter 6](guide/06-processing.md)). (sprint 50) Debug for **one session** from the developer toolbar, the application staying out of debug. **Missing:** debug entries for background jobs and REST requests |
|
|
222
|
-
| Developer toolbar, session state viewer | ✅ | (sprint 50) Developers signed in to the builder see a toolbar on the pages of their applications in the same browser: App Builder, the application, **Edit page** (Page Designer), **Session** (the session state viewer: user, roles, session, language, time zone, debug level, this page's items, application items and other pages' items; passwords never shown; clear the page's items) **Quick edit** (sprint 59: click a region, item or button to open it in the Page Designer) and **Debug** for this session only. A separate random token (cookie path `/a`, HttpOnly) of a live builder session of a developer of the application's workspace ([chapter 3](guide/03-builder.md#developer-toolbar)). **
|
|
222
|
+
| Developer toolbar, session state viewer | ✅ | (sprint 50) Developers signed in to the builder see a toolbar on the pages of their applications in the same browser: App Builder, the application, **Edit page** (Page Designer), **Session** (the session state viewer: user, roles, session, language, time zone, debug level, this page's items, application items and other pages' items; passwords never shown; clear the page's items) **Quick edit** (sprint 59: click a region, item or button to open it in the Page Designer) and **Debug** for this session only. A separate random token (cookie path `/a`, HttpOnly) of a live builder session of a developer of the application's workspace ([chapter 3](guide/03-builder.md#developer-toolbar)). (sprint 72) A compact bar of icons with tooltips like APEX's, centred at the bottom, **Customize** (the Theme Roller) and **Info**, hidden to a slim tab when not used, docked at the bottom, top, left or right; the page keeps room for it |
|
|
223
223
|
| Feedback (users send feedback from a page, developers answer) | ✅ | (sprint 51) With *Users can send feedback* on, the navigation bar's **Feedback** link opens a page for a comment, idea or problem about the page (optional rating), with the user's earlier feedback and the developers' answers; developers read, filter, set a status and answer under Application → Feedback ([chapter 3](guide/03-builder.md#feedback)). No screenshots, no e-mail to developers |
|
|
224
224
|
| Automatic application backups, page groups | ✅ | (sprint 51) **Backups**: before every import that replaces an application (CLI, MCP, working copy merge, restore), daily when it changed, and by hand; the newest 25 (configurable) are kept; download and restore from the builder ([chapter 3](guide/03-builder.md#backups)); (sprint 62) Workspace utilities → **Manage backups** across the workspace's applications, with a backup of all of them at once. (sprint 58) **Page groups**: Shared Components → Page groups, a page's *Page group*, the page list by group with a filter ([chapter 3](guide/03-builder.md#page-groups)) |
|
|
225
225
|
| Application availability (Available, Developers only, Restricted access, Unavailable; build status *Run only*) | ✅ | (sprint 51) Available, available to developers only (a builder session in the same browser), restricted to named users, or unavailable with a message, for pages, file downloads, REST modules and PostgREST; build status **Run only** refuses builder changes as if the application were locked, while `pgkiln import --replace` still deploys. Installation settings: not exported, kept by an import ([chapter 3](guide/03-builder.md#availability-and-build-status)) |
|
|
@@ -304,3 +304,30 @@ report filters, App Builder AI and blueprints.
|
|
|
304
304
|
Sources: [APEX 26.1 new features](https://docs.oracle.com/en/database/oracle/apex/26.1/htmrn/new-features.html),
|
|
305
305
|
[What's new in APEX 24.2](https://apex.oracle.com/en/platform/features/whats-new-242/),
|
|
306
306
|
[APEX_MAIL (APEX API reference)](https://docs.oracle.com/en/database/oracle/apex/24.2/aeapi/APEX_MAIL.html).
|
|
307
|
+
|
|
308
|
+
## Shared Components: APEX links and pgkiln
|
|
309
|
+
|
|
310
|
+
(sprint 74) Every link of APEX 26.2's Shared Components page and where it is in pgkiln.
|
|
311
|
+
|
|
312
|
+
| APEX | pgkiln |
|
|
313
|
+
|---|---|
|
|
314
|
+
| Application Definition, Application Items, Application Processes, Application Settings, Build Options | The same names (Application Logic) |
|
|
315
|
+
| Application Computations | ➖ Not planned: an application process *before every page* or an item's computation does it |
|
|
316
|
+
| Authentication Schemes | Settings → Security: one authentication per application (its type and fields); several schemes to switch between are ➖ not planned |
|
|
317
|
+
| Authorization Schemes, Access Control | The same names (Security) |
|
|
318
|
+
| Security Attributes, Session State Protection | Settings → Security and Sign-in; session state protection is per page (Page Designer → *Protection*) |
|
|
319
|
+
| Lists of Values, Lists, Email Templates, Supporting Objects, Subscriptions | The same names (Other Components) |
|
|
320
|
+
| Navigation Menu, Navigation Bar List, Breadcrumbs, Search Configurations | The same names (Navigation and Search); breadcrumbs follow each page's breadcrumb parent |
|
|
321
|
+
| Shortcuts | ➖ Not planned: application items and substitutions (`&ITEM.`) |
|
|
322
|
+
| Themes, Templates, User Interface Attributes, Theme Roller | Themes and Theme Roller, Template Components, Settings → User Interface; page and region templates are a fixed list (➖ no template editor) |
|
|
323
|
+
| Plug-ins, Component Settings | Plug-ins; component settings ➖ not planned |
|
|
324
|
+
| Component Groups | Page Groups (pages); groups of other components ➖ not planned |
|
|
325
|
+
| Progressive Web App | Settings → Progressive Web App |
|
|
326
|
+
| Static Application Files, Static Workspace Files | Static Application Files; workspace files ➖ not planned |
|
|
327
|
+
| Report Layouts, Report Queries | Report Layouts and Document Templates (a template with its own queries) |
|
|
328
|
+
| REST Data Sources, Web Credentials, REST Enabled SQL, Data Load Definitions | The same names (Data Sources); REST Enabled SQL ➖ not planned (one database) |
|
|
329
|
+
| Workflows, Task Definitions, Automations | The same names |
|
|
330
|
+
| Text Messages, Translate, Dynamic Translations, Globalization Attributes | Translations and Text Messages, Dynamic Translations, Settings → Globalization |
|
|
331
|
+
| Map Backgrounds | The installation's map tile server (`MAP_TILE_URL`) |
|
|
332
|
+
| AI Attributes, AI Services, AI Agents | AI Services; AI agents ➖ not planned |
|
|
333
|
+
|
package/docs/guide/03-builder.md
CHANGED
|
@@ -246,23 +246,33 @@ The list is `examples/gallery/gallery.json`; add your own starters there as blue
|
|
|
246
246
|
|
|
247
247
|
### Creating an application
|
|
248
248
|
|
|
249
|
-
**Create** (a tile, or `/builder/create`)
|
|
249
|
+
**Create** (a tile, or `/builder/create`) is one page, like APEX's Create Application wizard. Links at the top
|
|
250
|
+
start from a file, pasted data, a blueprint or the App Gallery instead. Then:
|
|
250
251
|
|
|
251
|
-
| Field | Meaning |
|
|
252
|
-
|
|
253
|
-
|
|
|
254
|
-
|
|
|
255
|
-
|
|
|
256
|
-
|
|
|
257
|
-
|
|
|
258
|
-
|
|
|
252
|
+
| Section | Field | Meaning |
|
|
253
|
+
|---|---|---|
|
|
254
|
+
| Data | Pages on the tables of | The parsing schema: an existing schema (*Show its tables* lists them under Pages), or a new, empty one named after the alias |
|
|
255
|
+
| Application | Name | Display name, shown in the header. Proposed from the schema and selected when you click it, so typing replaces it |
|
|
256
|
+
| | Description, Icon | Shown on the home page's hero and the About page |
|
|
257
|
+
| Appearance | Theme style, Navigation, Accent colour | Iris, Lavender or Standard; a side or top menu; an own accent colour |
|
|
258
|
+
| Pages | a page type per table | *Interactive report with form*, *Faceted search*, *Cards*, *Calendar* (a table with a date column), *Master detail* (a table another table refers to), *Interactive grid*, *Report* or *No page*. Tables with a single-column primary key get a modal form with their report, faceted search, cards and calendar; views and tables without such a key can't have a form or a grid. Proposed: a report with form, an interactive grid for a table of more than 100,000 rows, a report for a view. *Dashboard*: a chart per table |
|
|
259
|
+
| Features | | *About page* (in a Help menu), *Access control* (authorization schemes `CONTRIBUTOR` and `READER` next to `ADMIN`, for the roles admin, contributor and reader), *Activity reporting* (page 9010 for administrators: page views per day and the latest activity, from `meta.app_activity`), *Feedback*, *Theme style selection* (users may choose light or dark), *Install as an app* (PWA) and *Push notifications* (needs `PGKILN_SECRET_KEY`) |
|
|
260
|
+
| Settings | Alias | Lowercase URL name: `inventory` gives `/a/inventory` |
|
|
261
|
+
| | Authentication | *App users* (a login page and a user list), *HTTP header* (a trusted reverse proxy names the user, see [chapter 8](08-security.md#http-header-authentication-reverse-proxy)), *Database accounts* (PostgreSQL login roles and their passwords, see [chapter 8](08-security.md#database-accounts-postgresql-roles)), *Custom* (your own PL/pgSQL function, see [chapter 8](08-security.md#custom-authentication-a-plpgsql-function)) or *None* (a public app) |
|
|
262
|
+
| | First user / Password | The first user; they get the `admin` role. An existing account is reused (its password isn't changed) |
|
|
263
|
+
| | Language | The application's primary language |
|
|
264
|
+
| Advanced | Start from | Shown when there are **boilerplate** applications (Settings → Application type): their pages, shared components and settings are copied into the new application, which keeps its own name, alias, role and authentication ([application types](#application-types-and-subscriptions)) |
|
|
259
265
|
|
|
260
266
|
Creating the app also:
|
|
261
267
|
|
|
262
268
|
- creates the database role `app_<alias>` with `SELECT/INSERT/UPDATE/DELETE` on all tables,
|
|
263
269
|
`USAGE` on sequences and `EXECUTE` on functions in the schema, plus **default privileges**,
|
|
264
270
|
so tables you create later (as the owner, e.g. in the SQL Workshop) are usable by the app straight away;
|
|
265
|
-
- creates page 1 *Home*, a navigation entry, and an authorization scheme `ADMIN` (role `admin`)
|
|
271
|
+
- creates page 1 *Home*, a navigation entry, and an authorization scheme `ADMIN` (role `admin`);
|
|
272
|
+
- shows a progress message while it works and then opens the new application's page in the builder,
|
|
273
|
+
with what was created (and anything left out) as a message.
|
|
274
|
+
|
|
275
|
+
Everything is created in one transaction: when a page can't be made, nothing is.
|
|
266
276
|
|
|
267
277
|
The parsing schema can't be `meta`, `information_schema` or a `pg_*` schema.
|
|
268
278
|
|
|
@@ -334,18 +344,50 @@ most 4 MB of text; upload larger data as a file.
|
|
|
334
344
|
|
|
335
345
|
### Creating an application from existing tables
|
|
336
346
|
|
|
337
|
-
**Create
|
|
338
|
-
`information_schema` and the `pg_*` schemas aren't offered)
|
|
339
|
-
|
|
347
|
+
**Create**, then a schema under *Data* (`/builder/create?schema=…`; pgkiln's `meta`,
|
|
348
|
+
`information_schema` and the `pg_*` schemas aren't offered): each table and view gets a page type
|
|
349
|
+
under *Pages* (above), or *No page*. The application gets that schema as its parsing schema and a role
|
|
340
350
|
`app_<alias>` with the grants of a blank application on the schema (so **all** tables of the schema,
|
|
341
|
-
not only the
|
|
342
|
-
|
|
343
|
-
key, a report page; a navigation entry each; and optionally a dashboard (a chart per table, as above;
|
|
351
|
+
not only the ones with pages). The pages are made with `meta.generate_page`, with a navigation entry
|
|
352
|
+
each; and optionally a dashboard (a chart per table, as above;
|
|
344
353
|
for existing tables the repeating values come from the planner statistics, so `ANALYZE` a table that
|
|
345
354
|
was never analyzed). Everything is created in one transaction. Foreign keys to tables in another
|
|
346
355
|
schema show in forms as select lists that the app's role may not be allowed to read: grant it, or
|
|
347
356
|
pick a schema that holds them all.
|
|
348
357
|
|
|
358
|
+
#### What the generated pages look like
|
|
359
|
+
|
|
360
|
+
The wizards (every *Create application* flow and the page wizards) make pages that read like APEX's:
|
|
361
|
+
|
|
362
|
+
- **Labels**: names become words. `snake_case` and `camelCase` are split, run-together words are
|
|
363
|
+
recognised (`hiredate` → *Hire Date*, `deptno` → *Department Number*) and common abbreviations are
|
|
364
|
+
expanded (`emp` → *Employee*, `dept` → *Department*, `sal` → *Salary*, `comm` → *Commission*, `mgr` →
|
|
365
|
+
*Manager*, `qty` → *Quantity*, `desc` → *Description*, `pct` → *Percent*, `crm` → *CRM*, `id` → *ID*).
|
|
366
|
+
A foreign key column drops its `_id`/`no` suffix (`deptno` → *Department*), and a column named after
|
|
367
|
+
the table's first letter drops it (`emp.ename` → *Name*). A short `COMMENT ON COLUMN` (one line, at
|
|
368
|
+
most 60 characters, no full stop) is the label; a longer one becomes the item's help text. A short
|
|
369
|
+
`COMMENT ON TABLE` names the pages.
|
|
370
|
+
- **Plural and singular**: report pages, cards and the navigation menu use the plural (*Employees*),
|
|
371
|
+
forms and dialog titles the singular (*Employee*).
|
|
372
|
+
- **Reports** show a foreign key's parent by its display column (a name, title or label, else its first
|
|
373
|
+
text column): *Manager* shows KING, *Department* shows SALES. The key itself stays in the query,
|
|
374
|
+
hidden, so filters can use it. A row starts with a pencil that opens the form.
|
|
375
|
+
- **Files**: a `bytea` column becomes one file upload item that also fills the columns that go with it
|
|
376
|
+
(`<col>_name`/`_filename`, `<col>_mime`/`_mime_type`, `<col>_size`, `<col>_updated`; or `filename`
|
|
377
|
+
and `mime_type` next to the only `bytea` column). Reports leave these columns out. Columns named like
|
|
378
|
+
*photo*, *image* or *logo* accept pictures only.
|
|
379
|
+
- **Numbers** get a format mask with group separators (and the scale's decimals for `numeric(p,s)`),
|
|
380
|
+
in reports and forms alike, in the application's language (*2,850.00*); keys get none.
|
|
381
|
+
- The **Dashboard** comes right after *Home* in the menu; its charts are titled *Employees by Manager*,
|
|
382
|
+
rows without a value are labelled *(none)*, and bar charts show the ten largest values (the rest is
|
|
383
|
+
one *Other* bar). Tables with row-level security are left out (the application's role may see none of
|
|
384
|
+
their rows); the result page says which.
|
|
385
|
+
- The **Home** page has a hero with the application's icon and name, and a card per page of the menu
|
|
386
|
+
(a list `HOME_PAGES`, Shared Components → Lists). A blank application gets the hero only.
|
|
387
|
+
- An **About** page (page 9000: the application's description, or the pages of its menu) in a **Help**
|
|
388
|
+
menu of the header's navigation bar (a list `NAVBAR`, the application's navigation bar list).
|
|
389
|
+
- New applications use the **Iris** base style in the **light** theme; users may switch to dark.
|
|
390
|
+
|
|
349
391
|
### Creating an application from a blueprint
|
|
350
392
|
|
|
351
393
|
**Create → From a blueprint** (`/builder/blueprints`; APEX 26.1: *Blueprints*, spec-driven
|
|
@@ -420,6 +462,14 @@ they are **not** run until you choose to.
|
|
|
420
462
|
|
|
421
463
|
## App dashboard
|
|
422
464
|
|
|
465
|
+
(sprint 74) Above the pages: a **search** by page name or number (the rows filter while you type),
|
|
466
|
+
**Report** and **Icons** views, and **Create page** (the page wizards below). **Tasks** on the right: run the
|
|
467
|
+
application, create pages (also with AI), Shared Components, page groups, export, backups, supporting
|
|
468
|
+
objects, lock or delete the application.
|
|
469
|
+
|
|
470
|
+
The **default-password** warning shows on the App Builder home (and Developers) only; dismiss it with × until the
|
|
471
|
+
next sign-in. The avatar keeps a red dot until the password is changed.
|
|
472
|
+
|
|
423
473
|
Open an application to see its pages, with region/item/dynamic-action/process counts,
|
|
424
474
|
authorization and protection. The tabs under its name lead to **Shared Components**, **Activity**,
|
|
425
475
|
**REST API**, **Settings**, **Search** and **Advisor**; **Export** and **Run** are on the right.
|
|
@@ -490,8 +540,11 @@ choosing a component opens the Properties tab.
|
|
|
490
540
|
|
|
491
541
|
- **Left: the component tree**, with four tabs:
|
|
492
542
|
- **Rendering**: the page, *Pre-Rendering* (branches, computations and processes that run
|
|
493
|
-
before the page is shown), the
|
|
494
|
-
|
|
543
|
+
before the page is shown), the regions by
|
|
544
|
+
[display position](04-pages-and-regions.md#side-columns-and-display-positions) (Banner, Breadcrumb bar,
|
|
545
|
+
Left column, Body, Right column, Footer: the page template's positions and any other that has regions)
|
|
546
|
+
with their items and buttons (by [button position](04-pages-and-regions.md#button-positions): *Buttons*,
|
|
547
|
+
*Buttons: Next*, …), and page-level items and buttons;
|
|
495
548
|
- **Dynamic actions**, grouped by event (change, click, page load);
|
|
496
549
|
- **Processing**: computations after submit, validations, processes and the branches (the
|
|
497
550
|
[branch components](06-processing.md#branches) in sequence, then the buttons that go to
|
|
@@ -499,22 +552,36 @@ choosing a component opens the Properties tab.
|
|
|
499
552
|
- **Shared components** the page can use (lists of values, authorization schemes, navigation,
|
|
500
553
|
application items), linking to Shared Components.
|
|
501
554
|
|
|
502
|
-
Icons show which components have an authorization scheme, a condition or a build option
|
|
555
|
+
Icons show which components have an authorization scheme, a condition or a build option; type icons are coloured
|
|
556
|
+
by kind (regions, items, buttons, dynamic actions, processes). Folders open and close
|
|
503
557
|
with a click; with the keyboard, the arrow keys walk the tree (Left / Right close and open a
|
|
504
558
|
folder), Enter opens a component.
|
|
505
|
-
|
|
506
|
-
|
|
559
|
+
|
|
560
|
+
**Right-click** a region, item or button in the Rendering tree (or press <kbd>Shift</kbd>+<kbd>F10</kbd> or the
|
|
561
|
+
menu key) for its menu (APEX: the tree's context menu): *Create page item*, *Create button* (in the region),
|
|
562
|
+
*Create dynamic action*, *Create region below*, **Duplicate** (a copy right after it; a region comes with its
|
|
563
|
+
items and buttons, names get `_2`), **Copy to other page…** (to the end of a page of the same application; items
|
|
564
|
+
named `P<n>_` get that page's number, a region's buttons and items come along, references in SQL are not changed),
|
|
565
|
+
*Expand all below*, *Collapse all below* and *Delete*. The arrow keys move through the menu, Escape closes it.
|
|
566
|
+
APEX's *Create Sub Region* (pgkiln has no nested regions) and *Comment Out* (use a build option) are not there.
|
|
567
|
+
- **Middle: the Layout**: the page template's display positions as labelled zones (Banner, Breadcrumb bar,
|
|
568
|
+
the side column of a side-column template beside the Body, Footer), each with its regions on the 12-column
|
|
569
|
+
grid, each region with its items and its buttons in their button positions, as they will be placed on the page; under it a **gallery** of region types, item types
|
|
507
570
|
and button actions. The middle pane also has a **Page search** tab (searches the application)
|
|
508
571
|
a **Lock and comments** tab ([below](#page-locks-and-comments)) and a **Help** tab (layout keys and the substitution cheat sheet). Zoom in, zoom out and
|
|
509
572
|
maximize (hides the side panes) are above the layout.
|
|
510
573
|
- **Right: the property editor** for the selected component, grouped (Identification, Source,
|
|
511
574
|
Layout, Security, …) with help text for each property. Type in **Filter** to show only the
|
|
512
575
|
properties whose name contains the text (Escape clears it); click a group's name to fold it
|
|
513
|
-
(remembered on this device).
|
|
576
|
+
(remembered on this device). **Common** / **All** (APEX: Show Common / Show All) shows only the properties
|
|
577
|
+
most often set for regions, items and buttons, or all of them (remembered); **Go to group** jumps to a group
|
|
578
|
+
(opening the Attributes tab when the group is there). **Template options** open in a dialog from a button that
|
|
579
|
+
counts the chosen ones; they are saved with the other properties. Under the properties, the **Help** pane (APEX: the Help tab) shows the
|
|
514
580
|
property that has the focus (or the pointer): its help, the name it is stored under in exports and
|
|
515
581
|
application files, and a link to the guide section of the component's type.
|
|
516
582
|
|
|
517
|
-
The toolbar has the page switcher (previous,
|
|
583
|
+
The toolbar has the page switcher (previous, the page number: type or step to one and press Enter, a list of
|
|
584
|
+
all pages, next), **Undo** / **Redo** of
|
|
518
585
|
layout changes, the **Create** menu (region, item, button, dynamic action, computation, validation,
|
|
519
586
|
process, branch, or a new page), a **Utilities** menu (Advisor, search, shared components, all pages, export),
|
|
520
587
|
**Save** (saves the property editor; it is highlighted when there are unsaved changes) and **Run**
|
|
@@ -544,7 +611,11 @@ region that no longer fits starts a new row.
|
|
|
544
611
|
|
|
545
612
|
- **Drag a region** by its header to another place, or drag its right edge to make it wider or
|
|
546
613
|
narrower.
|
|
547
|
-
- **Drag
|
|
614
|
+
- **Drag a region into another position** (zone) to set its display position: e.g. a faceted search into
|
|
615
|
+
the *Left column* of a page with the Left side column template.
|
|
616
|
+
- **Drag an item or button** to another place in its region, to another region, or to *Page level*. While a
|
|
617
|
+
button is dragged, a region's empty [button positions](04-pages-and-regions.md#button-positions) (Create, Edit,
|
|
618
|
+
…, Previous, Next) show as drop targets; dropping it there sets its position.
|
|
548
619
|
- **Drag an entry of the gallery** onto the layout to create that component there, with a working
|
|
549
620
|
starting point (a sample query for reports, charts and cards; a name like `P5_NEW` for items);
|
|
550
621
|
then set its properties on the right. Clicking a gallery entry instead opens the create form
|
|
@@ -555,7 +626,8 @@ region that no longer fits starts a new row.
|
|
|
555
626
|
(move up, move down, narrower, wider, or move an item or button to another region); on phones and
|
|
556
627
|
tablets this is the way to arrange things.
|
|
557
628
|
- **Undo** and **Redo** in the toolbar take back the last 20 layout changes on this page (moving
|
|
558
|
-
and resizing; creating a component starts a new
|
|
629
|
+
and resizing, display and button positions too; creating, duplicating or copying a component starts a new
|
|
630
|
+
history).
|
|
559
631
|
|
|
560
632
|
Without JavaScript the panes are shown one under the other, every component is a link and the
|
|
561
633
|
Arrange buttons still work.
|
|
@@ -635,8 +707,12 @@ Chapters 4–7 describe every component type and property.
|
|
|
635
707
|
## Developer toolbar
|
|
636
708
|
|
|
637
709
|
While you are signed in to the builder, the pages of your applications show the **developer
|
|
638
|
-
toolbar**
|
|
639
|
-
|
|
710
|
+
toolbar** when you run them in the same browser (APEX: the Runtime Developer Toolbar): a compact bar
|
|
711
|
+
of icons, centred at the bottom, each with a tooltip. It isn't shown to anyone else, nor inside
|
|
712
|
+
dialogs. The page keeps room for it, so it never covers the menu's last entry or a report's pager.
|
|
713
|
+
After a few seconds without use it shrinks to a slim tab at the edge; point at it or Tab to it to
|
|
714
|
+
bring it back. **Settings** (the last icon) docks it at the bottom, top, left or right and turns the
|
|
715
|
+
hiding off (kept in your browser). It has:
|
|
640
716
|
|
|
641
717
|
| Entry | Does |
|
|
642
718
|
|---|---|
|
|
@@ -645,6 +721,8 @@ Toolbar). It isn't shown to anyone else, nor inside dialogs, and it can be folde
|
|
|
645
721
|
| **Edit page *n*** | This page in the Page Designer |
|
|
646
722
|
| **Quick edit** | (with JavaScript) Point at a region, item or button of the page (it is outlined) and click it: it opens selected in the Page Designer, in the builder's tab (APEX: Quick Edit). Click the button again or press Esc to stop |
|
|
647
723
|
| **Session** | The **session state viewer**: the user, roles, session id, language, time zone and debug level; the values of this page's items, the application items and the items of other pages in the session. A password item's value is never shown. *Clear the items of page n* empties this page's items in the session (APEX: Clear Cache) |
|
|
724
|
+
| **Customize** | The application's Theme Roller in the builder |
|
|
725
|
+
| **Info** | The application, the page, the user and the developer |
|
|
648
726
|
| **Debug** | Records [debug messages](06-processing.md#debug-messages) for **this session only**, at the chosen level, while the application itself stays out of debug (*Application (n)* when the application has a level of its own). *View debug* opens the recorded requests |
|
|
649
727
|
|
|
650
728
|
How it knows you: signing in to the builder gives the browser a second, separate random token for
|
|
@@ -765,7 +843,14 @@ exported.
|
|
|
765
843
|
|
|
766
844
|
## Shared components
|
|
767
845
|
|
|
768
|
-
Components used by the whole application:
|
|
846
|
+
Components used by the whole application. **Shared Components** opens on a grid like APEX's: ten groups
|
|
847
|
+
(Application Logic, Security, Other Components, Navigation and Search, User Interface, Files and Reports,
|
|
848
|
+
Data Sources, Workflows and Automations, Globalization, Generative AI) with a link and a count per component
|
|
849
|
+
type. A type opens its list (`?type=…`): search by name (the rows filter while you type), sort by name,
|
|
850
|
+
**Create**, and a row opens its editor. The types pgkiln keeps in the application's Settings (authentication,
|
|
851
|
+
security attributes, navigation bar list, user interface attributes, PWA, globalization attributes) open the
|
|
852
|
+
right Settings tab. **Breadcrumbs** shows the pages by their breadcrumb parent. **Tree view** (`?view=tree`)
|
|
853
|
+
is the earlier page: every component in one rail, with **Access control** next to it.
|
|
769
854
|
|
|
770
855
|
| Component | Purpose |
|
|
771
856
|
|---|---|
|
|
@@ -881,6 +966,12 @@ register at the provider, and has a *Test discovery* button. See
|
|
|
881
966
|
|
|
882
967
|
## Settings
|
|
883
968
|
|
|
969
|
+
Settings has tabs (APEX: Edit Application Definition and Security Attributes): **Definition**, **Security**,
|
|
970
|
+
**Sign-in**, **User Interface**, **Globalization**, **Errors and Sessions** and **Progressive Web App**. It opens
|
|
971
|
+
on Definition (`?tab=…` opens another). *Save settings* saves the first five together and comes back to the tab
|
|
972
|
+
you were on. The Security tab shows only the fields of the chosen authentication type (HTTP header, database
|
|
973
|
+
accounts or custom).
|
|
974
|
+
|
|
884
975
|
- **Application**: name, alias, home page.
|
|
885
976
|
- **Security**: authentication (*App users*, *HTTP header*, *Database accounts*, *Custom* or
|
|
886
977
|
*None*), the database role, and **debug mode** (shows full database errors to users; development
|
|
@@ -1104,13 +1195,24 @@ Commands; other developers' are never shown) and the workspace's **recent SQL sc
|
|
|
1104
1195
|
session's **schema** (APEX: the default schema): it goes first in the search path of SQL Commands and SQL Scripts until
|
|
1105
1196
|
you sign out. Tasks link to Quick SQL, blueprints, table descriptions, sample data and Generate DDL.
|
|
1106
1197
|
|
|
1198
|
+
(sprint 75) The tools are tabs: Home, Object Browser, SQL Commands, SQL Scripts and Utilities; **More** opens the
|
|
1199
|
+
others (Quick SQL, Query Builder, Load and Unload Data, Sample Data, DDL, Compare, AI), and the open one is a tab too.
|
|
1200
|
+
|
|
1107
1201
|
- **SQL Commands** (`/builder/sql/commands`): run any SQL as the **owner connection**, not as an application role. Multiple
|
|
1108
1202
|
statements are allowed; the result of the last one is shown (up to 500 rows). Press
|
|
1109
1203
|
**Ctrl/Cmd + Enter** to run. The [code editor](#the-code-editor) suggests every schema, table,
|
|
1110
1204
|
column and function the owner sees.
|
|
1111
|
-
- **Object Browser
|
|
1112
|
-
|
|
1113
|
-
|
|
1205
|
+
- **Object Browser** (APEX's): the **schema** in the header (the session's schema by default) and a tree with a
|
|
1206
|
+
folder per object type (tables, views, materialized views, indexes, sequences, types, functions, procedures,
|
|
1207
|
+
triggers) and a **filter** by name. pgkiln's own schemas (`meta`, `pgkiln_plugins`) and objects that belong to an
|
|
1208
|
+
extension show only with **Show system objects**. **Create** (and the tiles shown when nothing is selected) opens
|
|
1209
|
+
SQL Commands with a CREATE TABLE, VIEW, FUNCTION, SEQUENCE or INDEX statement to fill in. A table opens in tabs:
|
|
1210
|
+
**Columns** (with comments; *Add*, *Rename* and *Drop column* write the ALTER TABLE statement into SQL Commands to
|
|
1211
|
+
review and run: nothing changes until you press Run), **Data** (25 rows a page), **Indexes**, **Constraints**
|
|
1212
|
+
(primary key, foreign keys with the table they refer to, unique, check), **Triggers**, **Grants**, **Row level
|
|
1213
|
+
security** (on or off, the policies), **Dependencies** (views and foreign keys that use it, and what it uses),
|
|
1214
|
+
**Statistics** (rows, sizes, analyze and vacuum times) and **DDL**. A view has the same tabs where they apply; a
|
|
1215
|
+
function or procedure shows its source, a trigger, index, sequence or type its definition.
|
|
1114
1216
|
- **SQL Scripts**: saved scripts, shared by the developers of the workspace. Create one in the editor, upload a
|
|
1115
1217
|
`.sql` file (UTF-8, up to 5 MB) or save one from Quick SQL; download it again as `.sql`. **Run**
|
|
1116
1218
|
splits the script into statements at semicolons (outside strings, comments, quoted identifiers,
|
|
@@ -40,6 +40,41 @@ template of the same name) shows the page without the header, the navigation men
|
|
|
40
40
|
navigation bar: the title and the regions only, centred. The application's
|
|
41
41
|
[login page](08-security.md#the-login-page) uses it and gets the sign-in page's backdrop.
|
|
42
42
|
|
|
43
|
+
### Side columns and display positions
|
|
44
|
+
|
|
45
|
+
Like APEX's Universal Theme, a page has **display positions** and a region chooses one with its
|
|
46
|
+
**Position** (Page Designer → region → Layout; `position` in the files; APEX: Layout → Position):
|
|
47
|
+
|
|
48
|
+
| `position` | Where the region shows |
|
|
49
|
+
|---|---|
|
|
50
|
+
| `banner` | At the top of the page content, above everything else |
|
|
51
|
+
| `breadcrumb` | In the bar under the title (the place of APEX's Breadcrumb Bar) |
|
|
52
|
+
| `left`, `right` | In the side column of a page with page template *Left side column* or *Right side column* |
|
|
53
|
+
| `body` (or empty) | The page body, on the 12-column grid (the default) |
|
|
54
|
+
| `footer` | After the body |
|
|
55
|
+
|
|
56
|
+
The page templates **Left side column** and **Right side column** (Page Designer → Page → Appearance;
|
|
57
|
+
`page_template` `left_side_column` / `right_side_column`) put the regions of that position in a column
|
|
58
|
+
beside the body (14–18rem wide; under the body's start on screens under 900px). On a page without that
|
|
59
|
+
side column, `left` and `right` regions show in the body, in sequence. Regions keep their sequence within
|
|
60
|
+
a position, and a region its condition leaves out leaves no empty position behind. A faceted search in
|
|
61
|
+
the left column next to its report is the typical use.
|
|
62
|
+
|
|
63
|
+
### Button positions
|
|
64
|
+
|
|
65
|
+
A region's button has a **Button position** (Page Designer → button → Layout; `slot` in the files; APEX:
|
|
66
|
+
Button Position):
|
|
67
|
+
|
|
68
|
+
| `slot` | Where the button shows |
|
|
69
|
+
|---|---|
|
|
70
|
+
| `create`, `edit`, `change`, `copy`, `help`, `up` | In the region's header, after the title |
|
|
71
|
+
| `previous`, `close`, `delete` | At the left end of the region's bottom bar |
|
|
72
|
+
| `next` | At the right end of the bottom bar |
|
|
73
|
+
| `region` (or empty) | With the region's other buttons, as before: the header of reports and charts, the bottom of forms and static content |
|
|
74
|
+
|
|
75
|
+
Positions apply to the `standard`, `collapsible` and `plain` templates; the other templates place every
|
|
76
|
+
button where they always do. Page-level buttons have no position.
|
|
77
|
+
|
|
43
78
|
### Dialogs and drawers
|
|
44
79
|
|
|
45
80
|
A modal page (Page Designer → Page → Appearance: *Page mode* Modal dialog) opens over the page that linked to it.
|
|
@@ -187,9 +222,17 @@ select e.empno, e.ename, e.job, d.dname as department, e.sal
|
|
|
187
222
|
|
|
188
223
|
Features for end users:
|
|
189
224
|
|
|
190
|
-
- **Search** across all columns
|
|
191
|
-
|
|
192
|
-
- **
|
|
225
|
+
- **Search** across all columns, or in one column chosen in the list at the start of the search field
|
|
226
|
+
(Enter searches; *Go* too).
|
|
227
|
+
- **Column heading menu** (sprint 76; with JavaScript): clicking a heading opens a menu with *Sort ascending*,
|
|
228
|
+
*Sort descending*, *Hide column*, *Control break* and the column's **values** with their counts (with the current
|
|
229
|
+
search and filters; at most 200), with a box to narrow them; choosing a value filters the report on it. The sort
|
|
230
|
+
arrow of the sorted column sorts at once. Without JavaScript a heading sorts (again for descending).
|
|
231
|
+
- **Hidden columns**: hidden from the heading menu or *Actions → Columns*, shown as chips to bring them back.
|
|
232
|
+
- **Pagination**: *1–15 of 107*, first, previous, next and last page, and the **rows per page** list.
|
|
233
|
+
- **Actions menu** (sprint 76: a short menu like APEX's; each entry opens a dialog, or unfolds in place without
|
|
234
|
+
JavaScript): *Columns*, *Filter*, *Data* (sort, aggregate, compute, control break), *Format* (highlight, rows per
|
|
235
|
+
page), *Chart*, *Group by*, *Pivot*, *Report* (saved reports, reset) and *Download* (CSV, Excel, PDF, print):
|
|
193
236
|
- **column filters** (`=`, `≠`, contains, does not contain, `>`, `≥`, `<`, `≤`, is empty, is
|
|
194
237
|
not empty) and **sort**;
|
|
195
238
|
- **control break**: group the rows by a column, with a heading row per group;
|