FormsRefresh

HR application / employees-apex

employees-apex

The block's APEX button and a row's Details button each compose an APEX URL with a signed token; the client host has no browser, so WEB.SHOW_DOCUMENT answers with FRM-92022. Closing EMPLOYEES ends its database session (OPEN_FORM with SESSION), which writes that session's PL/SQL coverage.

0defects
656values match
4tolerated by policy
10waived
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
4apex buttonClick BUTTONS.APEX_BUTTONalert FRM-92022
5acknowledgeAnswer the alert OK
6row detailsClick EMPLOYEES.APEX[3]alert FRM-92022
7acknowledge detailsAnswer the alert OK
8close employeesClick EMPLOYEES.Close

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: apex button

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

Step 5: acknowledge

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

Step 6: row details

Original (Oracle Forms 14.1.2), step 06-row-details
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 06-row-details
Migrated (.NET, PostgreSQL)

Step 7: acknowledge details

Original (Oracle Forms 14.1.2), step 07-acknowledge-details
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 07-acknowledge-details
Migrated (.NET, PostgreSQL)

Step 8: close employees

Original (Oracle Forms 14.1.2), step 08-close-employees
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 08-close-employees
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
4apex buttonClick BUTTONS.APEX_BUTTONFWindow/PushButton:OKAPEX URL: http://localhost:8080/ords/r/hr_dev/hr-app/employees?request=APEX_AUTHENTICATION=JWT&x01=<any>FRM-92022: cannot launch URL http://localhost:8080/ords/r/hr_dev/hr-app/employees?request=APEX_AUTHENTICATION=JWT&x01=<any> with target _blank. full details: The BROWSE action is not supported on the current platform!pass
5acknowledgeAnswer the alert OKBUTTONS.APEX_BUTTON[0]APEX URL: http://localhost:8080/ords/r/hr_dev/hr-app/employees?request=APEX_AUTHENTICATION=JWT&x01=<any>
6row detailsClick EMPLOYEES.APEX[3]FWindow/PushButton:OKDEPARTMENT.CITY[0] = Southlake
DEPARTMENT.DEPARTMENT_ID[0] = 60
DEPARTMENT.DEPARTMENT_NAME[0] = IT
DEPARTMENT.STATE_PROVINCE[0] = Texas
DEPARTMENT.STREET_ADDRESS[0] = 2014 Jabberwocky Rd
APEX URL: http://localhost:8080/ords/r/hr_dev/hr-app/employee-details?request=APEX_AUTHENTICATION=JWT&x01=<any>FRM-92022: cannot launch URL http://localhost:8080/ords/r/hr_dev/hr-app/employee-details?request=APEX_AUTHENTICATION=JWT&x01=<any> with target _blank. full details: The BROWSE action is not supported on the current platform!pass
7acknowledge detailsAnswer the alert OKEMPLOYEES.APEX[3]APEX URL: http://localhost:8080/ords/r/hr_dev/hr-app/employee-details?request=APEX_AUTHENTICATION=JWT&x01=<any>
8close employeesClick EMPLOYEES.CloseCONSOLE.EMPLOYEES[0]

Database effects

None: the scenario changes no row and draws no sequence value.

Classified diff against the migrated app

Diff: employees-apex
counts: match 656, tolerated 4, waived 10, defect 0, unmapped 0, harness 0
generated-id pairs (source -> target): none

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

[tolerated] ui.message  rule=mask:apex-token  x4
[waived] ui.action.alert  rule=waiver:H1  (the source accepted this action)  x2
    step05.action.alert: source 'performed' | target 'not performable: no alert open'
    step07.action.alert: source 'performed' | target 'not performable: no alert open'
[waived] ui.alert  rule=waiver:H1  (alert missing in the target)  x2
    step04.alert: source {"title": "Forms", "message": ["FRM-92022: cannot launch URL http:/... | target null
    step06.alert: source {"title": "Forms", "message": ["FRM-92022: cannot launch URL http:/... | target null
[waived] ui.focus  rule=waiver:H1  (expected dialog)  x2
    step04.focus: source 'FWindow/PushButton:OK' | target 'buttons.apex_button[0]'
    step06.focus: source 'FWindow/PushButton:OK' | target 'employees.apex[3]'
[waived] ui.seen.alert  rule=waiver:H1  (alert missing in the target)  x2
    step05.seen.alert: source {"title": "Forms", "message": ["FRM-92022: cannot launch URL http:/... | target null
    step07.seen.alert: source {"title": "Forms", "message": ["FRM-92022: cannot launch URL http:/... | target null
[waived] ui.windows  rule=waiver:H1  x2
    step04.windows: source [["CONSOLE", "HR APP"], ["EMPLOYEES", "EMPLOYEES"], ["alert", "Form... | target [["CONSOLE", "HR APP"], ["EMPLOYEES", "EMPLOYEES"]]
    step06.windows: source [["CONSOLE", "HR APP"], ["EMPLOYEES", "EMPLOYEES"], ["alert", "Form... | target [["CONSOLE", "HR APP"], ["EMPLOYEES", "EMPLOYEES"]]

Waivers

IdWaiverValuesReason
H1APEX links fail with FRM-92022 instead of opening the page10The APEX buttons (CONSOLE.APEX, BUTTONS.APEX_BUTTON, the EMPLOYEES.APEX row button) compose a signed APEX URL, show it on the message line and call WEB.SHOW_DOCUMENT(url, '_blank'). On the Forms 14.1.2 client this fails: Forms shows the alert "FRM-92022: cannot launch URL ... The BROWSE action is not supported on the current platform!" and the page never opens, so the source records an alert, alert focus and an extra window, and the user has to dismiss it. The target writes the same message and opens the URL in a new browser tab, which is what the code asks for. Replicating the failure would mean shipping a broken link. The message line (APEX URL with the token) is still compared.