サポート > リポジトリ > 業務ロジック > 一覧帳票出力後の更新
ja | en

帳票出力を実行後、呼び出されるスクリプトを紹介します。 R7.7

「帳票出力後」または「帳票出力後(一覧)」ボタン押下時の処理をスクリプトコードとして記述することができます。

図1 スクリプト記述欄

帳票出力の対象となったモデルの「帳票出力日」項目に値をセットするスクリプトは次のとおりです。

var entityService = p.appctx.getBean("CustomerEntityService");
try {
    var n_customer = entityService.findById(customer.customerid, true);
    n_customer.printdatetime = ExcelFunction.NOW();
    entityService.update(n_customer);
    stdout.println(n_customer);
} catch (e) {
    stdout.println(e);
}

このスクリプトは詳細画面・一覧画面のいずれにも適用できます。一覧画面の場合、帳票出力の対象データすべてに適用されます。

  • 更新処理を行うため、CustomerEntityService オブジェクトを利用します。サービスオブジェクトの詳細は「Service/Daoクラス、SQLを利用する」をお読みください。
  • サービスオブジェクトの findById メソッドを用いて、データベースから最新の状態を取得します。このとき、第二引数に true を設定することで、ロックをかけます。
  • 日付時刻型項目(ここでは customer モデルの printdatetime 項目)に、現在の日付時刻を設定します。ExcelFunction..NOW() は Wagby が提供する関数です。現在の日付時刻を返します。
  • 更新に失敗したときのことを想定して、全体を try-catch で囲っています。例えばロックに失敗したときなどは、catch 節が処理されます。

注意点

値の変更後、詳細画面(または一覧画面)に表示されるデータには、printdatetime 項目は更新前の値が表示されています。更新後ではありません。これは帳票出力が成功したタイミングで値が更新されますが、画面表示用のデータはその前に用意されているためです。

画面を再描画すると、更新された値を確認することができます。

整数型の項目 printcount を用意します。次のスクリプトは、帳票出力の都度、値を 1 つ増やすものです。

var entityService = p.appctx.getBean("CustomerEntityService");
try {
    var n_customer = entityService.findById(customer.customerid, true);
    n_customer.printcount = n_customer.printcount + 1;
    entityService.update(n_customer);
} catch (e) {
    stdout.println(e);
}

このスクリプトは詳細画面・一覧画面のいずれにも適用できます。一覧画面の場合、帳票出力の対象データすべてに適用されます。

  • 更新処理を行うため、CustomerEntityService オブジェクトを利用します。サービスオブジェクトの詳細は「Service/Daoクラス、SQLを利用する」をお読みください。
  • サービスオブジェクトの findById メソッドを用いて、データベースから最新の状態を取得します。このとき、第二引数に true を設定することで、ロックをかけます。
  • 整数型項目(ここでは customer モデルの printcount 項目)の、現在の値に一つ加えた値を設定します。項目 printcount の初期値を 0 としておいてください。(この初期値設定を行わない場合、標準の初期値は '-1' となっています。従って最初の実行結果は 1 ではなく 0 となります。)
  • 更新に失敗したときのことを想定して、全体を try-catch で囲っています。例えばロックに失敗したときなどは、catch 節が処理されます。

注意点

値の変更後、詳細画面(または一覧画面)に表示されるデータには、printdatetime 項目は更新前の値が表示されています。更新後ではありません。これは帳票出力が成功したタイミングで値が更新されますが、画面表示用のデータはその前に用意されているためです。

画面を再描画すると、更新された値を確認することができます。

複数の帳票パターンを用意している場合、どのボタンを押されたかによって処理を分岐させることができます。

ボタン押下によって、p.action に値がセットされています。この値を使って次のような条件分岐を行ってください。

if (p.action == "PrintCustomer_showListCustomer") {
...
}

開発のポイント

最初はスクリプトに

stdout.println(p.action);

などと記載し、どのボタンが押されたら、どのような値が p.action に格納されるかを調べておくとよいでしょう。

  • このスクリプトは一覧帳票出力において、チェックボックスで選択した複数のデータに対しても適用されます。
  • R7.8