指定した条件に名前が合致する顧客をすべて表示するファンクションを作成します。その中から特定の顧客を選択し、詳細情報を表示することができます。
処理対象ファイル
物理ファイル「CUSMST」(顧客マスター)、論理ファイル「CUSMSTV1」(顧客マスターを顧客名で整列したもの)
バージョン1
GROUP_BY NAME(#CUSTOMER) FIELDS(#CUSTNO #NAME #ADDL1
#ADDL2 #ADDL3)
DEF_LIST NAME(#BROWCUST) FIELDS((#CHOOSE *SELECT)
#CUSTNO #NAME) COUNTER(#NUMCUSTS)
BEGIN_LOOP
<< Get the customer name >>
REQUEST FIELD(#NAME)
<< Build up list of customers with same generic name >>
CLR_LIST NAMED(#BROWCUST)
SELECT FIELDS(#BROWCUST) FROM_FILE(CUSMSTV1)
WITH_KEY(#NAME) GENERIC(*YES)
ADD_ENTRY TO_LIST(#BROWCUST)
ENDSELECT
<< If none found issue message >>
IF COND('#NUMCUSTS = 0')
MESSAGE MSGTXT('No customers found with this name')
ELSE
<< else display list for selection >>
DISPLAY BROWSELIST(#BROWCUST)
<< process selected customers and display in detail >>
SELECTLIST NAMED(#BROWCUST) GET_ENTRYS(*SELECT)
FETCH FIELDS(#CUSTOMER) FROM_FILE(CUSMST)
WITH_KEY(#CUSTNO)
DISPLAY FIELDS(#CUSTOMER)
ENDSELECT
ENDIF
END_LOOP
着目点:
バージョン2
GROUP_BY NAME(#CUSTOMER) FIELDS(#CUSTNO #NAME #ADDL1
#ADDL2 #ADDL3)
DEF_LIST NAME(#BROWCUST) FIELDS((#CHOOSE *SELECT)
#CUSTNO #NAME) COUNTER(#NUMCUSTS)
DEFINE FIELD(#GENNAME) REFFLD(#NAME)
BEGIN_LOOP
<< Display the list - empty on first cycle >>
DISPLAY FIELD((#GENNAME *INPUT))
BROWSELIST(#BROWCUST)
<< Process any selected entries - none in first cycle >>
CHANGE FIELD(#TOTSELECT) TO(0)
SELECTLIST NAMED(#BROWCUST) GET_ENTRYS(*SELECT)
CHANGE FIELD(#TOTSELECT) TO('#TOTSELECT + 1')
FETCH FIELDS(#CUSTOMER) FROM_FILE(CUSTMST)
WITH_KEY(#CUSTNO)
DISPLAY FIELDS(#CUSTOMER)
ENDSELECT
<< If none selected build a new list >>
IF COND('#TOTSELECT = 0')
CLR_LIST NAMED(#BROWCUST)
SELECT FIELDS(#BROWCUST) FROM_FILE(CUSMSTV1)
WITH_KEY(#GENNAME) GENERIC(*YES)
ADD_ENTRY TO_LIST(#BROWCUST)
ENDSELECT
IF COND('#NUMCUSTS = 0')
MESSAGE MSGTXT('No customers found with this name')
ENDIF
ENDIF
END_LOOP
着目点: