SCHNAM: RPG ソース

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

     Fcusmstl3  if   e           k disk
     Fschnamd   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     namekey       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;

          // Loop through all customer records
          recnum = 0;
          dou %eof(schnamd);
             // Read next record
             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(schnamd);
             // 要求した得意先レコードの表示を再始動する
             restartKey = *on;

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

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

             readc subfile;
          enddo;


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

      /end-free

変更の始まりファイル仕様書は、検索するディスク・ファイルおよび使用される表示装置ファイル (SCHNAMD) を指定します。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 命令によってサブファイル制御レコード様式で、画面に表示 されます。ユーザーは、画面を検討して次のことを決定します。
  • F3 キーを押してプログラムを終了する。
  • F4 キーを押してそのサブファイルを再開する。PROMPT レコード様式は表示されずに、サブファイルが同じ名前から再び表示さ れます。
  • 次ページ・キーを押して別のページを充てんする。CUSMSTL3 ファイルでファイルの終わりが検出されたら、現在のページが再 び表示され、そうでない場合には、サブファイルが消去されて、次のページが 表示されます。
  • X を入力してから実行キーを押して得意先の明細を表示する。その後、ユーザーは、実行キーを押して PROMPT 画面に戻るか、F4 キーを押して 再びサブファイルを表示するか、あるいは F3 キーを押してプログラムを終了させることが できます。

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

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


   Enter Search Name  JUDAH GOULD

















     ENTER - Continue       F3 - End Job

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

図 3. 'CUSTOMER SEARCH and 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

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

図 4. 'CUSTOMER SEARCH and 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