MZ Platform工程管理作成チュートリアルⅦ

このチュートリアルは工程管理 チュートリア ル7 .mzax ファイル を基に説明しています。

9.データ更新/削除部の作成

1.この章での完成画面

 『工程管理アプリケーション作成チュートリアルⅥ』では、データベースへの登録機能を作成しましたが、こ こでは既に登 録してあるデータを検索した後、画面上で変更して更新または削除できるようにします。
 

  1. プロジェクトテーブル
  2. 既に登録されたデータを検索して表示できます。
    また、テーブル上で内容を編集することができます。
  3. プロジェクト更新
  4. プロジェクトテーブルの内容でUpdateSQL文を発行し、データベースのprojectテーブルを更新します。
    受注番号を手がかりに更新するため、受注番号欄を編集してもデータは更新されません。
  5. プロジェクト削除
  6. 表示されている受注番号のプロジェクトと工程データをデータベースから削除します。
    一度削除すると元には戻せないため、ボタンを押したら確認メッセージを表示するようにします。
    この機能が不要な場合は設定しなくても構いません。
  7. 工程テーブル
  8. 既に登録されたデータを検索して表示できます。
    また、テーブル上で内容を編集することができます。
  9. 工程更新
  10. 選択された行の内容をUpdateSQL文を発行してデータベースのtaskテーブルを更新します。
    一度に更新できるのは選択された一行だけです。
  11. 工程削除
  12. 選択行を削除することができます。
    削除の前に確認メッセージを表示します。
    一度に更新できるのは選択された一行だけです。

9.1.プロジェクト更新機能の作成

『工程管理アプリケーション作成チュートリアルⅥ』では、データベースに新規にデータを登録する画面を作成しましたが、ここでは既に登 録してあるデータを検索した後、画面上で変更して更新できるようにします。
メインフレームとは別画面で作成します。
まず、プロジェクトの更新部分を作成します。

1.画面の作成

コンポーネント追加
  1. 上位階層のビルダー編集画面で[フレーム]を追加します。
  2. コンポーネント名 必要数 カテゴリー タイトル
    フレーム 1 画面構成部品>フレーム データ更新
  3. 編集画面上で[テーブル表示部]複合コンポーネントをコピーして、貼り付けることで新規追加とします。
    更新や削除の前に、現在登録されているデータを検索して表示する機能が必要なので、[テーブル表示部]をそのまま利用します。
    貼り付けた複合コンポーネント内に入り、コンポーネント名称を「データ更新部」に変更します。
  4. [データ更新部]複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
    ボタンのテキストも先に属性情報から設定した方が配置がしやすいです。
    ※削除機能を設定しない場合、プロジェクト削除ボタンは不要です。
  5. コンポーネント名 必要数 カテゴリー コンポーネントキー/テキスト
    パネル 2 画面構成部品>パネル プロジェクト
    工程
    ボタン 2 画面構成部品>ボタン プロジェクト更新
    ※プロジェクト削除
画面編集
  1. 複合コンポーネント画面編集画面に[パネル]を追加します。
  2. 画面編集画面のツリー領域の[パネル]名をクリックします。
    編集領域がパネルの領域に変わります。
  3. [テーブル]と[ボタン]をそれぞれの[パネル]に配置します。
    配置方法を「手動配置」に変更し、画面作成例に倣ってドラッグして移動します。
    ※後で参考で削除処理も作成しますが、削除処理が必要なときは[ボタン(削除)]も配置します。
  4. 上位階層の画面編集画面で[フレーム(データ更新)]の上に[データ更新部]GUI複合コンポーネントを配置します。

2.メニューアイテムの追加

これまでの画面とは別フレームに配置したので、メインの[フレーム(工程管理)]に[メニュー]を追加し、選択したときに[フレーム (データ追加)]が表示されるようにします。

コンポーネント追加
  1. 上位階層のビルダー編集画面上で[メニューアイテム(データ追加)]をコピーし、貼り付けることで、新規追加とします。
    属性情報でテキストを「データ更新/削除」に変更します。
  2. コンポーネント名 必要数 変更前テキスト 変更後テキスト
    メニューアイテム 1 データ追加 データ更新/削除
  3. 接続処理【接続10のコピー】の変更
    接続処理も一緒に貼り付けられています。
    メソッド「フレームを表示する()」の接続先を[フレーム(データ更新)]に変更します。
    「開始処理を実行する」は一旦削除します。
画面編集
  1. 画面編集画面で[メニュー(データ編集)]の下に[メニューアイテム(データ更新/削除)]を配置します。
接続処理設定
  1. 【接続3-10】アプリケーション終了イベントに[フレーム(データ更新)]を接続先とし、メソッド「フレームを閉じる()」を 設定します。
画面作成例
画面作成例

[編集画面図1]【接続3-10】の接続イベントはアプリケーション終了イベントです。
※起動メソッド情報設定画面図は省略します。引数の設定はありません。

まずはプロジェクト更新の処理を作成します。
登録済みのデータを検索し、画面上で変更して更新できるようにします。
受注番号を基に更新するため、受注番号自体は更新できません。

updateSQL文の基本的な書式は「update テーブル名 set 列1=値1, 列2=値2 ・・・ where 列=値」です。

コンポーネント追加
  1. 複合コンポーネント内にコンポーネントを追加し、コンポーネントキーを変更します。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    テーブル格納変数 1 処理部品>変数 プロジェクト更新用
    文字列格納変数 1 処理部品>変数 Project更新SQL
    繰り返し制御(FOR) 1 処理部品>条件制御 プロジェクト置換
    イベント生成 1 処理部品>イベント プトジェクト更新
  3. 複合コンポーネント内に[テーブル日付データ文字列変換]複合コンポーネントを追加します。
    日付データをそのまま取得すると、データベースに追加できる文字列にはならないので、書式を指定した文字列型とするために複合コン ポーネントを利用します。
    複合コンポーネント内にテーブルデータを設定をすると、日付型列を文字列型列に変換したテーブルデータを取得できるようになっています。
  4. コンポーネント名 必要数 カテゴリー
    テーブル日付データ文字列変換 1 複合コンポーネント追加>テーブル
接続処理設定
    ※接続番号は複合コンポーネントコピー時に既に設定してある処理の続きの番号で説明します。
  1. テーブルデータの変換
    1. 【接続9-1】[テーブル日付データ文字列変換]に[テーブル(プロジェクト)]のデータを設定し、変換します。
      引数0にテーブルデータを設定します。
      引数1に日付文字列の書式「yyyy-MM-dd」を指定します。
    2. 【接続9-2】変換したテーブルデータを[テーブル格納変数(プロジェクト更新用)]に設定します。
  2. 更新SQL文字列の作成
    1. 【接続9-3】[文字列格納変数]に更新SQLの雛形文字列を設定します。
      「update project set product='HINMEI', delivery='NOKI' where label='JUCHU' 」を設定します。
    2. 【接続9-4】雛形文字列を順番に置き換えるために繰り返し処理を設定します。
      テーブルの列数分(今回は3列)繰り返し処理を実行します。
    3. 【接続10-1】0行目のセルの値を繰り返し取得します。
    4. 【接続10-2】「JUCHU」と取得したセルの値を置換えます。
      イベント番号「0」を設定します。
      これで0列目のセルの値を取得したとき実行されます。
    5. 【接続10-3】「HINMEI」と取得したセルの値を置換えます。
      イベント番号「1」を設定します。
      1列目のセルの値を取得したとき実行されます。
    6. 【接続10-4】「NOKI」と取得したセルの値を置換えます。
      イベント番号「2」を設定します。
      2列目のセルの値を取得したとき実行されます。
    確認ここまで設定すると、[文字列格納変数(Project更新SQL)] の文字列が、例えば「update project set  product='A02',delivery='2023-06-16' where label='A02' 」のように置換わります。
    属性設定情報から確認してください。
  3. イベントの発生
    1. 【接続9-5】繰り返し処理の終了後、データ更新イベントを発生させます。
      イベント対象データ、更新データともに[文字列格納変数(Project更新SQL)]の文字列を設定します。
      引数2(イベント番号)には「1」を設定します。
    2. 【接続11-1】更新イベントを上位階層に伝播します。
  4. データベースへ接続
  5. 上位階層に移動します。
    [ガントチャート表示部]のデータ更新イベントの接続処理(【接続6】)をコピーして貼り付けます。
    ※接続先やメソッドの変更の必要はありません。
    1. [データ更新部]にデータ更新イベントを追加します。
    2. [ガントチャート表示部]のデータ更新イベントの接続処理をコピーします。
      イベントを示す赤丸の上で右クリック>[コピー]を選択します。
    3. [データ更新部]の更新イベントにコピーした処理を貼り付けます。
      イベントを示す赤丸の上で右クリック>[貼り付け]を選択します。
[編集画面図2]

[接続画面図3]メソッド情報設定画面図は省略します。
コピーした処理に変更はありません。
[データ更新部]には他に、アクションイベントと処理要求イベントも設定されています。

プロジェクトテーブルに表示されている受注番号のデータを、データベースのprojectテーブ ルから削除します。
データベースのtaskのテーブルにも該当の受注番号のデータがある場合には同時に削除します。

1.確認メッセージの表示

一度削除してしまうと元に戻すことはできないので、確認メッセージを表示し、「はい」が押されたときだけ、削除の処理を行います。

コンポーネント追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
    コンポーネント名 必要数 カテゴリー コンポーネントキー
    確認ダイアログ 1 画面構成部品>ダイアログ プロジェクト削除
    文字列格納変数 2 処理部品>変数 確認メッセージ
    受注番号
    project削除SQL
接続処理設定
  1. 確認ダイアログの表示
    1. 【接続12-1】[文字列格納変数(確認)]にメッセージ文字列の雛形を設定します。
      メッセージが長いため改行を挟みたいので、HTML書式で書きます。
      「<html>受注番号「JUCHU」のプロジェクトと工程を全て削除します。<br>よろしいです か?</html>」を設定します。
    2. 【接続12-2】受注番号をテーブルから取得します。
    3. 【接続12-3】雛形の文字列を置換えます。
      「JUCHU」と[テキストフィールド(受注番号)]のテキストを置換えます。
      [文字列格納変数(確認メッセージ)]内の文字列は、例えば 『<html>受注番号「A04」のプロジェクトと工程を全て削除します。<br>よろしいですか?</html>』となります。
    4. 【接続12-4】後で使うので、受注番号を[文字列格納変数(受注番号)]に格納しておきます。
    5. 【接続12-5】確認ダイアログを表示します。
      引数1に文字列格納変数のメッセージを設定し、引数2にタイトルを設定します。
  2. プロジェクト削除処理
    1. 【接続13-1】[文字列格納変数(project削除SQL)]にSQLの雛形文字列を設定します。
      「delete from project where label='JUCHU'」を設定します。
    2. 【接続13-2】文字列を置換えます。
      「JUCHU」と先に変数に内に格納した受注番号を置換えます。
    3. 【接続13-3】データ更新イベントを発生させます。
      イベント対象データ、更新データともに[文字列格納変数(project削除SQL)]の文字列を設定します。
      引数2(イベント番号)には「2」を設定します。
  3. 工程削除処理
  4. 【接続13-1】~【接続13-3】をコピーして貼り付けると簡単です。
    引数は変更の必要があります。
    1. 【接続13-4】文字列格納変数に工程削除SQLの雛形文字列を設定します。
      「delete from task where projectLabel='JUCHU'」を設定します。
    2. 【接続13-5】文字列を置換えます。
      「JUCHU」と先に変数に格納した受注番号を置換えます。
    3. 【接続13-6】データ更新イベントを発生させます。
      イベント対象データ、更新データ共に[文字列格納変数(project削除SQL)]の文字列を設定します。
      引数2(イベント番号)には「3」を設定します。
    4. 【接続13-1】から【接続13-6】にイベント番号を設定します。
      イベント番号1(はい・了解ボタンが押されたとき)を設定します。
      [Shift]キーを押して接続先コンポーネントを全て選択してから、イベント番号を設定すると一度に設定できます。

確認ここまで設定すると削除対象の受注番号のプロジェクト及 び工程のデータをデータベーステーブルから削除することができます。

確認ダイアログ画面例
[編集画面図4]

9.2.工程データ更新/削除機能の作成

1.テーブル列の追加

工程を変更する際に、ID番号を手掛かりに更新データを特定するので、テーブル表示時に削除していたID列を表示するようにし ま す。

画面編集
  1. 左端に列を追加します。
    [実行(設定可)]ボタンで実行し、工程テーブルの「工程」列を右クリックし>[列]>[追加]>[左]>[一列]> [整 数]を 選びます。
    列名を「ID」に変更します。
  2. 必要に応じて[テーブル(工程)]の大きさを調整します。
接続処理設定
  1. 処理の休止
    1. 【接続6-2】メソッド「列を位置指定で削除する」を「起動しない」に変更します。
      複合コンポーネントをコピーした際に、先に設定してあった処理を「起動しない」に設定します。
      [テーブル格納変数(工程)]の2番目の接続先処理[テーブル格納変数(工程)]の上で右クリック>[イベント番号設定]> [起 動しな い]を選択します。
工程テーブル画面例
確認ここまで作成して「データベースに接続」ボタ ンを押し、受注番号を選択すると、[テーブル(工程)]にID列も表示されるようになります。

[編集画面図5]起動メソッド情報設定画面図は省略します。

コンポーネント追加
  1. 複合コンポーネント内の編集領域で以下のコンポーネントをコピーし、貼り付けます。
    接続ごと処理が貼り付けられます。
    ※【接続9】~【接続11】及び接続先となっているコンポーネントを一度に選択してコピーします。
    ※※[テーブル日付データ文字列変換]複合コンポーネントはコピーしません。
  2. コンポーネント名 必要数 コピー元コンポーネントキー 変更後コンポーネントキー
    ボタン 1 プロジェクト更新 工程更新
    繰り返し制御(FOR) 1 プロジェクト置換 工程置換
    イベント生成 1 プロジェクト更新 工程更新
    テーブル格納変数 1 プロジェクト更新用 工程更新用
    文字列格納変数 1 project更新SQL task更新SQL
画面編集
  1. [ボタン(工程更新)]を画面編集画面で[パネル(工程)]上に配置します。
接続処理設定
ここでの接続処理設定は、コピーしたコンポーネントの接続を活かして、接続処理の変更で設定を行います。
  1. [ボタン(工程更新)]のアクションイベントの接続処理
  2. ([ボタン(プロジェクト更新)]の【接続9】をコピーしたもの)
    1. 【接続14-1】引数0のテーブルデータの取得元を[テーブル格納変数(工程更新用)]に変更します。
    2. 【接続14-2】コピーした内容から変更はありません。
    3. 【接続14-3】引数に設定する文字列を変更します。
      「update task set process='KOTEI', workingTime='JIKAN', dateStart='KAISHI', dateEnd='OWARI', isCompleted=KANRYO where ID=AIDII」とします。
    4. 【接続14-4】繰り返し処理の終了値を変更します。
      引数1の取得元を[テーブル格納変数(工程更新用)]の列数に変更します。
    5. 【接続14-5】引数1(イベント番号)に「4」を設定します。
  3. [繰り返し制御(FOR)(工程置換)]のアクションイベントの接続処理
  4. (繰り返し制御(FOR)(プロジェクト置換)の【接続10】をコピーしたもの)
    1. 【接続15-1】引数0は[テーブル(工程)]の選択行とします。
    2. 【接続15-2】置換前の文字列に「AIDII」を設定します。
    3. 【接続15-3】置換前の文字列に「KOTEI」を設定します。
    4. 【接続15-4】置換前の文字列に「JIKAN」を設定します。
    5. 【接続15-2】~【接続15-4】を複数選択してコピーし、同じイベントに貼り付けで処理を増やします。
    6. 【接続15-5】置換前の文字列に「KAISHI」を設定します。
      イベント番号3を設定します。
    7. 【接続15-6】置換前の文字列に「OAWRI」を設定します。
      イベント番号4を設定します。
    8. 【接続15-7】置換前の文字列に「KANRYO」を設定します。
      イベント番号5を設定します。
  5. [イベント生成(工程更新)]データ更新イベントの接続処理
  6. ([イベント生成(プロジェクト更新)]の【接続11】をコ ピーしたもの)
    1. 【接続16-1】変更はありません。
確認ここまで作成すると選択された行の内容で データ ベーステーブルの更新ができます。
コンポーネントコピー
画面作成例
[編集画面図6]

[編集画面図7]

[テーブル(工程)]上で選択されている行を、データベースのtaskテーブルから削除します。

1.画面作成

コンポーネント追加
  1. 複合コンポーネント内の編集領域で以下のコンポーネントをコピーし、貼り付けます。
    接続ごと処理が貼り付けられます。
    ※【接続12】と【接続13】及び接続先となっているコンポーネントを一度にコピーします。
  2. コンポーネント名 必要数 コピー元コンポーネントキー 変更後コンポーネントキー/テキスト
    ボタン 1 プロジェクト削除 工程削除
    確認ダイアログ 1 プロジェクト削除 工程削除
    文字列格納変数 確認メッセージ
    受注番号格納
    project削除SQL
    削除メッセージ
    ID番号格納
    taskt削除SQL
画面編集
  1. 画面編集画面で[ボタン(工程削除)]を配置します。
接続処理設定
  1. [ボタン(工程削除)]のアクションイベントの接続処理(接続12をコ ピー)
    1. 【接続17‐1】削除メッセージの雛形を「<html>ID=AIDII、「KOTEI」 の工程を全て削除します。<br>よろしいですか?</html>」に設定します。
    2. 【接続17‐2】接続先コンポーネントを[テーブル(工程)]に変更し、引数0を[テーブル(工程)]の選択行位置に設 定し ま す。
    3. 【接続17‐3】コピーした内容から変更はありません。
    4. 【接続17-4】引数0の置換前の文字列を「AIDII」に変更します。
    5. 【接続17-5】セルの値を取得します。
      【接続17-3】をコピーして貼り付け、引数1を「1」に変更します。
    6. 【接続17-6】「KOTEI」と取得したセルの値を置換します。
      【接続17-4】をコピーして貼り付け、引数0に「KOTEI」を設定します。
      引数1の「メソッド処理結果」の選択は2番目の候補の「セルの値を取得する」を選択します。
    7. 【接続17-7】コピーした内容から変更はありません。
  2. [確認ダイアログ(工程削除)]のアクションイベントの接続処理(接続13をコ ピー)
    1. 【接続18-1】引数に「delete from task where IDl='AIDII'」を設定します。
    2. 【接続18-2】引数0の引数0の置換前の文字列を「AIDII」に変更します。
    3. 【接続18-3】接続先コンポーネントを[イベント生成(工程更新)]に変更し、引数2(イベント番号)には「4」を設 定し ます。
画面作成例

[編集画面図8]

1.終了時処理の追加

コンポーネ ント追加
  1. 複合コンポーネント内で以下のコンポーネントを追加します。

  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    ファンクション 2 サブルーチン>ファンクション プロジェクト押下可否
    工程押下可否

接続処理設定

データの更新や削除をテーブルの行が選択されていない時に行うとエラーが発生するため、終了時には[ボタン]無効化して、次に表示す ると きに備えるようにします。
数が多いので一旦[ファンクション]に纏めます。
  1. 終了処理の呼び出し
    1. 上位階層【接続14-1】終了処理を呼び出します。
      元々公開してある[サブルーチン(終了処理)]のメソッドを呼び出します。
    2. 【接続7-3】[ファンクション(プロジェクト押下可否)]を呼び出します。
      引数に「false」を設定します。
    3. 【接続7-4】[ファンクション(工程押下可否)]を呼び出します。
      引数に「false」を設定します。
  2. プロジェクトのボタンの無効化
  3. 接続元を[ファンクション(ボタン押下可否)]とし、ファンクションの第一引数を引数として取得します。
    1. 【接続19-1】[ボタン(プロジェクト更新)]を無効化します。
    2. 【接続19-2】[ボタン(プロジェクト削除)]を無効化します。
  4. 工程のボタンの無効化
  5. 接続元を[ファンクション(ボタン押下可否)]とし、ファンクションの第一引数を引数として取得します。
    1. 【接続20-1】[ボタン(工程更新)]を無効化します。
    2. 【接続20-2】[ボタン(工程削除)]を無効化します。

2.プロジェクト選択時の処理

  1. プロジェクトボタンの有効化
  2. [テーブル(プロジェクト)]のセルデータが更新(受注番号が選択)されるのをきっかけに、ボタンを有効化します。
    1. 【接続2-3】[ファンクション(プロジェクト押下可否)]を呼び出します。
      引数は「true」を設定します。
  3. 工程ボタンの無効化
  4. [テーブル(プロジェクト)]のセルデータが更新(受注番号が選択)されると工程テーブルの内容は一新され選択がクリアされるので、[ボ タン(工程削除)]は無効化します。
    1. 【接続2-4】[ファンクション(工程押下可否)]を呼び出します。
      引数は「false」を設定します。

3.工程選択時の処理

  1. 工程ボタンの有効化
  2. [テーブル(工程)]のセルが選択されたのをきっかけに、ボタンを有効化します。
    1. 【接続21-1】[ファンクション(工程押下可否)]を呼び出します。
      引数は「true」を設定します。

4.データベース接続時の処理

  1. ボタンの無効化と行の削除
    1. データベース接続時にもボタンの無効化を行います。
      データベース接続時には行の削除処理も行っているので、[サブルーチン(終了処理)]の処理を利用しまとめて設定します。
    2. 【接続1-9】[サブルーチン(終了処理)]を呼び出します。
      【接続1‐1】のすぐ下に設定します。
    3. [サブルーチン(終了処理)]のコンポーネントキーを「終了/初期化処理」に変更します。
    4. 【接続1-2】と【接続1-8】のプロジェクトテーブル、工程テーブル全行削除の処理は不要になったので、削除します。
注意ここでは行が選択されていないときのエラー回避 方法を複数紹介する意味で、ボタンの有効/無効を設定しています。
工程管 理アプリケーション作成チュートリアル6>編集用の行の追加・削除>編集用行の削除の処理のように[比較演算(>)]コンポーネ ントを用いて、選択状態のときだけ更新や削除の処理が実行されるように設定しても構いません。
画面作成例

[編集画面図9]

[編集画面図10]【接続7-1】、【接続7-2】の起動メソッド情報設定画面図は省略します。

[編集画面図11]※【接続2-3】の引数は「true」、【接続2-4】の引数は「false」で す。
【接続2-1】、【接続2-2】のメソッド情報設定画面図は省略します。

[編集画面図12]

[編集画面図13]