一覧帳票出力後の更新

最終更新日: 2021年12月15日
R8 | R9

定義方法

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

図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);
    print(n_customer);
} catch (e) {
    print(e);
}

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

注意点

値の変更後、詳細画面(または一覧画面)に表示されるデータには、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) {
    print(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") {
...
}

開発のポイント

最初はスクリプトに

print(p.action);

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

仕様

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