CUSMNT: RPG ソース

図 196. モジュール CUSMNT のソース
     //****************************************************************
     //  プログラム名:  CUSMNT                                        *
     //  関連ファイル:  CUSMSTL1 (LF)                                 *
     //                 MNTMENU  (DSPF)                               *
     //          説明:  このプログラムは、WORKSTN ファイルを使用した  *
     //                 得意先マスター・ファイル維持プログラムです。  *
     //                 このプログラムでユーザーは、得意先レコードを  *
     //                 追加、更新、削除、表示できます。              *
     //                 PF3 を使用してプログラムを終了します。        *
     //****************************************************************

     Fcusmstl1  uf a e           k disk
     Fmntmenu   cf   e             workstn indds(indicators)

      // フィールド定義:

     D indicators      ds
     D   exitKey                       n   overlay(indicators:3)
     D   disableInput                  n   overlay(indicators:4)
     D   addKey                        n   overlay(indicators:5)
     D   updateKey                     n   overlay(indicators:6)
     D   deleteKey                     n   overlay(indicators:7)
     D   displayKey                    n   overlay(indicators:8)
     D   prevKey                       n   overlay(indicators:12)
     D   custExists                    n   overlay(indicators:51)
     D   custNotFound                  n   overlay(indicators:52)

      // キー・リスト定義

     C     CSTKEY        KLIST
     C                   KFLD                    CUST
      //*****************************************************************
      //   メインライン                                                 *
      //*****************************************************************

      /free

       mode = 'DISPLAY';
       exfmt hdrscn;

       // 終了キーが押されるまでループする
       dow not exitKey;
          exsr SetMaintenanceMode;

          if cust <> 0;
             if mode = 'ADD';
                exsr AddSub;
             elseif mode = 'UPDATE';
                exsr UpdateSub;
             elseif mode = 'DELETE';
                exsr DeleteSub;
             elseif mode = 'DISPLAY';
                exsr InquirySub;
             endif;
          endif;

          exfmt hdrscn;
          custExists   = *off;   // エラー・メッセージをオフにする
          CustNotFound = *off;
       enddo;

       *inlr = *on;
       //****************************************************************
       //    サブルーチン - AddSub                                      *
       //    目的         - 新しい得意先をファイルに追加する            *
       //****************************************************************
       begsr AddSub;

          // 得意先番号は既にファイルにあるか ?
          chain CstKey cmlrec1;
          if %found(cusmstl1);
             // 既に使用されている得意先番号の場合
             custExists = *on;
             leavesr;
          endif;

          // 新しい得意先データの初期化
          custExists   = *off;   // エラー・メッセージをオフにする
          CustNotFound = *off;
          name = *blank;
          addr1 = *blank;
          addr2 = *blank;
          city = *blank;
          state = *blank;
          zip = 0;

          // この得意先レコードの更新データを入れるためのプロンプトを出す
          exfmt cstbld;

          // よければ、得意先を得意先ファイルに追加する
          if not *in12;
             write cmlrec1;
          endif;
       endsr;  // サブルーチン AddSub の終わり



       //****************************************************************
       //    サブルーチン - UpdateSub                                   *
       //    目的         - 得意先マスター・レコードを更新する          *
       //****************************************************************
       begsr UpdateSub;

          // 得意先番号の探索
          chain cstkey cmlrec1;
          if not %found(cusmstl1);
             // 得意先がファイルにない
             custNotFound = *on;
             leavesr;
          endif;

          // この得意先の情報を表示する
          disableInput = *off;
          exfmt cstinq;
          if not prevKey;
             // ファイルの中の情報を更新する
             update cmlrec1;
          else;
             // 更新したくない場合でも、少なくとも
             // そのレコードのアンロックは行なう
             unlock cusmstl1;
          endif;
       endsr;  // サブルーチン UpdateSub の終わり
       //****************************************************************
       //    サブルーチン - DeleteSub                                   *
       //    目的         - 得意先マスター・レコードを削除する          *
       //****************************************************************
       begsr DeleteSub;

          // 得意先番号の探索
          chain cstkey cmlrec1;
          if not %found(cusmstl1);
             // 得意先がファイルにない
             custNotFound = *on;
             leavesr;
          endif;

          // この得意先の情報を表示する
          disableInput = *on;
          exfmt cstinq;
          if not prevKey;
             // 得意先レコードの削除
             delete cmlrec1;
          else;
             // 削除したくない場合でも、少なくとも
             // そのレコードのアンロックは行なう
             unlock cusmstl1;
          endif;
       endsr;  // サブルーチン DeleteSub の終わり



       //****************************************************************
       //    サブルーチン - InquirySub                                  *
       //    目的         - 得意先マスター・レコードを表示する          *
       //****************************************************************
       begsr InquirySub;

          // 得意先番号の探索
          chain(n) cstkey cmlrec1;  // レコードをロックしない
          if not %found(cusmstl1);
             // 得意先がファイルにない
             custNotFound = *on;
             leavesr;
          endif;

          // この得意先の情報を表示する
          disableInput = *on;
          exfmt cstinq;
       endsr;  // サブルーチン InquirySub; の終わり
       //****************************************************************
       //    サブルーチン - SetMaintenanceMode                          *
       //    目的         - 維持モードの設定                            *
       //****************************************************************
       begsr SetMaintenanceMode;
          if addKey;
             mode = 'ADD';
          elseif updateKey;
             mode = 'UPDATE';
          elseif deleteKey;
             mode = 'DELETE';
          elseif displayKey;
             mode = 'DISPLAY';
          endif;
       endsr;  // サブルーチン SetMaintenanceMode の終わり

      /end-free

このプログラムは、得意先マスター・ファイルの追加、変更、 および削除の保守を行います。このプログラムは照会に使用することもできます。

プログラムは最初は、デフォルト (表示) の処理方式を設定し、 得意先保守プロンプト画面を表示します。ワークステーション・ユーザーは、F3 キーを押して (標識 03 がオンになる) ジョブの終了を要求することができます。そうでない場合には、得意先情報を処理するために、ユーザーは得意先番号を 入力して、実行キーを押します。 ユーザーは、F5 (追加)、F6 (更新)、F7 (削除)、または F8 (表示) を押して 処理方式を変更することができます。

新しいレコードをファイルに追加するためには、プログラムは得意先番号を 検索引数として使用して、マスター・ファイルに連鎖します。 ファイルにレコードが存在していない場合には、プログラムは CSTBLD 画面を表示して、 ユーザーが新しい得意先レコードを入力できるようにします。 レコードが既にファイルに存在している場合には、エラー・メッセージが表 示されます。ユーザーは、F12 キーを押して (標識 12 をオンに設定する)、 追加操作を取り消してレコードを解放することができます。 そうでない場合には、追加操作を続行するために、ユーザーは、入力フィールドに 新しい得意先レコードの情報を入力し、新しいレコードをマスター・ファイルに書き出します。

既存のレコードを更新、削除、または表示するためには、プログラムは得意先 番号を検索引数として使用し、マスター・ファイルに連鎖します。その得意先のレコードがファイルに存在している場合には、プログラムは 得意先ファイル照会画面 CSTINQ を表示します。レコードがファイルに存在していない場合には、エラー・メッセージが表 示されます。処理方式が表示または削除の場合には、入力フィールドは変更できないように 保護されています。そうでない場合には、得意先レコードを続行するために、ユーザーは、得意先 レコード入力フィールドに新しい情報を入力することができます。ユーザーは、F12 キーを押して (標識 12 をオンに設定する)、更新操作ま たは削除操作を取り消して、レコードを解放することができます。表示モードでは、実行キーを押すと、自動的にレコードが解放されます。

図 197 では、ワークステーション・ユーザーがプロンプトへの 応答として得意先番号 00007 を入力して、その得意先レコードを表示します。

図 197. 'CUSTOMER FILE MAINTENANCE' (得意先ファイル維持) 表示モード・プロンプト画面
   DISPLAY MODE
   22:30:21                CUSTOMER FILE MAINTENANCE                  9/30/94






                        00007   <--Enter Customer Number












   F3 End Job       F5 Add       F6 Update       F7 Delete       F8 Display

得意先番号 00007 の得意先レコードはマスター・ファイルに存在しているので 、図 198 に示すようにデータが表示されます。

図 198. 'CUSTOMER FILE MAINTENANCE' (得意先ファイル維持) 表示モード画面
   DISPLAY MODE
   22:31:06                CUSTOMER FILE MAINTENANCE                  9/30/94
             Customer:  00007

                        Mikhail Yuri
                        1001 Bay Street
                        Suite 1702
                        Livonia
                        MI             11201












 F12 Cancel DISPLAY

ワークステーション・ユーザーは、図 199 に示すように、 追加プロンプトに対して新しい得意先番号を入力して応答します。

図 199. 'CUSTOMER FILE MAINTENANCE' (得意先ファイル維持) 追加モード・プロンプト画面
   ADD MODE
   22:31:43                CUSTOMER FILE MAINTENANCE                  9/30/94






                        00012   <--Enter Customer Number












   F3 End Job       F5 Add       F6 Update       F7 Delete       F8 Display

図 200 では、新しい得意先が得意先マスター・ファイルに追加 されます。

図 200. 'CUSTOMER FILE MAINTENANCE' (得意先ファイル維持) 追加モード・プロンプト画面
   ADD MODE
   22:32:04                CUSTOMER FILE MAINTENANCE                     9/30/94
             Customer:  00012

                   Name JUDAH GOULD
                Address 2074 BATHURST AVENUE
                Address
                   City YORKTOWN
                  State NY         Zip 70068












 F12 Cancel Addition

ワークステーション・ユーザーは、図 201 に示すように、 削除プロンプトに対して得意先番号を入力して応答します。

図 201. 'CUSTOMER FILE MAINTENANCE' (得意先ファイル維持) 削除モード・プロンプト画面
   DELETE MODE
   22:32:55                CUSTOMER FILE MAINTENANCE                  9/30/94






                        00011   <--Enter Customer Number












   F3 End Job       F5 Add       F6 Update       F7 Delete       F8 Display

ワークステーション・ユーザーは、図 202 に示すように、 更新プロンプトに対して得意先番号を入力して応答します。

図 202. 'CUSTOMER FILE MAINTENANCE' (得意先ファイル維持) 更新モード・プロンプト画面
   UPDATE MODE
   22:33:17                CUSTOMER FILE MAINTENANCE                  9/30/94






                        00010   <--Enter Customer Number












   F3 End Job       F5 Add       F6 Update       F7 Delete       F8 Display