CUSMNT: RPG ソース
//****************************************************************
// プログラム名: 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 をオンに設定する)、更新操作ま たは削除操作を取り消して、レコードを解放することができます。表示モードでは、実行キーを押すと、自動的にレコードが解放されます。
図 2 では、ワークステーション・ユーザーがプロンプトへの 応答として得意先番号 00007 を入力して、その得意先レコードを表示します。
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 の得意先レコードはマスター・ファイルに存在しているので 、図 3 に示すようにデータが表示されます。
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
ワークステーション・ユーザーは、図 4 に示すように、 追加プロンプトに対して新しい得意先番号を入力して応答します。
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
図 5 では、新しい得意先が得意先マスター・ファイルに追加 されます。
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
ワークステーション・ユーザーは、図 6 に示すように、 削除プロンプトに対して得意先番号を入力して応答します。
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
ワークステーション・ユーザーは、図 7 に示すように、 更新プロンプトに対して得意先番号を入力して応答します。
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