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