FormsRefresh

HR application / employees-create

employees-create

Create an employee with the three LOVs and save; PRE-INSERT takes the id from EMPLOYEES_SEQ.

0defects
1046values match
3tolerated by policy
7waived
0unmapped

Three runs from a fresh database gave byte-identical diffs. Behaviour that looks odd in the migrated app but is the original's: faithful to the original and waivers. Files: scenario, golden record, target record, diff (JSON).

Scenario steps

Items are addressed by their Forms name (BLOCK.ITEM[row]), the same name in the original and, through the mapping, in the migrated app.

#StepActionChecked on the original
0Open form login
1Type LOGIN.USERNAME = alice, LOGIN.PASSWORD = alice#123
2loginClick LOGIN.LOGIN
3employeesClick CONSOLE.EMPLOYEES
4createClick BUTTONS.CREATE_BUTTON
5Type EMPLOYEES.FIRST_NAME[1] = Ada, EMPLOYEES.LAST_NAME[1] = Lovelace, EMPLOYEES.EMAIL[1] = ALOVELACE, EMPLOYEES.HIRE_DATE[1] = 01-10-2026
6job lovList of values on EMPLOYEES.JOB_ID[1], pick Id = IT_PROG
7department lovList of values on EMPLOYEES.DEPARTMENT_ID[1], pick Department_Name = IT
8manager lovList of values on EMPLOYEES.MANAGER_ID[1], pick Id = 103
9Type EMPLOYEES.SALARY[1] = 6000
10saveClick BUTTONS.SAVE_BUTTON

Screens, step by step

Left: the original Oracle Forms application, recorded on a virtual display. Right: the migrated application in headless Chromium. Screenshots are evidence only; the comparison works on the recorded values.

Step 0: open login

Original (Oracle Forms 14.1.2), step 00-open
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 00-open
Migrated (.NET, PostgreSQL)

Step 1: type

Original (Oracle Forms 14.1.2), step 01-type
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 01-type
Migrated (.NET, PostgreSQL)

Step 2: login

Original (Oracle Forms 14.1.2), step 02-login
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 02-login
Migrated (.NET, PostgreSQL)

Step 3: employees

Original (Oracle Forms 14.1.2), step 03-employees
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 03-employees
Migrated (.NET, PostgreSQL)

Step 4: create

Original (Oracle Forms 14.1.2), step 04-create
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 04-create
Migrated (.NET, PostgreSQL)

Step 5: type

Original (Oracle Forms 14.1.2), step 05-type
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 05-type
Migrated (.NET, PostgreSQL)

Step 6: job lov

Original (Oracle Forms 14.1.2), step 06-job-lov
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 06-job-lov
Migrated (.NET, PostgreSQL)

Step 7: department lov

Original (Oracle Forms 14.1.2), step 07-department-lov
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 07-department-lov
Migrated (.NET, PostgreSQL)

Step 8: manager lov

Original (Oracle Forms 14.1.2), step 08-manager-lov
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 08-manager-lov
Migrated (.NET, PostgreSQL)

Step 9: type

Original (Oracle Forms 14.1.2), step 09-type
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 09-type
Migrated (.NET, PostgreSQL)

Step 10: save

Original (Oracle Forms 14.1.2), step 10-save
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 10-save
Migrated (.NET, PostgreSQL)

Golden record of the original

After each step: the focus, the displayed values that changed, the message line and any alert. The full record (every item of every step, windows, lists of values) is in the JSON file.

#StepAction (by name)Focus afterDisplayed values that changedMessage lineAlertExpect
0Open form loginLOGIN.USERNAME[0]
1Type LOGIN.USERNAME = alice, LOGIN.PASSWORD = alice#123LOGIN.PASSWORD[0]LOGIN.PASSWORD[0] = alice#123
LOGIN.USERNAME[0] = alice
2loginClick LOGIN.LOGINCONSOLE.EMPLOYEES[0]CONSOLE.USERNAME[0] = alice
3employeesClick CONSOLE.EMPLOYEESEMPLOYEES.APEX[0]DEPARTMENT.CITY[0] = Seattle
DEPARTMENT.COUNTRY_NAME[0] = United States of America
DEPARTMENT.DEPARTMENT_ID[0] = 90
DEPARTMENT.DEPARTMENT_NAME[0] = Executive
DEPARTMENT.REGION_NAME[0] = Americas
DEPARTMENT.STATE_PROVINCE[0] = Washington
DEPARTMENT.STREET_ADDRESS[0] = 2004 Charade Rd
EMPLOYEES.DEPARTMENT_ID[0] = 90
EMPLOYEES.DEPARTMENT_ID[1] = 90
EMPLOYEES.DEPARTMENT_ID[2] = 90
EMPLOYEES.DEPARTMENT_ID[3] = 60
EMPLOYEES.DEPARTMENT_ID[4] = 60
EMPLOYEES.DEPARTMENT_ID[5] = 60
EMPLOYEES.DEPARTMENT_ID[6] = 60
EMPLOYEES.DEPARTMENT_ID[7] = 60
EMPLOYEES.DEPARTMENT_ID[8] = 100
EMPLOYEES.DEPARTMENT_ID[9] = 100
EMPLOYEES.EMAIL[0] = SKING
EMPLOYEES.EMAIL[1] = NYANG
EMPLOYEES.EMAIL[2] = LGARCIA
EMPLOYEES.EMAIL[3] = AJAMES
EMPLOYEES.EMAIL[4] = BMILLER
EMPLOYEES.EMAIL[5] = DWILLIAMS
EMPLOYEES.EMAIL[6] = VJACKSON
EMPLOYEES.EMAIL[7] = DNGUYEN
EMPLOYEES.EMAIL[8] = NGRUENBE
EMPLOYEES.EMAIL[9] = DFAVIET
EMPLOYEES.EMPLOYEE_ID[0] = 100
EMPLOYEES.EMPLOYEE_ID[1] = 101
EMPLOYEES.EMPLOYEE_ID[2] = 102
EMPLOYEES.EMPLOYEE_ID[3] = 103
EMPLOYEES.EMPLOYEE_ID[4] = 104
EMPLOYEES.EMPLOYEE_ID[5] = 105
EMPLOYEES.EMPLOYEE_ID[6] = 106
EMPLOYEES.EMPLOYEE_ID[7] = 107
EMPLOYEES.EMPLOYEE_ID[8] = 108
EMPLOYEES.EMPLOYEE_ID[9] = 109
EMPLOYEES.FIRST_NAME[0] = Steven
EMPLOYEES.FIRST_NAME[1] = Neena
EMPLOYEES.FIRST_NAME[2] = Lex
EMPLOYEES.FIRST_NAME[3] = Alexander
EMPLOYEES.FIRST_NAME[4] = Bruce
EMPLOYEES.FIRST_NAME[5] = David
EMPLOYEES.FIRST_NAME[6] = Valli
EMPLOYEES.FIRST_NAME[7] = Diana
EMPLOYEES.FIRST_NAME[8] = Nancy
EMPLOYEES.FIRST_NAME[9] = Daniel
EMPLOYEES.HIRE_DATE[0] = 17-06-2013
EMPLOYEES.HIRE_DATE[1] = 21-09-2015
EMPLOYEES.HIRE_DATE[2] = 13-01-2011
EMPLOYEES.HIRE_DATE[3] = 03-01-2016
EMPLOYEES.HIRE_DATE[4] = 21-05-2017
EMPLOYEES.HIRE_DATE[5] = 25-06-2015
EMPLOYEES.HIRE_DATE[6] = 05-02-2016
EMPLOYEES.HIRE_DATE[7] = 07-02-2017
EMPLOYEES.HIRE_DATE[8] = 17-08-2012
EMPLOYEES.HIRE_DATE[9] = 16-08-2012
EMPLOYEES.JOB_ID[0] = AD_PRES
EMPLOYEES.JOB_ID[1] = AD_VP
EMPLOYEES.JOB_ID[2] = AD_VP
EMPLOYEES.JOB_ID[3] = IT_PROG
EMPLOYEES.JOB_ID[4] = IT_PROG
EMPLOYEES.JOB_ID[5] = IT_PROG
EMPLOYEES.JOB_ID[6] = IT_PROG
EMPLOYEES.JOB_ID[7] = IT_PROG
EMPLOYEES.JOB_ID[8] = FI_MGR
EMPLOYEES.JOB_ID[9] = FI_ACCOUNT
EMPLOYEES.LAST_NAME[0] = King
EMPLOYEES.LAST_NAME[1] = Yang
EMPLOYEES.LAST_NAME[2] = Garcia
EMPLOYEES.LAST_NAME[3] = James
EMPLOYEES.LAST_NAME[4] = Miller
EMPLOYEES.LAST_NAME[5] = Williams
EMPLOYEES.LAST_NAME[6] = Jackson
EMPLOYEES.LAST_NAME[7] = Nguyen
EMPLOYEES.LAST_NAME[8] = Gruenberg
EMPLOYEES.LAST_NAME[9] = Faviet
EMPLOYEES.MANAGER_ID[1] = 100
EMPLOYEES.MANAGER_ID[2] = 100
EMPLOYEES.MANAGER_ID[3] = 102
EMPLOYEES.MANAGER_ID[4] = 103
EMPLOYEES.MANAGER_ID[5] = 103
EMPLOYEES.MANAGER_ID[6] = 103
EMPLOYEES.MANAGER_ID[7] = 103
EMPLOYEES.MANAGER_ID[8] = 101
EMPLOYEES.MANAGER_ID[9] = 108
EMPLOYEES.PHONE_NUMBER[0] = 1.515.555.0100
EMPLOYEES.PHONE_NUMBER[1] = 1.515.555.0101
EMPLOYEES.PHONE_NUMBER[2] = 1.515.555.0102
EMPLOYEES.PHONE_NUMBER[3] = 1.590.555.0103
EMPLOYEES.PHONE_NUMBER[4] = 1.590.555.0104
EMPLOYEES.PHONE_NUMBER[5] = 1.590.555.0105
EMPLOYEES.PHONE_NUMBER[6] = 1.590.555.0106
EMPLOYEES.PHONE_NUMBER[7] = 1.590.555.0107
EMPLOYEES.PHONE_NUMBER[8] = 1.515.555.0108
EMPLOYEES.PHONE_NUMBER[9] = 1.515.555.0109
EMPLOYEES.SALARY[0] = 24000
EMPLOYEES.SALARY[1] = 17000
EMPLOYEES.SALARY[2] = 17000
EMPLOYEES.SALARY[3] = 9000
EMPLOYEES.SALARY[4] = 6000
EMPLOYEES.SALARY[5] = 4800
EMPLOYEES.SALARY[6] = 4800
EMPLOYEES.SALARY[7] = 4200
EMPLOYEES.SALARY[8] = 12008
EMPLOYEES.SALARY[9] = 9000
4createClick BUTTONS.CREATE_BUTTONEMPLOYEES.APEX[1]EMPLOYEES.DEPARTMENT_ID[3] = 90
EMPLOYEES.DEPARTMENT_ID[8] = 60
EMPLOYEES.EMAIL[2] = NYANG
EMPLOYEES.EMAIL[3] = LGARCIA
EMPLOYEES.EMAIL[4] = AJAMES
EMPLOYEES.EMAIL[5] = BMILLER
EMPLOYEES.EMAIL[6] = DWILLIAMS
EMPLOYEES.EMAIL[7] = VJACKSON
EMPLOYEES.EMAIL[8] = DNGUYEN
EMPLOYEES.EMAIL[9] = NGRUENBE
EMPLOYEES.EMPLOYEE_ID[2] = 101
EMPLOYEES.EMPLOYEE_ID[3] = 102
EMPLOYEES.EMPLOYEE_ID[4] = 103
EMPLOYEES.EMPLOYEE_ID[5] = 104
EMPLOYEES.EMPLOYEE_ID[6] = 105
EMPLOYEES.EMPLOYEE_ID[7] = 106
EMPLOYEES.EMPLOYEE_ID[8] = 107
EMPLOYEES.EMPLOYEE_ID[9] = 108
EMPLOYEES.FIRST_NAME[2] = Neena
EMPLOYEES.FIRST_NAME[3] = Lex
EMPLOYEES.FIRST_NAME[4] = Alexander
EMPLOYEES.FIRST_NAME[5] = Bruce
EMPLOYEES.FIRST_NAME[6] = David
EMPLOYEES.FIRST_NAME[7] = Valli
EMPLOYEES.FIRST_NAME[8] = Diana
EMPLOYEES.FIRST_NAME[9] = Nancy
EMPLOYEES.HIRE_DATE[2] = 21-09-2015
EMPLOYEES.HIRE_DATE[3] = 13-01-2011
EMPLOYEES.HIRE_DATE[4] = 03-01-2016
EMPLOYEES.HIRE_DATE[5] = 21-05-2017
EMPLOYEES.HIRE_DATE[6] = 25-06-2015
EMPLOYEES.HIRE_DATE[7] = 05-02-2016
EMPLOYEES.HIRE_DATE[8] = 07-02-2017
EMPLOYEES.HIRE_DATE[9] = 17-08-2012
EMPLOYEES.JOB_ID[3] = AD_VP
EMPLOYEES.JOB_ID[8] = IT_PROG
EMPLOYEES.JOB_ID[9] = FI_MGR
EMPLOYEES.LAST_NAME[2] = Yang
EMPLOYEES.LAST_NAME[3] = Garcia
EMPLOYEES.LAST_NAME[4] = James
EMPLOYEES.LAST_NAME[5] = Miller
EMPLOYEES.LAST_NAME[6] = Williams
EMPLOYEES.LAST_NAME[7] = Jackson
EMPLOYEES.LAST_NAME[8] = Nguyen
EMPLOYEES.LAST_NAME[9] = Gruenberg
EMPLOYEES.MANAGER_ID[3] = 100
EMPLOYEES.MANAGER_ID[4] = 102
EMPLOYEES.MANAGER_ID[8] = 103
EMPLOYEES.MANAGER_ID[9] = 101
EMPLOYEES.PHONE_NUMBER[2] = 1.515.555.0101
EMPLOYEES.PHONE_NUMBER[3] = 1.515.555.0102
EMPLOYEES.PHONE_NUMBER[4] = 1.590.555.0103
EMPLOYEES.PHONE_NUMBER[5] = 1.590.555.0104
EMPLOYEES.PHONE_NUMBER[6] = 1.590.555.0105
EMPLOYEES.PHONE_NUMBER[7] = 1.590.555.0106
EMPLOYEES.PHONE_NUMBER[8] = 1.590.555.0107
EMPLOYEES.PHONE_NUMBER[9] = 1.515.555.0108
EMPLOYEES.SALARY[3] = 17000
EMPLOYEES.SALARY[4] = 9000
EMPLOYEES.SALARY[5] = 6000
EMPLOYEES.SALARY[7] = 4800
EMPLOYEES.SALARY[8] = 4200
EMPLOYEES.SALARY[9] = 12008
5Type EMPLOYEES.FIRST_NAME[1] = Ada, EMPLOYEES.LAST_NAME[1] = Lovelace, EMPLOYEES.EMAIL[1] = ALOVELACE, EMPLOYEES.HIRE_DATE[1] = 01-10-2026EMPLOYEES.HIRE_DATE[1]EMPLOYEES.EMAIL[1] = ALOVELACE
EMPLOYEES.FIRST_NAME[1] = Ada
EMPLOYEES.HIRE_DATE[1] = 01-10-2026
EMPLOYEES.LAST_NAME[1] = Lovelace
6job lovList of values on EMPLOYEES.JOB_ID[1], pick Id = IT_PROGEMPLOYEES.JOB_ID[1]EMPLOYEES.JOB_ID[1] = IT_PROG
7department lovList of values on EMPLOYEES.DEPARTMENT_ID[1], pick Department_Name = ITEMPLOYEES.DEPARTMENT_ID[1]EMPLOYEES.DEPARTMENT_ID[1] = 60
8manager lovList of values on EMPLOYEES.MANAGER_ID[1], pick Id = 103EMPLOYEES.MANAGER_ID[1]EMPLOYEES.MANAGER_ID[1] = 103
9Type EMPLOYEES.SALARY[1] = 6000EMPLOYEES.SALARY[1]EMPLOYEES.SALARY[1] = 6000
10saveClick BUTTONS.SAVE_BUTTONBUTTONS.SAVE_BUTTON[0]EMPLOYEES.EMPLOYEE_ID[1] = 207FRM-40400: Transaction complete: 1 records applied and saved.

Database effects

EMPLOYEES inserted: {"EMPLOYEE_ID": 207, "FIRST_NAME": "Ada", "LAST_NAME": "Lovelace", "EMAIL": "ALOVELACE", "PHONE_NUMBER": null, "HIRE_DATE": "2026-10-01T00:00:00", "JOB_ID": "IT_PROG", "SALARY": 6000, "COMMISSION_PCT": null, "MANAGER_ID": 103, "DEPARTMENT_ID": 60}
sequence EMPLOYEES_SEQ: next 207 -> 208, drawn [207]
generated: EMPLOYEES.EMPLOYEE_ID = 207 is EMPLOYEES_SEQ#1

Classified diff against the migrated app

Diff: employees-create
counts: match 1046, tolerated 3, waived 7, defect 0, unmapped 0, harness 0
generated-id pairs (source -> target): EMPLOYEES_SEQ#1 -> EMPLOYEES_SEQ#1

waivers:
  H1 [proposed] APEX links fail with FRM-92022 instead of opening the page: applied to 0 value(s)
  H2 [proposed] Department tab keeps the previous department number: applied to 7 value(s)

[tolerated] ui.seen.lov.rows  rule=unfetched_rows  (19 of 27 source rows not fetched by the client)  x1
[tolerated] ui.seen.lov.rows  rule=unfetched_rows  (5 of 19 source rows not fetched by the client)  x1
[tolerated] ui.seen.lov.rows  rule=unfetched_rows  (98 of 106 source rows not fetched by the client)  x1
[waived] ui.values.DEPARTMENT.DEPARTMENT_ID  rule=waiver:H2  x7
    step04.values.DEPARTMENT.DEPARTMENT_ID[0]: source '90' | target ''
    step05.values.DEPARTMENT.DEPARTMENT_ID[0]: source '90' | target ''
    step06.values.DEPARTMENT.DEPARTMENT_ID[0]: source '90' | target ''
    step07.values.DEPARTMENT.DEPARTMENT_ID[0]: source '90' | target ''
    step08.values.DEPARTMENT.DEPARTMENT_ID[0]: source '90' | target ''
    step09.values.DEPARTMENT.DEPARTMENT_ID[0]: source '90' | target ''
    step10.values.DEPARTMENT.DEPARTMENT_ID[0]: source '90' | target ''

Waivers

IdWaiverValuesReason
H2Department tab keeps the previous department number7When the current employee has no department (a new record, or Kimberely Grant, whose DEPARTMENT_ID is NULL), Forms clears the DEPARTMENT detail block, yet DEPARTMENT_ID on the Department tab keeps showing the number of the department shown before (90, Executive) while name, address, city and region are blank. The number belongs to another employee's department; the target clears the whole tab.