SCHNAM: RPG ソース

図 210. モジュール SCHNAM のソース
     //****************************************************************
     // プログラム名:   SCHNAM                                        *
     // 関連ファイル:  CUSMSTL3 (論理ファイル)                        *
     //                SNAMMENU (WORKSTN ファイル)                    *
     //         説明:  このプログラムは、WORKSTN サブファイル処理を   *
     //                使用した得意先マスター検索プログラムです。     *
     //                このプログラムは、得意先名でユーザーに         *
     //                プロンプトを出し、setll 命令での cusmstl3 の   *
     //                位置付けにそれを使用します。さらにサブファイル *
     //                を使ってレコードを表示します。                 *
     //                他のページを充てんするために、ロールアップ・   *
     //                キーを押します。得意先詳細を表示するには、「X」*
     //                をその得意先のところに入れ、Enter を押します。 *
     //                プログラムを終了するために PF3 を押します。    *
     //****************************************************************

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

      // フィールド定義:
     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)

      // キー・リスト定義
     C     cstkey        klist
     C                   kfld                    srcnam
     C     zipkey        klist
     C                   kfld                    name
      //******************************************************************
      //   メインライン                                                  *
      //******************************************************************

      /free

       write foot1;
       write head;
       exfmt prompt;

       // 終了キーが押されるまでループする
       dow not exitKey;
          setll cstkey cusrec;
          exsr ProcessSubfile;
          exsr DisplayCustomerDetail;

          // 終了キーがサブファイル表示で押された場合は、ループを出る
          if exitKey;
             leave;
          endif;

          // 再始動キーがサブファイル表示で押された場合は、ループを繰り返す
          if restartKey;
             iter;
          endif;

          write foot1;
          write head;
          exfmt prompt;

       enddo;

       *inlr = *on;



       //*****************************************************************
       //  サブルーチン - ProcessSubfile                                 *
       //  目的     - サブファイルを処理し、表示する                     *
       //*****************************************************************
       begsr ProcessSubfile;

          // ロールアップ・キーが押されるまでループする
          dou not rollupKey;
             // サブファイルに追加する情報は他にあるか ?
             if not %eof(cusmstl3);
                // サブファイルを消去し、得意先データで充てんする
                exsr ClearSubfile;
                exsr FillSubfile;
             endif;

             // サブファイルを書き出し、応答を待つ
             write foot2;
             exfmt subctl;
          enddo;

       endsr;  // サブルーチン ProcessSubfile の終わり

       //******************************************************************
       //   サブルーチン - FillSubfile                                    *
       //   目的       - サブファイルを充てんする                         *
       //******************************************************************
       begsr FillSubfile;

          // 指定した郵便番号で得意先レコード全体をループする
          recnum = 0;
          dou %eof(snammenu);
             // 指定した郵便番号で次のレコードを読み取る
             read cusrec;
             if %eof(cusmstl3);
                // レコードがなくなったら、以下を行う
                leavesr;
             endif;

             // このレコードの情報をサブファイルに追加する
             recnum = recnum + 1;
             sel = *blank;
             write subfile;
          enddo;

       endsr;  // サブルーチン  FillSubfile の終わり



       //****************************************************************
       //    サブルーチン - ClearSubfile                                *
       //    目的       - サブファイル・レコードの消去                  *
       //****************************************************************
       begsr ClearSubfile;

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

       endsr;  // サブルーチン ClearSubfile の終わり
       //*****************************************************************
       //  サブルーチン - DisplayCustomerDetail                          *
       //  目的       - 指定した得意先レコードの表示                     *
       //*****************************************************************
       begsr DisplayCustomerDetail;

          // サブファイルの変更されたレコード全体をループする
          readc subfile;
          dow not %eof(snammenu);
             // 要求した得意先レコードの表示を再始動する
             restartKey = *on;

             // 得意先レコードを検索し、表示する
             chain zipkey cusrec;
             exfmt cusdsp;

             // 終了キーが押される場合は、ループを終了する
             if exitKey;
                leave;
             endif;

             readc subfile;
          enddo;


       endsr;  // サブルーチン ChangeSubfile の終了

      /end-free

ファイル仕様書は、検索するディスク・ファイルおよび使用される 表示装置ファイル (SNAMMENU) を指定します。WORKSTN ファイルの SFILE キーワードは、サブファイルとして使用される レコード様式 (SUBFILE) を指定します。 相対レコード番号フィールド (RECNUM) は、サブファイル内のどの レコードをアクセスするかを指定します。

プログラムは、PROMPT レコード様式を表示し、ワークステーション・ユーザー の応答を待機します。F3 は、プログラムの終了を制御する標識 03 をオンに設定します。 SETLL 命令によって CUSMSTL3 ファイルを位置付けるためのキーとして、名前 (NAME) が使用されます。SETLL 命令では、ファイル名 CUSMSTL3 ではなく、レコード様式名 CUSREC が 使用されることに注意してください。

SFLPRC サブルーチンは、サブファイルの処理 (消去、充てん、および表 示) を扱います。サブファイルは、サブルーチン SFLCLR の中での追加の要求のために準備され ます。標識 55 がオンの場合には、画面上で処置は行われませんが、サブファイル ・レコードの主記憶域は消去されます。SFLFIL ルーチンはサブファイルをレコードで充てんします。CUSMSTL3 ファイルからレコードが読み取られ、レコード・カウント (RECNUM) が増え、そのレコードがサブファイルに書き出されます。 このサブルーチンは、サブファイルがいっぱいになるか (WRITE 命令の標識 21)、 または CUSMSTL3 ファイルでファイルの終わりが起こる (READ 命令の標識 71) まで、反復されます。サブファイルがいっぱいになるか、ファイルの終わりが 検出されると、サブファイルが EXFMT 命令によってサブファイル制御レコード様式で、画面に表示 されます。ユーザーは、画面を検討して次のことを決定します。

図 211 では、ユーザーは、初期化プロンプトに対して得意先名を 入力して応答します。

図 211. 'CUSTOMER SEARCH & INQUIRY BY NAME' (名前による得意先検索および照会) プロンプト画面
   22:35:26             CUSTOMER SEARCH & INQUIRY BY NAME             9/30/94


   Enter Search Name  JUDAH GOULD

















     ENTER - Continue       F3 - End Job

図 212 に示すように、ユーザーは X を入力して、 さらに情報を要求します。

図 212. 'CUSTOMER SEARCH & INQUIRY BY NAME' (名前による得意先検索および照会) 情報画面
   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

選択した得意先の詳細は、 図 213 に示されています。 この時点で、ユーザーは、適切な機能キーを選択して照会を続行または終了し ます。

図 213. 'CUSTOMER SEARCH & INQUIRY BY NAME' (名前による得意先検索および照会) 詳細情報画面
   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