FormsRefresh

Retail order system / order-two-lines

order-two-lines

Create an order with two lines, change a quantity, save.

0defects
259values match
290tolerated by policy
0waived
99unmapped

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 (4); the Forms record indicator ("Record: 1/2" in the status bar) (13); the list-of-values column Price (2); list-of-values window titles (2); ORDER_ITEMS.ORDER_ID_FK, a Forms item with no field in the migrated screen (65); the list of open Forms windows (13).

Arabic text in this scenario is the original source's, kept word for word in the migrated app: تم حفظ الأوردر بنجاح يا بطل! (roughly: Order saved successfully, champ!); قائمه المشروبات (Drinks list).

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
1headerType ORDERS.CUSTOMER_ID = 1, ORDERS.EMPLOYEE_ID = 1, ORDERS.TABLE_NUMBER = 5
2line 1 idType ORDER_ITEMS.ITEM_ID[0] = 1
3line 1 productList of values on ORDER_ITEMS.PRODUCT_ID_FK[0], pick Name = LatteORDER_ITEMS.PRODUCT_ID_FK[0] = 1, ORDER_ITEMS.UNIT_PRICE[0] = 55
4line 1 quantityType ORDER_ITEMS.QUANTITY[0] = 2
5line 2 idType ORDER_ITEMS.ITEM_ID[1] = 2ORDER_ITEMS.TOTAL_PRICE[0] = 110
6line 2 productList of values on ORDER_ITEMS.PRODUCT_ID_FK[1], pick Name = EspressoORDER_ITEMS.UNIT_PRICE[1] = 40
7line 2 quantityType ORDER_ITEMS.QUANTITY[1] = 1
8change line 1 quantityType ORDER_ITEMS.QUANTITY[0] = 3ORDER_ITEMS.TOTAL_PRICE[1] = 40, ORDER_ITEMS.QUANTITY[0] = 3
9leave quantityPress TabORDER_ITEMS.TOTAL_PRICE[0] = 165
10saveClick ORDERS.PUSH_BUTTON10alert FRM-40400: Transaction complete: 3 records applied and saved.
11acknowledge commitAnswer the alert OKalert تم حفظ الأوردر بنجاح يا بطل!
12acknowledge messageAnswer the alert OKno alert open; record indicator Record: 1/1

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: header

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

Step 2: line 1 id

Original (Oracle Forms 14.1.2), step 02-line-1-id
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 02-line-1-id
Migrated (.NET, PostgreSQL)

Step 3: line 1 product

Original (Oracle Forms 14.1.2), step 03-line-1-product
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 03-line-1-product
Migrated (.NET, PostgreSQL)

Step 4: line 1 quantity

Original (Oracle Forms 14.1.2), step 04-line-1-quantity
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 04-line-1-quantity
Migrated (.NET, PostgreSQL)

Step 5: line 2 id

Original (Oracle Forms 14.1.2), step 05-line-2-id
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 05-line-2-id
Migrated (.NET, PostgreSQL)

Step 6: line 2 product

Original (Oracle Forms 14.1.2), step 06-line-2-product
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 06-line-2-product
Migrated (.NET, PostgreSQL)

Step 7: line 2 quantity

Original (Oracle Forms 14.1.2), step 07-line-2-quantity
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 07-line-2-quantity
Migrated (.NET, PostgreSQL)

Step 8: change line 1 quantity

Original (Oracle Forms 14.1.2), step 08-change-line-1-quantity
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 08-change-line-1-quantity
Migrated (.NET, PostgreSQL)

Step 9: leave quantity

Original (Oracle Forms 14.1.2), step 09-leave-quantity
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 09-leave-quantity
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)

Step 11: acknowledge commit

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

Step 12: acknowledge message

Original (Oracle Forms 14.1.2), step 12-acknowledge-message
Original (Oracle Forms 14.1.2)
Migrated (.NET, PostgreSQL), step 12-acknowledge-message
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
1headerType ORDERS.CUSTOMER_ID = 1, ORDERS.EMPLOYEE_ID = 1, ORDERS.TABLE_NUMBER = 5ORDERS.TABLE_NUMBER[0]ORDERS.CUSTOMER_ID[0] = 1
ORDERS.EMPLOYEE_ID[0] = 1
ORDERS.TABLE_NUMBER[0] = 5
2line 1 idType ORDER_ITEMS.ITEM_ID[0] = 1ORDER_ITEMS.ITEM_ID[0]ORDER_ITEMS.ITEM_ID[0] = 1
ORDER_ITEMS.ORDER_ID_FK[0] = 16
3line 1 productList of values on ORDER_ITEMS.PRODUCT_ID_FK[0], pick Name = LatteORDER_ITEMS.PRODUCT_ID_FK[0]ORDER_ITEMS.PRODUCT_ID_FK[0] = 1
ORDER_ITEMS.UNIT_PRICE[0] = 55
pass
4line 1 quantityType ORDER_ITEMS.QUANTITY[0] = 2ORDER_ITEMS.QUANTITY[0]ORDER_ITEMS.QUANTITY[0] = 2
5line 2 idType ORDER_ITEMS.ITEM_ID[1] = 2ORDER_ITEMS.ITEM_ID[1]ORDER_ITEMS.ITEM_ID[1] = 2
ORDER_ITEMS.ORDER_ID_FK[1] = 16
ORDER_ITEMS.TOTAL_PRICE[0] = 110
pass
6line 2 productList of values on ORDER_ITEMS.PRODUCT_ID_FK[1], pick Name = EspressoORDER_ITEMS.PRODUCT_ID_FK[1]ORDER_ITEMS.PRODUCT_ID_FK[1] = 21
ORDER_ITEMS.UNIT_PRICE[1] = 40
pass
7line 2 quantityType ORDER_ITEMS.QUANTITY[1] = 1ORDER_ITEMS.QUANTITY[1]ORDER_ITEMS.QUANTITY[1] = 1
8change line 1 quantityType ORDER_ITEMS.QUANTITY[0] = 3ORDER_ITEMS.QUANTITY[0]ORDER_ITEMS.QUANTITY[0] = 3
ORDER_ITEMS.TOTAL_PRICE[1] = 40
pass
9leave quantityPress TabORDER_ITEMS.ITEM_ID[0]ORDER_ITEMS.TOTAL_PRICE[0] = 165pass
10saveClick ORDERS.PUSH_BUTTON10FWindow/PushButton:OKORDERS.ORDER_ID[0] = 17
ORDER_ITEMS.ORDER_ID_FK[0] = 17
ORDER_ITEMS.ORDER_ID_FK[1] = 17
FRM-40400: Transaction complete: 3 records applied and saved.FRM-40400: Transaction complete: 3 records applied and saved.pass
11acknowledge commitAnswer the alert OKFWindow/PushButton:OKتم حفظ الأوردر بنجاح يا بطل!تم حفظ الأوردر بنجاح يا بطل!pass
12acknowledge messageAnswer the alert OKORDERS.PUSH_BUTTON10[0] pass

Database effects

ORDERS inserted: {"ORDER_ID": 17, "ORDER_DATA": null, "CUSTOMER_ID": 1, "EMPLOYEE_ID": 1, "TOTAL_AMOUNT": null, "TABLE_NUMBER": 5, "ORDER_TYPE": null, "DISCOUNT": null, "FINAL_AMOUNT": null, "STATUES": null}
ORDER_ITEMS inserted: {"ITEM_ID": 1, "ORDER_ID_FK": 17, "PRODUCT_ID_FK": 1, "QUANTITY": 3, "UNIT_PRICE": 55, "TOTAL_PRICE": 165}
ORDER_ITEMS inserted: {"ITEM_ID": 2, "ORDER_ID_FK": 17, "PRODUCT_ID_FK": 21, "QUANTITY": 1, "UNIT_PRICE": 40, "TOTAL_PRICE": 40}
sequence ORD_SEQ: next 16 -> 18, drawn [16, 17]
generated: ORDERS.ORDER_ID = 17 is ORD_SEQ#2
generated: ORDER_ITEMS.ORDER_ID_FK = 17 is ORD_SEQ#2
generated: ORDER_ITEMS.ORDER_ID_FK = 17 is ORD_SEQ#2

Classified diff against the migrated app

Diff: order-two-lines
counts: match 259, tolerated 290, waived 0, defect 0, unmapped 99, harness 0
generated-id pairs (source -> target): ORD_SEQ#1 -> ORD_SEQ#1 (draw order), ORD_SEQ#2 -> ORD_SEQ#2

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] db.ORDER_ITEMS.inserted.TOTAL_PRICE  rule=money  x2
[tolerated] db.ORDER_ITEMS.inserted.UNIT_PRICE  rule=money  x2
[tolerated] ui.values.ORDERS.ORDER_TYPE  rule=text  x13
[tolerated] ui.values.ORDERS.STATUES  rule=text  x13
[tolerated] ui.values.ORDER_ITEMS.ITEM_ID  rule=blank_rows  x46
[tolerated] ui.values.ORDER_ITEMS.PRODUCT_ID_FK  rule=blank_rows  x46
[tolerated] ui.values.ORDER_ITEMS.QUANTITY  rule=blank_rows  x46
[tolerated] ui.values.ORDER_ITEMS.TOTAL_PRICE  rule=blank_rows  x46
[tolerated] ui.values.ORDER_ITEMS.TOTAL_PRICE  rule=money  x13
[tolerated] ui.values.ORDER_ITEMS.UNIT_PRICE  rule=blank_rows  x46
[tolerated] ui.values.ORDER_ITEMS.UNIT_PRICE  rule=money  x17
[unmapped] ui.alert.title  (browser dialogs have no title)  x2
[unmapped] ui.record  (no target counterpart)  x13
[unmapped] ui.seen.alert.title  (browser dialogs have no title)  x2
[unmapped] ui.seen.lov.column.Price  (column not shown in the target)  x2
[unmapped] ui.seen.lov.title  x2
[unmapped] ui.values.ORDER_ITEMS.ORDER_ID_FK  (no target item)  x65
[unmapped] ui.windows  (no target counterpart)  x13

Waivers

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