4.3.5 表示と選択

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

処理対象ファイル

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

 

着目点: