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

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

8.データ追加部の作成

1.この章での完成画面

 『工程管理アプリケーション作成チュートリアルⅤ』までの設定では、既にDB内に登録されたデータを表示していました。
ここでは新規にデータベース内にデー タを追加できるように画面を作成し機能を設定しま す。
 

  • プロジェクト追加 
    1. プロジェクトの追加
    2. 3つのフィールドに入力したデータをprojectテーブルに追加します。
      重複した「受注番号」が登録されないように、検索をして重複確認をしてからInsert文で追加処理を行います。

  • 工程の追加
    1. 工程追加テーブル
    2. テーブルで追加工程の入力作業を行います。
      1. 日時選択ダイアログの表示 
        「開始予定日時」と「終了予定日時」の列ヘッダーをクリックすると[日時選択ダイアログ]が表示され、選択行にダイアログ で選択された日時が設定されます。
      2. 作業時間や終了日時の自動計算
        作業時間と開始予定日時を入力または更新すると、終了予定日時を計算してセルに設定します。
        また、作業時間と終了予定日時を入力または更新すると、開始予定日時を計算してセルに設定します。
    3. 編集行の追加/削除
    4. ボタンを押して行を追加できます。
      行追加時に、受注番号フィールドに入っている受注番号を自動的にセルに設定します。
      また、余分に追加した行を削除できます。
    5. 工程の一括追加
    6. テーブルに入力した工程は[データベースアクセス]コンポーネントのメソッドで一括追加します。

  • メニューの追加
    1. データ追加画面はメインフレームとは別にもう一つの[フレーム]を追加して作成します。
    2. サブフレームであるデータ追加画面を表示できるように[メニュー]、[メニューアイテム]を追加します。

8.1プロジェクト登録機能の作成

ここでは新規にデータベースにデータを登録できるように、画面を作成し機能を設定しま す。
最初にプロジェクトの登録部分を作成します。

1.画面の作成

コンポーネント追加
  1. 新規にGUI複合コンポーネントを追加します。
    上位階層の編集領域で右クリック>複合コンポーネント作成>GUI複合コンポーネントを選択します。
    複合コンポーネント内に入り、コンポーネント名称を「データ追加部」に変更します。
  2. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
    (数が多いので、画面編集画面で新規コンポーネント一括追加を使うと便利です)
    基本操 作2>コンポーネント一括追加
  3. コンポーネント名 必要数 カテゴリー コンポーネントキー/テキスト
    パネル 1 画面構成部品>パネル プロジェクト
    ラベル 3 画面構成部品>ラベル 受注番号
    品名
    納期
    テキストフィールド 画面構成部品>テキスト 受注番号
    品名
    日付入力フィールド 画面構成部品>テキスト 納期
    ボタン 1 画面構成部品>ボタン プロジェクト追加
画面編集
複合コンポーネント内の画面編集画面に入ります。
  1. 複合コンポーネント画面編集画面にパネルを追加します。
  2. 画面編集画面のツリー領域の[パネル]名をクリックします。
    編集領域がパネルの領域に変わります。
  3. [ラベル]、[フィールド]類、[ボタン]をパネルに配置します。
    配置方法を「手動配置」に変更し、画面作成例に倣ってドラッグして移動します。
コンポーネント追加
  1. 上位階層で[フレーム]を追加します。
  2. コンポーネント名 必要数 カテゴリー タイトル
    フレーム 1 画面構成部品>フレーム データ追加
画面編集
上位階層の画面編集画面に入ります。
  1. 新しく追加した[フレーム]上に[データ追加部]複合コンポーネントを配置します。
  2. [実行(設定可)]ボタンで実行し、[フレーム]を右クリック>[タイトル...]でタイトルを設定し ます。
画面作成例

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

1.メニューの追加

コンポーネント追加
  1. 上位階層にコンポーネントを追加します。
  2. コンポーネント名 必要数 カテゴリー テキスト
    メニュー 2 画面構成部品>メニュー DBデータ編集
    接続設定画面表示
    メニューアイテム 2 画面構成部品>メニュー データ追加
    接続設定画面表示
  3. [メニュー]、[メニューアイテム]のテキストは属性情報設定画面から変更しておきます。
画面編集
    画面編集画面に入ります。
  1. 階層ツリー領域の[フレーム(工程管理)]上で右クリックし、コンポーネント追加>[メニュー]を選択します。
  2. 階層ツリー領域の[メニュー]上で右クリックし、コンポーネント追加>[メニューアイテム]を選択します。
    画面編集画面例を参考 に「DBデータ編集」メニューには「データ追加」メニューアイテムを、「接続設定画面表示」メニューには「接続設定画面表示」メニューアイテムを追加します。
接続処理設定
    ※ここで、今まで設定していなかった[データベース接続部]のフレーム表示処理も一緒に設定します。
  1. フレーム表示の設定
    1. 【接続10-1】[メニューアイテム(データ追加)]を選択したとき、[フレーム(データ追加)]を表示します。
    2. 【接続11-1】[メニューアイテム(接続設定画面表示)]を選択したとき、接続情報フレームを表示します。
  2. フレームの終了設定
    1. アプリケーション終了イベントを接続イベントとし、アプリケーション終了時にフレームを閉じるようにします。
    2. 【接続3-8】[フレーム(データ追加)]を閉じます。
    3. 【接続3-9】接続情報フレームを閉じます。
画面編集画面例
メニュー設定例

[編集画面図1]※起動メソッド情報設定画面図は省略します。引数の設定はありません。

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

projectテーブルとtaskテーブルは受注番号を基に関係性があるため、同じ受注番号があ ると、無関係なデータと関連付けられる恐れがあります。
プロジェクトの追加の前に、追加したい受注番号が既にprojectテーブルに登録されていないか検索し、確認します。
重複があったら、メッセージを表示します。

1.受注番号検索SQL文の実行

コンポーネント追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
    コンポーネント名 必要数 カテゴリー コンポーネントキー
    文字列格納変数 1 処理部品>変数 検索SQL
    イベント生成 処理部品>イベント SQL実行
    テーブル格納変数 処理部品>変数 検索結果
    等価演算(=) 処理部品>条件制御 重複確認
    メッセージダイアログ 画面構成部品>ダイアログ 重複通知
メソッドの公開
  1. 複合コンポ―ネント内の以下のメソッドを公開します。
  2. コンポーネント名 メソッド 変更メソッド名
    テーブル格納変数(検索結果) テーブルを設定する(PFObjectTable) 検索結果テーブルを設定する
接続処理設定
    ボタンを押したら、追加したい受注番号が既に登録されていないか検索を実行します。
  1. 検索文字列の設定
    1. 【接続1-1】[文字列格納変数(検索SQL)]に検索文字列の雛形を設定します。
      「select label from project where label="JUCHU" 」を設定します。
    2. 【接続1-2】雛形の文字列を置換えます。
      「JUCHU」と[テキストフィールド(受注番号)]のテキストを置換えます。
      [文字列格納変数(検索SQL)]内の文字列は、例えば 「select label from project where label=’A01’ 」となります。
  2. イベントの発生
    1. 【接続1-3】[処理要求イベント]を発生させます。
      引数0には[文字列格納変数(検索SQL)]の文字列を取得し設定します。
      引数1には「1」を設定します。
    2. 【接続2-1】イベントを伝播させます。
      複合コンポーネントを接続先とし、イベントを伝播させます。
  3. データベースへの接続・検索
    1. 上位階層に移動し、データベースに接続します。
    2. [データ追加部]を右クリックし、[イベント処理追加]>[処理要求イベント]を選択します。
    3. 【上位接続12-1】データベースに接続します。
    4. 【上位接続12-2】検索SQLを実行します。
    5. 【上位接続12-3】検索結果テーブルにテーブルデータを設定します。
    6. 【上位接続12-4】データベースとの接続を切断します。 
    7. 以上の接続は【接続9】([積上棒グラフ表示部]の処理要求イベント処理)をコピーして、貼り付けると簡単です。
      【接続12-3】に当たる処理は接続先が[積上棒グラフ表示部]複合コンポーネントになっているので、右クリックして接続コン ポーネント 選択で[データ追加部]に変更します。
      メソッドも消えてしまうので、設定し直します。

  4. テーブル行数による演算
  5. 受注番号を検索して、該当するデータがある場合は1行の、該当するデータが無い場合は0行のテーブルデータが検索結果として取得され、変 数に設定されます。
    テーブル行数が0行かどうかで、以降の処理を条件分けします。
    1. 【接続3-1】等価演算を行います。
      テーブル行数が「0」かどうか演算します。
    2. 【接続4-1】重複があるとき、メッセージダイアログを表示します。
      既にデータがあるとき(検索結果が0行でないとき)ダイアログを表示します。
      イベント番号0(演算結果がfalseのとき)を設定します。
    3. メッセージダイアログのコンポーネント属性情報で、Messageの欄に「この受注番号は既に登録されてい ま す」と設定します。

確認ここまで設定して重複する受注番号(例:A01)を[テ キストフィール ド]に入力し、メッ セージダイアログが表示されることを確認してください。

メッセージダイアログ画面例

[編集画面図3]

 

[編集画面図4]【接続12-3】以外の起動メソッド情報画面図は省略します。

1.Insert文の作成

projectテーブルへのデータの追加には[データベースアクセスコンポ―ネント]でInsertSQL文を実行します。
参考: デー タ ベースの一般的な説明>基本的なSQL文
コンポーネント 追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    文字列格納変数 処理部品>変数 InsertSQL
    サブルーチン 処理部品>サブルーチン Insert文作成
接続処理設定
  1. 検索文字列の設定
    1. [サブルーチン]を先頭に処理を作成します。
    2. 【接続5-1】[文字列格納変数(検索SQL)]にInsertSQL文字列の雛形を設定します。
      「insert into project (label, product, delivery) values('JUCHU', ’ HINMEI', 'NOKI') 」を設定します。
    3. 【接続5-2】雛形の文字列を置換えます。
      「JUCHU」と[テキストフィールド(受注番号)]のテキストを置換えます。
    4. 【接続5-3】雛形の文字列を置換えます。
      「HINMEI」と[テキストフィールド(品名)]のテキストを置換えます。
    5. 【接続5-4】雛形の文字列を置換えます。
      「NOKI」と[日付フィールド(納期)]の表示文字列を置換えます。
      [文字列格納変数(InsertSQL)]内の文字列は、例えば 「insert into project (label, product, delivery) values('A05', ’A05', '2023/12/12')  」となります。
    6. 【接続4-2】[サブルーチン(Insert文作成)]を呼び出します。
      [等価演算(=)(重複確認)]の処理完了イベントに接続します。
      イベント番号1(演算結果が「true」のとき)を設定することで、重複する受注番号が存在しないとき呼び出されます。
    確認ここまで作成して、重複しない受注番号を 設定しボタンを押したとき[文字列格納変数(InsertSQL)]内の文字列が置換わることを確認します。
  2. イベントの発生
    1. 【接続5-5】データ更新イベントを発生させます。
      [文字列格納変数(InsertSQL)]の文字列を引数0と引数1に設定します。
      引数2(イベント番号)は「1」を設定します。
    2. 【接続6-1】データ更新イベントを伝播します。
      [イベント生成(SQL実行)]にデータ更新イベントを追加し、伝播します。
  3. Insert文の実行
    1. 上位階層に移動して、データ更新イベントを発生させ、接続処理を追加します。
    2. [データ追加部]からデータ更新イベントを発生させます。
      [データ追加部]を右クリック>イベント処理追加>データ更新イベントを選択します。
    3. 上位階層【接続13-1】データベースに接続します。
    4. 上位階層【接続13-2】更新SQLを実行します。
    5. 上位階層【接続13-3】データベースとの接続を切断します。
    6. ※【13-1】~【13-3】の接続を【上位接続6】([ガントチャート表示部]データ更新イベント処理)からコピーして貼り付けると 簡単です。
      メソッドの変更はありません。

確認 [ボタン(プロジェクト追加)]を押して、エラーが発生しなければ データが追加されています。
メインフレーム(工程管理)のテーブル表示画面でプロジェクトが追加されているのを確認してください。

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

[編集画面図6]【接続13-1】と【接続13-3】の起動メソッド情報設定画面図は省略しています。

コンポーネント追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    サブルーチン 2 処理部品>サブルーチン 開始処理
    終了処理
    カレンダー 1 処理部品>システムまたは
    処理部品>ユーティリティ
    初期日付設定
接続処理設定
  1. 初期日付の設定
  2. InsertSQLを実行したとき、日付に空白文字列を設定しようとすると、エラーが発生します。
    なるべくエラーを回避できるように、画面を開いたときに[日付入力フィールド]に初期日付が設定されるようにします。
    1. 【接続7-1】カレンダーを現在日時に設定します。
    2. 【接続7-2】カレンダーの日時に日数を加算します。
      7日後の日付に設定することにします。
    3. 【接続7-3】[日付入力フィールド(納期)]に[カレンダー]からデータを設定します。
  3. 終了処理の設定
  4. 各フィールドの値をクリアします。

    1. 【接続8-1】[テキストフィールド(受注番号)]に空白文字列を設定します。
    2. 【接続8-2】[テキストフィールド(受注番号)]に空白文字列を設定します。
    3. 【接続8-3】[日付入力フィールド(納期)]にNULL値を設定します。
  5. メソッドの公開
    1. 複合コンポーネント内の以下のメソッドを公開します。
    2. コンポーネント名 メソッド 公開メソッド名
      サブルーチン(開始処理) 処理を呼び出す() 開始処理を呼び出す
      サブルーチン(終了処理) 処理を呼び出す() 終了処理を呼び出す
  6. 処理の呼び出し
  7. 上位階層に戻り、開始と終了の処理を呼び出します。

    1. 上位階層【接続10-2】メニューアイテムをクリックしたとき、開始処理を呼び出します。
      ドラッグして処理の順番を入替え、【接続10-1】「フレームを表示する」処理より先に行われるようにします。
    2. 上位階層【接続14-1】[フレーム(データ追加)]を閉じたとき、終了処理を呼び出します。

[編集画面図7]

[編集画面図8]

8.2工程登録機能の作成

[テーブル(工程)]に工程予定表を作成し、受注番号とともに、データベースのtaskテーブルに追加します。

1.画面作成

コンポーネント追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
    ※工程テーブルは[テーブル表示部]からコピーして、複合コンポーネント内に貼り付けます。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー/テキスト
    パネル 1 画面構成部品>パネル 工程
    ボタン 3 画面構成部品>ボタン 編集行追加
    選択行削除
    データベースに追加
    テーブル 1 画面構成部品>テーブル 工程
画面編集
  1. パネルの配置
    1. 画面編集画面で[パネル]を追加します。
      追加後、画面編集画面左側の階層表示領域で[パネル]名をクリックすると編集領域が[パネル]の領域に変わります。
      [テーブル]と[ボタン]を画面作成例を参考に「手動配置」で配置します。
    2. 複合コンポーネントの領域で2つの[パネル(プロジェクト)]と[パネル(工程)]を「縦方向整列」または「手動配置」で配置しま す。
  2. ボタン名の変更
    「実行(設定可)」ボタンで実行して3つの[ボタン]のテキストを変更します。
  3. テーブル列の追加
    [テーブル表示部]からコピーした[テーブル(工程)]の列の最後に文字列型で一列追加し、列名を「受注番号」とします。
  4. テーブルの選択モードの設定
  5. [テーブル]>[選択方法]>[行選択]を選びます。
画面作成例

1.編集用の行の追加

接続処理設定

  1. 行の追加
    1. 【接続9-1】行を追加します。
      データ追加用の行を追加します。
    2. 【接続9-2】追加された行に、受注番号を設定します。
      入力を簡単にするために[テキストフィールド( 受注番号)]からテキストを取得し、セルに設定します。
      引数1の行の位置にはテーブルの最終行の位置を指定します。

2.編集用行の削除

間違って多く追加してしまったなどの不要な行は削除できるようにします。
選択した行を削除しますが、選択されていない時に行の削除を実行するとエラーが発生するので、行が選択されているときのみ処理を行うようにし ます。

コンポーネント追加

  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    比較演算(>) 1 処理部品>条件制御 選択行確認

接続処理設定

  1. 選択行の削除
    1. 【接続10-1】選択行位置を演算します。
      選択されていないときにテーブルの行選択位置を取得すると「-1」が取得されます。
      選択行位置が「-1」より大きいか演算します。
    2. 【接続11-1】選択行を削除します。
      イベント番号1(演算結果がtureのとき)を設定します。
画面作成例

[編集画面図9]

入力したテーブルデータをデータベースのtaskテーブルに追加します。

1.テーブルデータを追加するメソッド

[データベースアクセス]のメソッドに、 データをテーブルごと追加できる「InsertRowDirectryByQuery(String,PFObjectTabel)」があります。
このメソッドを使って、[テーブル(工程)]に入力したデータをデータベースのtaskテーブルに追加します。
列の数や順番は追加先のデータベーステーブルと違っていても構いませんが、列名は一致している必要があります。

メソッドの公開
  1. [データべ―ス接続部]複合コンポーネント内のメソッドを公開します。
  2. コンポーネント名 メソッド 公開メソッド名
    データベースアクセス InsertRowDirectryByQuery(String,PFObjectTabel) データベースにテーブルデータを追加する

2.テーブルデータの追加

コンポーネント追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    テーブル格納変数 1 処理部品>変数 追加用データ
    文字列格納変数 1 処理部品>変数 列名リスト
    イベント生成 1 処理部品>イベント データ追加
接続処理設定

追加用のテーブルデータの列名を「task」テーブルに合わせて設定して、イベントを発生させます。

  1. 追加テーブルデータの準備
    1. 【接続12-1】[テーブル格納変数(追加用データ)]にテーブルデータを設定します。
    2. 【接続12-2】[文字列格納変数]に列名の雛形を設定します。
      列名のリストのデータを取得したいので、列名を区切り文字と一緒に並べて記述します。
      「process/workingTime/dateStart/dateEnd/isCompleted/projectLabel」 を変数に設定します。
      間に空白を入れないでください。
      次のメソッドで区切り文字で分割してリストにします。
    3. 【接続12-3】区切り文字による分割した文字列のリストを取得します。
      引数に「/」を設定します。
    4. 【接続12-4】[テーブル格納変数(追加用データ)]に列名のリストを設定します。
  2. イベントの発生
    1. 【接続12-5】データ更新イベントを発生させます。
      引数0(対象データ)にテーブル名の「task」を、引数1(更新データ)にテーブルデータを設定します。
      引数2(イベント番号)に「2」を設定します
    2. 【接続13-1】データ更新イベントを伝播させます。
      イベントを上位階層に伝播します。
  3. 上位階層での設定
  4. 接続元イベントは[データ追加部]のデータ更新イベントです。
    データ更新イベントが複数の処理から発生しているので、先に設定してあった【接続13-2】にもイベント番号を設定します。

    1. 上位階層【接続13-4】DBのテーブルにデータを追加します。
      公開したメソッド「データベースにテーブルデータを設定する」を選択します。
      引数0のテーブル名はイベント対象データから、引数1のテーブルデータは更新データから取得します。
      イベント番号に「2」(【接続12-5】の処理で引数2に設定した番号)を設定します。
      ドラッグして【接続13-3】(データベースとの接続を切断する)より先に実行されるように、順番を入替えます。
    2. 上位階層【接続13-2】イベント番号を設定します。
      イベント番号1を設定し ます。
      これまでは[データ追加部]からデータ更新イベントが発生するのは、一つの処理からだけなので区別の必要はなく、イベント番号の設定 は不 要でした。
      複数の処理からデータ更新イベントを発生させたので、条件分けのためにイベント番号を設定します。

確認ここまで設定すると、taskテーブルにデータが追加できる ようになります。

[編集画面図10]

[編集画面図11]接続元は[データ追加部]です。
【接続13-4】以外の起動メソッド情報設定画 面図 は省略します。

8.3入力時のデータ設定機能

ここまででテーブルデータのデータベースへの追加はできるようになりましたが、さらに入力作業がしやすいように入力機能を工夫します。

1.日時選択ダイアログの表示

[テーブル]の開始予定時刻、終了予定時刻列のヘッダーをクリックすると[日時選択ダイアログ]を表示するようにします。

コ ンポーネント追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    日時選択ダイアログ 1 画面構成部品>ダイアログ
    整数(Integer)格納変数 1 処理部品>整数 選択列番号
    イベント生成 1 処理部品>イベント 日時ダイアログ表示
    比較演算(>) 1 処理部品>条件制御 行選択確認
接続処理設定
  1. 列ヘッダーがクリックされた列位置の取得
    1. 【接続14-1】テーブルヘッダーがマウスクリックされたX座標を基に列番号を取得します。
      イベント番号は0(テーブルヘッダー上でマウスクリックされたとき)を設定します。
    2. 【接続14-2】後で使うので列番号を変数に格納しておきます。
      イベント番号は0を設定します。
    3. 【接続14-3】列番号を引数(イベント番号)としてアクションイベントを発生させます。
      引数に【接続14-1】で取得した列番号を設定し、イベントを発生させます。
      後で設定する[イベント生成]の接続先のイベント番号となります。
      イベント番号は0を設定します。
  2. 日時選択ダイアログの表示
    1. 【接続15-1】日時選択ダイアログを表示する前に、時刻部分を設定しておきます。
      初期設定値として「9時0分0秒」に設定することにします。
      引数0に時間として「9」、引数1に分数「0」、引数2に秒数「0」を固定値で設定します。
      処理を設定したい列番号(2、3)をイベント番号として設定します。
    2. 【接続15-2】日時選択ダイアログを表示します。
      処理を設定したい列番号(2、3)をイベント番号として設定します。
  3. 選択日時の設定
    1. 【接続16-1】ダイアログで日時が選択されたら、[テーブル(工程)]の行が選択されているか[比較演算(<)]で演 算し ます。
      イベント番号1(適用ボタンが押されたとき)を設定します。
    2. 【接続17-1】行が選択されているとき、セルの値を設定します。
      引数2の列位置は[整数(integer)格納変数(選択列位置)]から取得します。
      イベント番号1(演算結果がtrueのとき)を設定します。
確認ここまで設定すると日時選択ダイアログで日付を入力できるよう にな ります。
画面作成例

[編集画面図12]

1.終了日時の自動設定

作業時間と開始日時を入力すると終了日時を自動的に計算し、設定するようにします。

コ ンポーネント追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    イベント生成 1 処理部品>イベント 時間設定
    ファンクション 1 処理部品>サブルーチン 終了日時設定
    NULL判定 処理部品>条件制御 作業時間
    開始日時
    カレンダー 処理部品>ユーティリティー 時間設定
接続処理設定
  1. アクションイベントの発生
  2. 接続元は[テーブル(工程)]のデータ更新イベントです。
    1. 【接続18-1】テーブルセルが更新されたら、アクションイベントを発生させます。
      「開始予定日時」または「作業時間」列のセルが更新されたときだけ処理が行われるように、更新列番号を引数としてイベントを発生 させま す。
      イベント番号は0(セルが更新されたとき)を設定します。
  3. セルの値のNULL判定
  4. セルの値がNULLのときに、その値を用いて[カレンダー]で処理を行うとエラーが発生するので、先にNULLでないか 判定をします。
    1. 【接続19-1】指定セルの値を取得します。
      作業時間の列のセルの値を取得します。
      「開始予定日時」または「作業時間」列のセルが更新されたときだけ処理が行われるように、イベント番号1、2(更新列番号に相当)を 設定 します。
    2. 【接続19-2】指定セルの値を取得します。
      開始日時列のセルの値を取得します。
      「開始予定日時」または「作業時間」列のセルが更新されたときだけ処理が行われるように、イベント番号1、2を設定します。
    3. 【接続19-3】ファンクションを呼び出します。
      取得した2つの値を引数としてファンクションの処理を呼び出します。
      引数の取得方法は「メソッド処理結果」とし、「メソッド/値」欄の1番目の値を引数0に、2番目の値を引数1に設定します。
      イベント番号1、2を設定します。
    4. 【接続20-1】開始日時がNULLかどうか判定します。
      [ファンクション]を接続元として、第一引数の作業時間がNULLかどうか演算します。
    5. 【接続21-1】作業時間がNULLかどうか判定します。
      作業時間がNULLでないときは、開始日時がNULLかどうか演算します。
      イベント番号0(演算結果がfalseのとき)を設定します。
  5. 終了予定日時の設定
    1. 【接続22-1】[カレンダー]に開始日時を設定します。
    2. 【接続22-2】[カレンダー]で作業時間を加算します。
    3. 【接続22-3】終了予定日時のセルに加算した結果を設定します。
確認ここまで設定すると、作業時間と開始予定日時の両方が入力されたとき に、終了予定日時が自動的に設定されます。

[編集画面図13]【接続18】の接続元は[テーブル(工程)]です。

8.2.2までで作業時間と開始予定日時が分かれば、終了予定日時が自動的に計算されて入力されます。
ここでは、終了予定日時を入力または変更したとき作業時間が入力されていれば、開始時間を自動的に計算するようにします。

1.作業時間計算の処理

コンポーネント追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。
    ※[ファンクション]と[NULL判定]は、先に追加してある[ファンクション(終了時間設定)]と2つの[NULL判定]をコピーして 貼り 付けると簡単です。
  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    ファンクション 1 処理部品>サブルーチン 開始日時設定
    NULL判定 処理部品>条件制御 作業時間NULL?
    終了日時NULL?
    整数(BigInteger)格納変数 1 処理部品>変数 ミリ秒
接続処理設定
  1. セルの値のNULL判定
    1. 【接続19-1】既に設定してある処理「指定セルの値を取得する(int,int)」にイベント番号「3」を追加設定します。
      ※メソッド処理に変更はありません。
      これで「終了予定日時」列が変更されたときも、開始日時取得の処理が行われるようになります。
    2. 【接続19-4】指定セルの値を取得します。
      「終了予定日時」の列のセルの値を取得します。
      列のセルが更新されたときだけ処理が行われるように、イベント番号3を設定します。
    3. 【接続19-5】[ファンクション(開始日時設定)]を呼び出します。
      取得した2つの値を引数としてファンクションの処理を呼び出します。
      引数の取得方法は「メソッド処理結果」とし、「メソッド処理結果選択」窓の1番目の値(作業時間列の取得値)を引数0に設定します。
      引数1に「メソッド/値」欄の4番目の値(終了日時列の取得値)を設定します。
      イベント番号3を設定します。
    4. 【接続23-1】開始日時がNULLかどうか判定します。
      [ファンクション(作業時間設定)]を接続元として、第1引数の開始日時がNULLかどうか演算します。
    5. 【接続24-1】作業時間がNULLかどうか判定します。
      開始日時がNULLでないときは、第2引数の終了時間がNULLかどうか演算します。
      イベント番号0(演算結果がfalseのとき)を設定します。
  2. 時間数の設定
    1. 【接続25-1】[カレンダー]に終了日時を設定します。
    2. 【接続25-2】[カレンダー]で終了日時から作業時間を引き算します。
      引数に作業時間数を設定します。
    3. 【接続25-3】開始予定日時のセルに計算した結果を設定します。
注意!!ここまで設定すると、作業時間と終了日時が分かれば開始日時が設定 でき るようになりましたが、例えば終了予定日時を更新すると作業時間のセルが更新され、また終了予定日時が更新されるというように更新が連鎖することに なります。
この後の項のイベント伝播制御処理を設定してから実行するか、「8.3.2」か「8.3.3」のどちらか一方の処理だけ設定するようにしてくださ い。

[編集画面図14]【接続19-1】~【接続19-3】の起動メソッド処理設定画面図は省略します。

[編集画面図15]

1.イベント伝播制御の設定

前項までの処理のままでは、[テーブル(工程)]のデータ更新イベントが、無限に発生する可能性があります。
[イベント伝播制御]コンポーネントは、イベント制御モードを「false」または「true」にすることによって、イベントを伝播するかし な い か切り替えることができます。
[テーブル]のデータ更新イベント処理に[イベント伝播制御]を設定し、セルの値を設定する前後でイベント制御モー ドを変更します。

コンポーネント追加
  1. 複合コンポーネント内に以下のコンポーネントを追加し、コンポーネントキーを変更します。

  2. コンポーネント名 必要数 カテゴリー コンポーネントキー
    イベント伝播制御 1 処理部品>イベント
接続処理設定
  1. データ更新イベントへの[イベント伝播制御]の接続
    1. 【接続18‐2】[テーブル]のデータ更新イベントに[イベント伝播制御]を接続します。
      メソッド「受け取ったイベントを発生させる(PFEvent)」で、引数を「イベント」とします。
    2. 【接続26-1】今まで[テーブル]のデータ更新イベントに接続されていた[イベント生成]の処理【接続18-1】を切り取り、 [イ ベント伝播制御] の データ更新イベントにそのまま貼り付けます。
      ※メソッド、イベント番号ともに変更はありません。
      [イベント伝播制御]を介していますが、イベント伝播無視モードが「false」のときは今までと同様、[テーブル(工程)]の更新イベ ントが発生したときアクションイベントを発生させます。
  2. セル値設定処理前後での[イベント伝播制御]設定
    1. 【接続22-4】イベント伝播無視モードを「true」にする。
      接続元は[NULL判定(作業時間)]です。
      イベントが発生しても伝播されなくなります。
      【接続22-3】より先に行われるようにドラッグして処理の順番を入替えます。
    2. 【接続22-5】イベント伝播無視モードを「false」にする。
      イベントが再び伝播されるようになります。
    3. 【接続25-5】イベント伝播無視モードを「true」にする。
      接続元は[NULL判定(終了時間NULL?)]です。
      イベントが発生しても伝播されなくなります。
      【接続22-4】より先に行われるようにドラッグして処理の順番を入替えます。
    4. 【接続25-6】イベント伝播無視モードを「false」にする。
      イベントが再び伝播されるようになります。

確認ここまで設定すると、開始日時と終了日時が分かると作業時間 が自 動計算されるようになります。

[編集画面図16]【接続18】の接続元は[テーブル(工程)]です。
【接続26-1】の起動メソッド情報設定画面図は省略します。

[編集画面図17]【接続22】の接続元は[NULL判定(開始時間)]です。
【接続22-3】の起動メソッド情報設定画面図は省略します。

[編集画面図18]【接続25】の接続元は[NULL判定(終了日時NULL?)]です。
【接続25-3】の起動メソッド情報設定画面図は省略します。

1.終了処理の設定

接続処理設定
  1. 終了処理
    1. 【接続8-4】[テーブル(工程)]の全行を削除します。
    2. 【接続8-5】[イベント伝播制御]のイベント伝播無視モードを「false」にします。
      終了時には「false」(イベントを伝播する状態)に戻るように設定します。

[編集画面図19]【接続8】の接続元は[サブルーチン(終了処理)]です。

工程管理アプリケーション作成チュートリ アルⅦ へ