FormsRefresh

Home / Oracle stays, Forms becomes APEX

Oracle stays, Forms becomes APEX

All four demo apps rebuilt as Oracle APEX applications from native APEX components, on their original Oracle schemas and PL/SQL, and checked with the same recorded scenarios as every other target.

The pages are made of the components an APEX developer would choose, not a Forms emulation: the original database code runs unchanged, called from APEX processes. Where native APEX behaves differently from Forms and a customer would expect the Forms behaviour, the app keeps it; where the Forms behaviour is an artefact of the client (MDI windows, query mode, alerts on fetch), the difference is a proposed waiver with its reason.

The pages are laid out like the Forms canvases, with declarative settings: each item where the canvas puts it on APEX's 12-column grid, labels on the left, slim padding, grids as tall as the Forms block and columns as wide as its items, in a compact theme style.

AppScenarios, 0 defectsThree runs identicalWaiversAPEX export
Retail order system17 of 1717 of 1718f1100.sql
HR application17 of 1717 of 1710f1200.sql f1201.sql
CareWell clinic22 of 2222 of 2217f1300.sql
Student forms15 of 1515 of 156f1400.sql

From Forms to APEX components

FormsAPEX
Multi-record blockInteractive Grid (editable where the block allows changes; master-detail grids for relations)
Single-record blockForm region on the table with Automatic Row Processing (fetch, insert, update, delete)
List of valuesPopup LOV (with its title and return columns) or select list
Item validation, required itemsDeclarative validations (not null, exists, PL/SQL returning an error text)
WHEN-* triggersDynamic actions (Set Value, Refresh, Confirm, Alert, Execute Server-side Code)
Program units and database PL/SQLProcesses and Execute Server-side Code calling the original packages and procedures, unchanged
Called form, window, alertModal dialog page; alerts as APEX alerts and confirmations
Menu, CALL_FORM / OPEN_FORM navigationButtons, branches and breadcrumbs
Canvas layoutItems on the 12-column grid in the canvas's rows and order, side by side where the canvas has them; left labels; grids sized like the block (displayed records, item widths); theme style Iris - Compact
Look and the unsaved-changes questionUniversal Theme with the page's warn-on-unsaved-changes

Custom JavaScript

Only where APEX has no declarative answer. Retail has none.

AppPlaceWhy
HR, CareWell, studentThe cursor in a grid's first record when a page opens or a query returnsSet Focus cannot target an Interactive Grid cell, and an Interactive Grid raises no After Refresh event
CareWell, studentThe cursor where Forms puts it when a dialog closesAPEX gives the focus back to the dialog's opener after the close event, undoing a Set Focus action
HR, CareWellDiscard the grid's changes when the save question is answered Norefreshing a grid with changes asks APEX's own question again
HR, CareWellConditions and values from the grid (its changes, the selected record's columns)dynamic actions have no declarative test for a grid's changes or its current row
HRClose with unsaved changes asks firstAPEX cancels its unsaved-changes warning when a dialog closes
CareWellClinic > Home from a dialog opened by another dialog redirects the top pagea redirect from a nested dialog navigates its opener's frame, not the page
StudentA double click on an instructor's zip opens the Zip Codes lista Popup LOV has no action that opens it
StudentThe Student Count button's conditiondynamic actions test an item's value, not whether it is shown

Retail order system: 17 of 17

the Orders page: the order as a Form region, its lines in an Interactive Grid
the Orders page: the order as a Form region, its lines in an Interactive Grid (scenario orders-browse).

Export: f1100.sql, installable on APEX 26.2. Waivers: waivers.yaml (18, the app's shared ones included). Entry-by-entry comparison with the Oracle trail: parity.md.

ScenariomatchtoleratedwaiveddefectunmappedThree runs
categories-add-delete6301012identical
categories-browse5205014identical
customers-add-delete6741012identical
customers-browse5705014identical
employees-add-delete8101012identical
employees-browse59013014identical
main-menu-exit210104identical
main-menu-orders36223011identical
order-two-lines27425223093identical
orders-add-new12016745056identical
orders-browse13412232049identical
orders-delete-empty1048729035identical
orders-delete-refused998230037identical
orders-navigate-unsaved16613231060identical
orders-save-fails13717616057identical
products-add-delete10901017identical
products-browse6705014identical

HR application: 17 of 17

EMPLOYEES as a modal dialog page over CONSOLE: an Interactive Grid with tabs of Form regions
EMPLOYEES as a modal dialog page over CONSOLE: an Interactive Grid with tabs of Form regions (scenario employees-open).

Export: f1200.sql f1201.sql, installable on APEX 26.2. Waivers: waivers.yaml (10, the app's shared ones included). Entry-by-entry comparison with the Oracle trail: parity.md.

ScenariomatchtoleratedwaiveddefectunmappedThree runs
console-apex350404identical
console-logout400004identical
employees-apex63702402459identical
employees-change-department5411201968identical
employees-change-job5411201968identical
employees-clear9110004040identical
employees-close4150601478identical
employees-create99035204015identical
employees-delete-refused7860302949identical
employees-delete5380701967identical
employees-details77712002949identical
employees-open157000494identical
employees-search55888703170identical
login-close240002identical
login-fail440204identical
login-ok330003identical
login-open190001identical

CareWell clinic: 22 of 22

Appointments over Patients: modal dialog pages, a Popup LOV and select lists in an Interactive Grid
Appointments over Patients: modal dialog pages, a Popup LOV and select lists in an Interactive Grid (scenario appointments-book).

Export: f1300.sql, installable on APEX 26.2. Waivers: waivers.yaml (17, the app's shared ones included). Entry-by-entry comparison with the Oracle trail: parity.md.

ScenariomatchtoleratedwaiveddefectunmappedThree runs
appointments-book825192002062identical
appointments-cancel816182102032identical
appointments-delete-refused508121501258identical
appointments-department584451701518identical
appointments-double-booking816192002062identical
appointments-invalid-duration817192002062identical
appointments-no-patient4935508identical
appointments-return371104801010identical
billing-delete-refused17456100822identical
billing-patient246342050512identical
billing-pay4201646004254identical
billing-return12962490552identical
billing-unsaved255922601366identical
login-billing102450254identical
login-fail390508identical
login-lov105440254identical
login-ok372306identical
main-about444408identical
main-print-schedule464408identical
navigation5492428101750identical
patients-find427150190514identical
patients-query1511216501300identical

Student forms: 15 of 15

FORM2: the Courses dialog over Instructors, courses and their sections as master and detail grids
FORM2: the Courses dialog over Instructors, courses and their sections as master and detail grids (scenario form2-courses).

Export: f1400.sql, installable on APEX 26.2. Waivers: waivers.yaml (6, the app's shared ones included). Entry-by-entry comparison with the Oracle trail: parity.md.

ScenariomatchtoleratedwaiveddefectunmappedThree runs
form1-browse540008identical
form1-insert602108identical
form1-update431106identical
form2-course-delete-refused11423640128identical
form2-courses18438150202identical
form2-instructor-insert1292405022identical
form2-student-insert38960201002identical
form2-student-no-first-name3886020984identical
form2-student-update3016020739identical
form2-students1536010253identical
form2-zip-lov1473016020identical
form3-browse61220409identical
form3-cost-invalid742756010identical
form3-section-course2561653017identical
form3-sections8477107identical