FormsRefresh

Retail order system / orders-delete-empty

orders-delete-empty

Query the orders, go to order 902 (no lines), press DELETE; the order is deleted.

0defects
97values match
123tolerated by policy
0waived
37unmapped

Three runs from a fresh database gave byte-identical diffs. Files: scenario, golden record, target record, diff (JSON).

Scenario steps

Items are addressed by Forms name (BLOCK.ITEM[row]). Step 0 opens the form.

  1. open ORDERS
  2. execute query: click Toolbar.Execute Query
  3. do not save: alert No
  4. last record: click ORDERS.ITEM16 expect {"values": {"ORDERS.ORDER_ID[0]": "902"}}
  5. delete: click ORDERS.PUSH_BUTTON9

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 00: open

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 01: 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 02: 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 03: 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 04: delete

Original (Oracle Forms 14.1.2), step 04-delete
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 04-delete
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 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?
2do not savealert 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 Id1
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
4deleteclick ORDERS.PUSH_BUTTON9ORDERS.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
FRM-40400: Transaction complete: 1 records applied and saved.

Database effects

ORDERS deleted: {"ORDER_ID": 902, "ORDER_DATA": "2026-10-04T00:00:00", "CUSTOMER_ID": 1, "EMPLOYEE_ID": 1, "TOTAL_AMOUNT": null, "TABLE_NUMBER": 7, "ORDER_TYPE": "LIST11", "DISCOUNT": null, "FINAL_AMOUNT": null, "STATUES": "LIST14"}
sequence ORD_SEQ: next 16 -> 17, drawn [16]

Classified diff against the migrated app

Diff: orders-delete-empty
counts: match 97, tolerated 123, waived 0, defect 0, unmapped 37, 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  x2
[tolerated] ui.values.ORDERS.FINAL_AMOUNT  rule=money  x2
[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  x2
[tolerated] ui.values.ORDER_ITEMS.ITEM_ID  rule=blank_rows  x21
[tolerated] ui.values.ORDER_ITEMS.PRODUCT_ID_FK  rule=blank_rows  x21
[tolerated] ui.values.ORDER_ITEMS.QUANTITY  rule=blank_rows  x21
[tolerated] ui.values.ORDER_ITEMS.TOTAL_PRICE  rule=blank_rows  x21
[tolerated] ui.values.ORDER_ITEMS.TOTAL_PRICE  rule=money  x4
[tolerated] ui.values.ORDER_ITEMS.UNIT_PRICE  rule=blank_rows  x21
[tolerated] ui.values.ORDER_ITEMS.UNIT_PRICE  rule=money  x4
[unmapped] ui.alert.title  (browser dialogs have no title)  x1
[unmapped] ui.record  (no target counterpart)  x5
[unmapped] ui.seen.alert.title  (browser dialogs have no title)  x1
[unmapped] ui.values.ORDER_ITEMS.ORDER_ID_FK  (no target item)  x25
[unmapped] ui.windows  (no target counterpart)  x5

Waivers

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