顧客選択プログラムは、通常の「選択テーブル」の機能を利用して作成します。ファットクライアントの場合と比べて異なる点は、フォームのウィンドウタイプが「M=モーダル」となる点です。これにより、選択テーブルを二重にオープンしたり、マウス操作を誤って、他のウィンドウにフォーカスが移動してしまったりすることを防ぎます。
丹田 昌信 *)
顧客選択プログラムの実行画面
画面1は、完成後の顧客選択プログラムの実行画面です。受注入力フォームの「顧客番号」の欄からズーム(F5キーまたはダブルクリック)すると、この選択テーブルがオープンされます。
 |
| クリックすると拡大表示されます |
| 画面 1 顧客選択プログラムの実行画面 |
目的の顧客を選択するにはレコードを選んで「選択」ボタンを押すか、あるいはEnterキーを押します。逆に、選択操作を取り消してウィンドウを閉じるには、ESCキーを押すか、「キャンセル」ボタンを押すか、あるいはウィンドウの閉じるボタンを押します。-
内部的には、選択操作は「選択」イベントの実行、「キャンセル」操作は「クローズ」イベントの実行となっています。
では早速、このプログラムを作成してみましょう。
顧客選択プログラムの作成
はじめに、「選択テーブル」の機能を使用した顧客選択プログラムを作成します。
プログラムリポジトリを開き、3行目に新しい行を作成してAPGを起動します。
「オプション」欄を「C=リッチクライアント」とし、「メインソース」を顧客ファイルとします(画面2)。
 |
| クリックすると拡大表示されます |
| 画面 2 APGで顧客選択プログラムを作成 |
「カラム」欄からズームしてカラム選択テーブルを開き、「顧客番号」と「顧客名」だけを選択します(画面3)。
 |
| クリックすると拡大表示されます |
| 画面 3 カラムの選択 |
APGダイアログのOKボタンを押してAPGを実行し、プログラムリポジトリ上でプログラムの名前を「顧客選択」とし、公開名を「SelectCustomer」とします。このプログラムは外部から単体で呼ばれることはありませんので、「外部」のチェック欄は空白のままにしておきます(画面4)。
 |
| クリックすると拡大表示されます |
| 画面 4 プログラム名と公開名の設定 |
タスクをズームしてデータビューエディタを開き、受注入力プログラムからパラメータを受け取るためのパラメータ変数を「P_顧客番号」として定義します(画面5)。
 |
| クリックすると拡大表示されます |
| 画面 5 パラメータの設定 |
そして、このパラメータで顧客ファイルの顧客番号を位置付け設定(位置付:最小)します。これにより、受注入力画面においてすでに顧客が登録されている場合は、その値で選択テーブル側のレコードが位置付けされることになります(
画面6)。
 |
| クリックすると拡大表示されます |
| 画面 6 顧客番号をパラメータの値で位置付け |
次にフォームエディタを開き、「ウィンドウタイプ」が「M=モーダル」となっていることを確認します(画面7)。
 |
| クリックすると拡大表示されます |
| 画面 7 ウィンドウタイプ「M=モーダル」の確認 |
「顧客選択」のフォームをズームしてフォームを開き、ウィンドウのサイズとテーブルのサイズを適当に決めます。このとき、「選択」ボタンと「キャンセル」ボタンを配置する余白を残しておきます(
画面8)。
 |
| クリックすると拡大表示されます |
| 画面 8 フォームとテーブルサイズの調整 |
コントロールパレットから「プッシュボタン」のコントロールを選択してフォーム上に配置し、「書式」欄を「選択」とします(
画面9)。
 |
| クリックすると拡大表示されます |
| 画面 9 選択ボタンの配置 |
この場合、データ欄にカラムの指定がありませんので、このボタンにカーソルをパークさせることはできませんが、キーボード操作では選択イベントの実行としてEnterキーが使用できますので、とくに問題はないはずです。あえてカーソルをパークさせたい場合はデータビューに変数を定義して、これをボタンのデータとします。
次に、このボタンが押されたときの実行イベントを設定します。
選択ボタンのコントロール特性にある「実行イベント」欄からズームしてイベントダイアログを開き、イベントタイプを「I=内部」、イベントを「選択」とします(画面10)。
 |
| クリックすると拡大表示されます |
| 画面 10 選択イベントの設定 |
続いて、「キャンセル」ボタンの配置です。コントロールパレットから「プッシュボタン」のコントロールを選択してフォーム上に配置し、「書式」欄を「キャンセル」とします(画面11)。
 |
| クリックすると拡大表示されます |
| 画面 11 キャンセルボタンの配置 |
選択ボタンと同じように、このボタンが押されたときの実行イベントを設定します。
キャンセルボタンのコントロール特性にある「実行イベント」欄からズームしてイベントダイアログを開き、イベントタイプを「I=内部」、イベントを「クローズ(C)」とします。これにより、何もせずにタスクを終了してウィンドウを閉じるという動作になります(画面12)。
 |
| クリックすると拡大表示されます |
| 画面 12 クローズイベントの設定 |
最後に、選択イベントが実行されたときに、パラメータに顧客ファイル側の顧客番号の値を返すための設定を行います。
選択テーブルの機能においては、選択イベントが実行されるとレコード後処理を通過するという特性があります。この特性を利用すれば、タスクの終了時にレコード後処理レベルでパラメータの値を更新してやればよいということになります。
ロジックエディタを開き、レコード後処理の実行レベルに「P_顧客番号」の項目更新処理を定義します。更新する値は、顧客ファイルの顧客番号となります(画面13)。
 |
| クリックすると拡大表示されます |
| 画面 13 パラメータ更新処理の設定 |
これで、顧客選択プログラム側の設定は完了です。
受注入力プログラムの変更
顧客選択プログラムが完成したら、次に受注入力プログラム側に、この顧客選択プログラムをコールするための処理を追加します。
顧客選択プログラムがコールされるタイミングは、カーソルがフォーム上の「顧客番号」の欄にあるときにズームイベントが実行されたときという条件になります。したがって、この定義はロジックエディタ上にイベントレベルのハンドラをひとつ定義してやればよいことになります。
ロジックエディタを開き、イベントレベルのヘッダ行を作成します。イベントダイアログ上でイベントタイプとイベントをそれぞれ、「I=内部」、「ズーム(Z)」とします(画面14)。(*1)
 |
| クリックすると拡大表示されます |
| 画面 14 ズームイベントの設定 |
コントロール欄からズームして、イベント実行の対象となる「顧客番号」のコントロールを選択します(画面15)。
 |
| クリックすると拡大表示されます |
| 画面 15 イベント対象のコントロールを選択 |
ハンドラ行を1行追加し、顧客選択プログラムをコールする設定を行います(画面16)。
 |
| クリックすると拡大表示されます |
| 画面 16 顧客選択をコールするハンドラの設定 |
パラメータ欄からズームしてパラメータテーブルを開き、受注ファイルの「顧客番号」をコール先の「P_顧客番号」パラメータと対応させます(画面17)。
 |
| クリックすると拡大表示されます |
| 画面 17 プログラムコール時のパラメータの設定 |
(*1)運用上、オペレータによって手入力された顧客番号の値をパラメータとして渡したい場合は、入力された値を確定するために、ユーザイベントを経由して、ユーザイベントテーブルの「強制終了」欄を「E=編集」にするというオプションを用いることもできます(画面18)。
 |
| クリックすると拡大表示されます |
| 画面 18 手入力の値をパラメータとして渡す場合の設定 |
これですべての設定は完了です。タスクを保存してプログラムリポジトリに戻り、F7キーで受注入力プログラムを実行させます。
プログラムの動作確認
受注入力プログラムが実行されると画面19のようになります。
 |
| クリックすると拡大表示されます |
| 画面 19 受注入力プログラムの実行 |
カーソルを顧客番号の欄に移動させ、ズーム(F5キーまたはダブルクリック)します(画面20)。
 |
| クリックすると拡大表示されます |
| 画面 20 顧客選択プログラムのズーム |
顧客選択プログラムがコールされたら、選択ボタン、キャンセルボタン、Enterキー、ESCキー、閉じるボタンなどの動作確認を行っておきます。
次回は、リッチクライアントで商品選択プログラムを作成します。
(以上、2008年4月1日号)