4.3.5 Browsing and Selecting

Create a function to display all customers whose names generically match the name specified. Allow customers to be chosen from the list for a detailed display.

Files Involved

Physical file CUSMST (customer master file) and logical file CUSMSTV1 which is a view of CUSMST viewed by customer name.

Version 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

 

Points to Note:

Version 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

 

Points to Note: