FormsRefresh

Retail order system / orders-browse

orders-browse

Execute the query, decline to save the PRE-FORM record, browse the orders and their lines.

0defects
118values match
170tolerated by policy
0waived
51unmapped

Unmapped values are recorded on the original but have no counterpart the mapping names in the migrated app, so they are listed, not compared, and are not defects. Here: alert titles (2); the Forms record indicator ("Record: 1/2" in the status bar) (7); ORDER_ITEMS.ORDER_ID_FK, a Forms item with no field in the migrated screen (35); the list of open Forms windows (7).

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 ORDERS
1execute queryClick Toolbar.Execute Queryalert Do you want to save the changes you have made?
2do not saveAnswer the alert NoORDERS.ORDER_ID[0] = 901, ORDER_ITEMS.ITEM_ID[0] = 901, ORDER_ITEMS.ITEM_ID[1] = 902
3last recordClick ORDERS.ITEM16ORDERS.ORDER_ID[0] = 902, ORDER_ITEMS.ITEM_ID[0] =
4first recordClick ORDERS.ITEM15ORDERS.ORDER_ID[0] = 901, ORDER_ITEMS.ITEM_ID[0] = 901
5nextClick ORDERS.NEXT_BTNORDERS.ORDER_ID[0] = 902
6previousClick ORDERS.PRE_BTNORDERS.ORDER_ID[0] = 901

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 ORDERS

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: execute query

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

Step 2: do not save

Original (Oracle Forms 14.1.2), step 02-do-not-save
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 02-do-not-save
Migrated (.NET, PostgreSQL)

Step 3: last record

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

Step 4: first record

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

Step 5: next

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

Step 6: previous

Original (Oracle Forms 14.1.2), step 06-previous
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 06-previous
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 ORDERSORDERS.CUSTOMER_ID[0]ORDERS.ORDER_ID[0] = 16
1execute queryClick Toolbar.Execute QueryFWindow/PushButton:YesPress Tab to move between choices, Return to select.Do you want to save the changes you have made?pass
2do not saveAnswer the alert NoORDERS.CUSTOMER_ID[0]ORDERS.CUSTOMER_ID[0] = 1
ORDERS.DISCOUNT[0] = 0
ORDERS.EMPLOYEE_ID[0] = 1
ORDERS.FINAL_AMOUNT[0] = 165
ORDERS.ORDER_DATA[0] = 03-OCT-2026
ORDERS.ORDER_ID[0] = 901
ORDERS.ORDER_TYPE[0] = Takeaway
ORDERS.STATUES[0] = Delivered
ORDERS.TABLE_NUMBER[0] = 3
ORDERS.TOTAL_AMOUNT[0] = 165
ORDER_ITEMS.ITEM_ID[0] = 901
ORDER_ITEMS.ITEM_ID[1] = 902
ORDER_ITEMS.ORDER_ID_FK[0] = 901
ORDER_ITEMS.ORDER_ID_FK[1] = 901
ORDER_ITEMS.PRODUCT_ID_FK[0] = 1
ORDER_ITEMS.PRODUCT_ID_FK[1] = 1
ORDER_ITEMS.QUANTITY[0] = 2
ORDER_ITEMS.QUANTITY[1] = 1
ORDER_ITEMS.TOTAL_PRICE[0] = 110
ORDER_ITEMS.TOTAL_PRICE[1] = 55
ORDER_ITEMS.UNIT_PRICE[0] = 55
ORDER_ITEMS.UNIT_PRICE[1] = 55
Customer Id1pass
3last recordClick ORDERS.ITEM16ORDERS.CUSTOMER_ID[0]ORDERS.ORDER_DATA[0] = 04-OCT-2026
ORDERS.ORDER_ID[0] = 902
ORDERS.ORDER_TYPE[0] = Delivery
ORDERS.STATUES[0] = Ready
ORDERS.TABLE_NUMBER[0] = 7
ORDER_ITEMS.ORDER_ID_FK[0] = 902
Customer Id1pass
4first recordClick ORDERS.ITEM15ORDERS.CUSTOMER_ID[0]ORDERS.DISCOUNT[0] = 0
ORDERS.FINAL_AMOUNT[0] = 165
ORDERS.ORDER_DATA[0] = 03-OCT-2026
ORDERS.ORDER_ID[0] = 901
ORDERS.ORDER_TYPE[0] = Takeaway
ORDERS.STATUES[0] = Delivered
ORDERS.TABLE_NUMBER[0] = 3
ORDERS.TOTAL_AMOUNT[0] = 165
ORDER_ITEMS.ITEM_ID[0] = 901
ORDER_ITEMS.ITEM_ID[1] = 902
ORDER_ITEMS.ORDER_ID_FK[0] = 901
ORDER_ITEMS.ORDER_ID_FK[1] = 901
ORDER_ITEMS.PRODUCT_ID_FK[0] = 1
ORDER_ITEMS.PRODUCT_ID_FK[1] = 1
ORDER_ITEMS.QUANTITY[0] = 2
ORDER_ITEMS.QUANTITY[1] = 1
ORDER_ITEMS.TOTAL_PRICE[0] = 110
ORDER_ITEMS.TOTAL_PRICE[1] = 55
ORDER_ITEMS.UNIT_PRICE[0] = 55
ORDER_ITEMS.UNIT_PRICE[1] = 55
Customer Id1pass
5nextClick ORDERS.NEXT_BTNORDERS.CUSTOMER_ID[0]ORDERS.ORDER_DATA[0] = 04-OCT-2026
ORDERS.ORDER_ID[0] = 902
ORDERS.ORDER_TYPE[0] = Delivery
ORDERS.STATUES[0] = Ready
ORDERS.TABLE_NUMBER[0] = 7
ORDER_ITEMS.ORDER_ID_FK[0] = 902
Customer Id1pass
6previousClick ORDERS.PRE_BTNORDERS.CUSTOMER_ID[0]ORDERS.DISCOUNT[0] = 0
ORDERS.FINAL_AMOUNT[0] = 165
ORDERS.ORDER_DATA[0] = 03-OCT-2026
ORDERS.ORDER_ID[0] = 901
ORDERS.ORDER_TYPE[0] = Takeaway
ORDERS.STATUES[0] = Delivered
ORDERS.TABLE_NUMBER[0] = 3
ORDERS.TOTAL_AMOUNT[0] = 165
ORDER_ITEMS.ITEM_ID[0] = 901
ORDER_ITEMS.ITEM_ID[1] = 902
ORDER_ITEMS.ORDER_ID_FK[0] = 901
ORDER_ITEMS.ORDER_ID_FK[1] = 901
ORDER_ITEMS.PRODUCT_ID_FK[0] = 1
ORDER_ITEMS.PRODUCT_ID_FK[1] = 1
ORDER_ITEMS.QUANTITY[0] = 2
ORDER_ITEMS.QUANTITY[1] = 1
ORDER_ITEMS.TOTAL_PRICE[0] = 110
ORDER_ITEMS.TOTAL_PRICE[1] = 55
ORDER_ITEMS.UNIT_PRICE[0] = 55
ORDER_ITEMS.UNIT_PRICE[1] = 55
Customer Id1pass

Database effects

sequence ORD_SEQ: next 16 -> 17, drawn [16]

Classified diff against the migrated app

Diff: orders-browse
counts: match 118, tolerated 170, waived 0, defect 0, unmapped 51, harness 0
generated-id pairs (source -> target): ORD_SEQ#1 -> ORD_SEQ#1 (draw order)

waivers:
  W1 [proposed] ORDER_DATA saved as NULL: applied to 0 value(s)
  W2 [proposed] Order number consumed when the form opens: applied to 0 value(s)
  W3 [proposed] Line ITEM_ID typed by the user: applied to 0 value(s)
  W4 [proposed] Two modal alerts after saving: applied to 0 value(s)
  W5 [proposed] Key debug message on record navigation (single-table forms): applied to 0 value(s)
  W6 [proposed] Customer debug message in ORDERS: applied to 0 value(s)
  W7 [proposed] Placeholder alert on leaving Employees: applied to 0 value(s)
  W8 [proposed] Error message when the application starts: applied to 0 value(s)
  W9 [proposed] Keyboard hint of the Forms client while a question is open: applied to 0 value(s)
  W10 [proposed] An order added with Add cannot be saved: applied to 0 value(s)

[tolerated] ui.values.ORDERS.DISCOUNT  rule=money  x3
[tolerated] ui.values.ORDERS.FINAL_AMOUNT  rule=money  x3
[tolerated] ui.values.ORDERS.ORDER_TYPE  rule=text  x2
[tolerated] ui.values.ORDERS.STATUES  rule=text  x2
[tolerated] ui.values.ORDERS.TOTAL_AMOUNT  rule=money  x3
[tolerated] ui.values.ORDER_ITEMS.ITEM_ID  rule=blank_rows  x29
[tolerated] ui.values.ORDER_ITEMS.PRODUCT_ID_FK  rule=blank_rows  x29
[tolerated] ui.values.ORDER_ITEMS.QUANTITY  rule=blank_rows  x29
[tolerated] ui.values.ORDER_ITEMS.TOTAL_PRICE  rule=blank_rows  x29
[tolerated] ui.values.ORDER_ITEMS.TOTAL_PRICE  rule=money  x6
[tolerated] ui.values.ORDER_ITEMS.UNIT_PRICE  rule=blank_rows  x29
[tolerated] ui.values.ORDER_ITEMS.UNIT_PRICE  rule=money  x6
[unmapped] ui.alert.title  (browser dialogs have no title)  x1
[unmapped] ui.record  (no target counterpart)  x7
[unmapped] ui.seen.alert.title  (browser dialogs have no title)  x1
[unmapped] ui.values.ORDER_ITEMS.ORDER_ID_FK  (no target item)  x35
[unmapped] ui.windows  (no target counterpart)  x7

Waivers

No waiver applies to this scenario: every compared value matches or is within the tolerance policy.