The MAIN program block
The MAIN
program block contains the menu for the
orders
program.
MAIN
program block
(orders.4gl):01
SCHEMA
custdemo
02
03
DEFINE
order_rec RECORD
04
store_num LIKE
orders.store_num,
05
store_name LIKE
customer.store_name,
06
order_num LIKE
orders.order_num,
07
order_date LIKE
orders.order_date,
08
fac_code LIKE
orders.fac_code,
09
ship_instr LIKE
orders.ship_instr,
10
promo LIKE
orders.promo
11
END RECORD
,
12
arr_items DYNAMIC ARRAY OF RECORD
13
stock_num LIKE
items.stock_num,
14
description LIKE
stock.description,
15
quantity LIKE
items.quantity,
16
unit LIKE
stock.unit,
17
price LIKE
items.price,
18
line_total DECIMAL
(9,2)
19
END RECORD
20
21
CONSTANT
msg01 = "You must query first"
22
CONSTANT
msg02 = "Enter search criteria"
23
CONSTANT
msg03 = "Canceled by user"
24
CONSTANT
msg04 = "No rows in table"
25
CONSTANT
msg05 = "End of list"
26
CONSTANT
msg06 = "Beginning of list"
27
CONSTANT
msg07 = "Invalid stock number"
28
CONSTANT
msg08 = "Row added"
29
CONSTANT
msg09 = "Row updated"
30
CONSTANT
msg10 = "Row deleted"
31
CONSTANT
msg11 = "Enter order"
32
CONSTANT
msg12 = "This customer does not exist"
33
CONSTANT
msg13 = "Quantity must be greater than zero"
34
35
MAIN
36
DEFINE
has_order, query_ok SMALLINT
37
DEFER INTERRUPT
38
39
CONNECT TO
"custdemo"
40
CLOSE WINDOW SCREEN
41
42
OPEN WINDOW
w1 WITH FORM
"orderform"
43
44
MENU
45
BEFORE MENU
46
CALL
setup_actions(DIALOG,FALSE
,FALSE
)
47
ON ACTION
new
48
CLEAR FORM
49
LET
query_ok = FALSE
50
CALL
close_order()
51
LET
has_order = order_new()
52
IF
has_order THEN
53
CALL
arr_items.clear()
54
CALL
items_inpupd()
55
END IF
56
CALL
setup_actions(DIALOG,has_order,query_ok)
57
ON ACTION
find
58
CLEAR FORM
59
LET
query_ok = order_query()
60
LET
has_order = query_ok
61
CALL
setup_actions(DIALOG,has_order,query_ok)
62
ON ACTION
next
63
CALL
order_fetch_rel(1)
64
ON ACTION
previous
65
CALL
order_fetch_rel(-1)
66
ON ACTION
getitems
67
CALL
items_inpupd()
68
ON ACTION
quit
69
EXIT MENU
70
END MENU
71
72
CLOSE WINDOW
w1
73
74
END MAIN
Note:
- Lines
03
thru11
define a record with fields for all the columns in theorders
table, as well asstore_name
from thecustomer
table. - Lines
12
through19
define a dynamic array with fields for all the columns in theitems
table, as well asquantity
andunit
from thestock
table, and a calculated fieldline_total
. - Lines
21
thru33
define constants to hold the program messages. This centralizes the definition of the messages, which can be used in any function in the module. - Lines
44
thru65
define the main menu of the application. - Line
46
is executed before the menu is displayed; it calls thesetup_actions
function to disable navigation and item management actions by default. TheDIALOG
predefined object is passed as the first parameter to the function. - Lines
47
thru56
perform theadd
action to create a new order. Theorder_new
function is called, and if it returnsTRUE
, theitems_inpupd
function is called to allow the user to enter items for the new order. Menu actions are enabled/disabled depending on the result of the operation, using thesetup_actions
function. - Lines
57
thru61
perform thefind
action to search for orders in the database. Theorder_query
function is called and menu actions are enabled/disabled depending on the result of the operation, using thesetup_actions
function. - Lines
62
thru65
handle navigation in the order list after a search. Functionorder_fetch_rel
is used to fetch the previous or next record. - Line
67
calls the functionitems_inpupd
to allow the user to edit theitems
associated with the displayedorder
. - Line
72
closes the window before leaving the program.