指定した条件に名前が合致する顧客をすべて表示するファンクションを作成します。その中から特定の顧客を選択し、詳細情報を表示することができます。

処理対象ファイル

物理ファイル「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

着目点: