SCHNAM: RPG Source

Figure 216. Source for module SCHNAM

     //****************************************************************
     // PROGRAM NAME:   SCHNAM                                        *
     // RELATED FILES:  CUSMSTL3 (LOGICAL FILE)                       *
     //                 SNAMMENU (WORKSTN FILE)                       *
     // DESCRIPTION:    This program shows a customer master search   *
     //                 program using workstn subfile processing.     *
     //                 This program prompts the user for the customer*
     //                 name and uses it to position the cusmstl3     *
     //                 file by the setll operation. Then it displays *
     //                 the records using subfiles.                   *
     //                 To fill another page, press the rollup key.   *
     //                 To display customer detail, enter 'X' beside  *
     //                 that customer and press enter.                *
     //                 To quit the program, press PF3.               *
     //****************************************************************

     Fcusmstl3  if   e           k disk
     Fsnammenu  cf   e             workstn sfile(subfile:recnum)
     F                                     indds(indicators)

      // Field definitions:
     D recnum          s              5p 0

     D indicators      ds
     D    exitKey                      n   overlay(indicators:3)
     D    restartKey                   n   overlay(indicators:4)
     D    sflClear                     n   overlay(indicators:55)
     D    rollupKey                    n   overlay(indicators:95)

      // Key list definitions:
     C     cstkey        klist
     C                   kfld                    srcnam
     C     zipkey        klist
     C                   kfld                    name
      //******************************************************************
      //   MAINLINE                                                      *
      //******************************************************************

      /free

       write foot1;
       write head;
       exfmt prompt;

       // loop until exit key is pressed
       dow not exitKey;
          setll cstkey cusrec;
          exsr ProcessSubfile;
          exsr DisplayCustomerDetail;

          // If exit key pressed in subfile display, leave loop
          if exitKey;
             leave;
          endif;

          // If restart key pressed in subfile display, repeat loop
          if restartKey;
             iter;
          endif;

          write foot1;
          write head;
          exfmt prompt;

       enddo;

       *inlr = *on;



       //*****************************************************************
       //  SUBROUTINE - ProcessSubfile                                   *
       //  PURPOSE    - Process subfile and display                      *
       //*****************************************************************
       begsr ProcessSubfile;

          // Keep looping while roll up key is pressed
          dou not rollupKey;
             // Do we have more information to add to subfile?
             if not %eof(cusmstl3);
                // Clear and fill subfile with customer data
                exsr ClearSubfile;
                exsr FillSubfile;
             endif;

             // Write out subfile and wait for response
             write foot2;
             exfmt subctl;
          enddo;

       endsr;  // end of subroutine ProcessSubfile


       //******************************************************************
       //   SUBROUTINE - FillSubfile                                      *
       //   PURPOSE    - Fill subfile                                     *
       //******************************************************************
       begsr FillSubfile;

          // Loop through all customer records with specified zip code
          recnum = 0;
          dou %eof(snammenu);
             // Read next record with specified zip code
             read cusrec;
             if %eof(cusmstl3);
                // If no more records, we're done
                leavesr;
             endif;

             // Add information about this record to the subfile
             recnum = recnum + 1;
             sel = *blank;
             write subfile;
          enddo;

       endsr;  // end of subroutine FillSubfile;



       //****************************************************************
       //    SUBROUTINE - ClearSubfile                                  *
       //    PURPOSE    - Clear subfile records                         *
       //****************************************************************
       begsr ClearSubfile;

          sflClear = *on;
          write subctl;
          sflClear = *off;

       endsr;  // end of subroutine ClearSubfile
       //*****************************************************************
       //  SUBROUTINE - DisplayCustomerDetail                            *
       //  PURPOSE    - Display selected customer records                *
       //*****************************************************************
       begsr DisplayCustomerDetail;

          // Loop through all changed record in subfile
          readc subfile;
          dow not %eof(snammenu);
             // Restart the display of requested customer records
             restartKey = *on;

             // Lookup customer record and display it
             chain zipkey cusrec;
             exfmt cusdsp;

             // If exit key pressed, exit loop
             if exitKey;
                leave;
             endif;

             readc subfile;
          enddo;


       endsr;  // end of subroutine ChangeSubfile

      /end-free

The file description specifications identify the disk file to be searched and the display device file to be used (SNAMMENU). The SFILE keyword for the WORKSTN file identifies the record format (SUBFILE) to be used as a subfile. The relative-record-number field (RECNUM) specifies which record within the subfile is being accessed.

The program displays the PROMPT record format and waits for the workstation user's response. F3 sets on indicator 03, which controls the end of the program. The name (NAME) is used as the key to position the CUSMSTL3 file by the SETLL operation. Notice that the record format name CUSREC is used in the SETLL operation instead of the file name CUSMSTL3.

The SFLPRC subroutine handles the processing for the subfile: clearing, filling, and displaying. The subfile is prepared for additional requests in subroutine SFLCLR. If indicator 55 is on, no action occurs on the display, but the main storage area for the subfile records is cleared. The SFLFIL routine fills the subfile with records. A record is read from the CUSMSTL3 file, the record count (RECNUM) is incremented, and the record is written to the subfile. This subroutine is repeated until either the subfile is full (indicator 21 on the WRITE operation) or end of file occurs on the CUSMSTL3 file (indicator 71 on the READ operation). When the subfile is full or end of file occurs, the subfile is written to the display by the EXFMT operation by the subfile-control record control format. The user reviews the display and decides:

In Figure 217, the user responds to the initial prompt by entering a customer name.

Figure 217. 'Customer Search and Inquiry by Name' prompt screen
   22:35:26             CUSTOMER SEARCH & INQUIRY BY NAME             9/30/94


   Enter Search Name  JUDAH GOULD

















     ENTER - Continue       F3 - End Job

The user requests more information by entering an X as shown in Figure 218.

Figure 218. 'Customer Search and Inquiry by Name' information screen
   22:35:43             CUSTOMER SEARCH & INQUIRY BY NAME             9/30/94


   Search Name  JUDAH GOULD

     Select
      "X"       Customer Name            Number     Zip Code
       X        JUDAH GOULD               00012      70068
                JUDAH GOULD               00209      31088












     ENTER - Continue       F3 - End Job      F4 - Restart Name

The detailed information for the customer selected is shown in Figure 219. At this point the user selects the appropriate function key to continue or end the inquiry.

Figure 219. 'Customer Search and Inquiry by Name' detailed information screen
   23:39:48             CUSTOMER SEARCH & INQUIRY BY NAME             9/30/94



                        Customer  00012

                        Name      JUDAH GOULD

                        Address   2074 BATHURST AVENUE

                        City      YORKTOWN

                        State     NY    Zip Code 70068

                        A/R Balance                .00





     ENTER - Continue       F3 - End Job      F4 - Restart Name


[ Top of Page | Previous Page | Next Page | Contents | Index ]