3)単票形式の場合

99 views

プログラムの仕様

  • 顧客番号を受け取る
  • 新規登録の場合は0番、修正の場合は該当する番号を受け取る
  • 更新、削除ができるようにする。新規登録時は更新のみ
  • 右上の戻るボタンをクリックした場合は取消終了とする
  • 0番を受けて登録を行ったときに最新番号を取得し設定する

その他該当プログラム

M0011、M0021、M0031、M0041


タスクの構造


M0011(オンライン):パラメーターを取得し、該当レコードが無ければ登録モード、あれば修正モードとなる。
伝票番号取得(バッチ):顧客番号のパラメーターが0(新規登録)の場合、顧客マスタの最後の番号に1加えたものを画面に設定する。

なぜこのタスク構造になるのか?

ユニークキーである顧客番号にて範囲指定するので1件に対して新規登録、修正、削除をおこないます。
タスクは1個で済みます。変数に対して制御するのではなく実データに対して制御を行います。


タスク特性について

M0011(メインタスク)の場合


タスクタイプ:Web Client
インタラクデティブ:入力画面なのでチェックをつける
初期モード:変数項目を修正できるように修正モードに設定します


ルート:ルーティングによってのコールがないため「なし」


トランザクション:データベースの更新があります。新規の遅延トランザクションを選択してください。M0011だけで完結させます。
トランザクション開始:レコード前の前、一行の範囲指定なのでタスク前でもよいのですが、きちんとレコード前の前にするなど適材適所を設定するようにしましょう。


更新確認をNoにします。


Yesにした場合、メインファイルの更新時に更新確認を聞かれます。
今回は更新ボタンを押したと同時にM0011を終了させますので更新確認をNoにいたします。


伝票番号取得の場合


初期モード:新規登録の場合、伝票番号を修正するので修正モード
タスク終了条件:Yes
チェック時期:後置

メインファイルがないためタスク前⇒レコード前⇒レコード後処理⇒タスク後処理で終わらせるためタスク終了条件Yes、チェック時期後置とします。
タスク終了条件Noでメインファイルがない場合は、無限ループが発生いたしますのでご注意ください。


トランザクション:バッチなので何かを選択する必要がありますが物理を選択してください。
トランザクション開始:書き込みがありませんのでなしを選択してください。


データビュー、ロジック、フォームについて

M0011(メインタスク)の場合

データビュー


メインソースに顧客マスタを指定します。
インデックスは顧客番号をユニークキーとしたものを指定します。
受け取りパラメーター pi顧客番号を設定。M0010からパラメーターを受け取り、6行目の顧客番号で範囲として使用します。
1行のみ範囲指定を行い、その1行に対して修正や削除を行います。
3,4行目の変数はボタン設定であり、削除ボタンと更新ボタンを指定しています。

フォーム


ルーティングではなく、コールでM0010から呼ばれるプログラムのためウィンドウタイプを必ずオーバーレイに設定します。


ボタンと顧客マスタ項目を設置します。


削除ボタンにはユーザーイベント:GE.Deleteを指定します。
ユーザーイベントについては、次に説明するロジックにてユーザーイベントを説明しています。


更新ボタンは削除ボタン同様にユーザーイベントを指定します。
こちらはGE.Updateです

ロジック

画面クローズ時


クローズ時:ウィンドウを閉じた場合は今まで修正したものを破棄して終了させます。
イベント:クローズ時に取消終了をイベント実行しています。

更新時


GE.Update:ユーザーイベント GE.Updateをメインプログラム上で作成しています。


プログラムリポジトリのメインプログラムを開いてください。


タスク環境のユーザーイベントを開きます。


GE.UpdateとGE.Deleteが構築されていることがわかります。
これはボタンクリック時に編集中の文字を確定させてからイベントへ移ることを示しています。
詳しくはヘルプの強制終了⇒編集を参照してください。

GE.Updateイベントが発生した場合

7行目で顧客番号パラメーターが0の場合は最新の伝票番号を取得しに行きます。
8行目で終了しています。
終了によりデーター修正時はレコード後処理を通りますので、修正内容が反映されます。
レコード書き込みイベントも考えられるのですがレコード書き込みの場合、データを何も修正しない場合は動きませんのでクリックしても動きません。
今回は修正しなくとも更新ボタンをクリックすることで終わらせたいため、終了イベントにしました。


削除時はGE.Deleteが呼ばれます。
10行目にて行削除イベントを行うことで、削除を行うかを聞かれます。
「はい」を選んだ場合はレコード後処理が動き、データが確定されます。

レコード後処理


データ更新後に終了します。
削除時イベントに終了イベントを追加しない理由は、削除しますか?と聞かれた場合に「いいえ」と答える可能性があるからです。
いいえを選んだ場合はレコード後処理をとおりません。


伝票番号取得(バッチサブタスク)の場合

データビュー


メインソースには何も指定しません。

ここは、複数の考え方があると思います。
メインソースに顧客マスタを指定し、降順に指定。タスク終了条件にYes。
チェック時期に後置とやる方法もあります。

複数行データにアクセスする可能性がある場合⇒メインソース
1行に対してアクセスする場合⇒データリンクと基本的には統一しています。

ここでは顧客マスタを顧客番号順の逆方向で開き、開いた一番最初のデータで、ある最大値のデータを取得しています。

ロジック


レコードあと処理にて

M0011の顧客番号に対して顧客番号の最大値+1をセットしました。

以上で単票形式の説明を終わります。

Share this Article

3)単票形式の場合

Or copy link

CONTENTS