スクリプトを用いた主キーの拡張 (2) コピー登録時に枝番を付与する

最終更新日: 2023年1月30日

新規登録時に「見積No」項目を手動で入力する、とします。(このコード体系は利用者ごとに異なるものです。例では "M" + 0詰め3桁としています。)

なお「(隠し・元見積No)」「(隠し・枝番)」は実際は隠し項目とします。ここでは説明のため、読み込み専用として表示させています。

初回の登録(1)
初回の登録(2)

初回の登録時に、手入力した「見積No」を「(隠し・元見積No)」にコピーしています。また「(隠し・枝番)」に初期値 "1" をセットしています。

続いて、コピー登録ボタンをクリックします。
「見積No」にハイフンと3桁の数値を枝番として付与しています。

見積Noに枝番が付与される(1)
見積Noに枝番が付与される(2)

再度コピー登録を行うと、枝番が2となっていることがわかります。

枝番が増加する

定義方法

本サンプルで用意した「見積書」モデルは次のとおりです。

登録時のスクリプト

このスクリプトは新規登録とコピー登録の両方で呼び出されます。新規登録のみの処理は(スクリプトで使える暗黙変数)SCREENTYPE が insert かどうかで判定します。

if (SCREENTYPE==='insert') {
    QUOTATION.OLDNO = QUOTATION.QUOTATIONNO;
    QUOTATION.EDANO = 1;
}

コピー時のスクリプト

コピー登録ボタンクリック時、コピー元から値が転記されたあとに呼び出されます。コピーされた値を加工することができます。

  • 自身の「見積No」と同じ値をもつ見積書モデルを検索します。1つ以上見つかる可能性があるため、リストで受け取ります。
  • 枝番の降順でソートさせているため、リストの先頭が直近のデータとなっています。
  • 登録時に入力された「元見積No」に、0詰め3桁の枝番(の現在値)を付与したあと、枝番項目の値を1つ増やします。
var entityService = p.appctx.getBean("QUOTATIONEntityService");
var criteriaConverter = p.appctx.getBean("QUOTATIONCriteriaConverter");
var criteria = criteriaConverter.defaultCriteria();
var QUOTATIONMeta = Java.type("jp.jasminesoft.wagby.model.QUOTATION.QUOTATIONMeta");
var meta = new QUOTATIONMeta();
criteria.eq(meta.QUOTATIONNO, QUOTATION.QUOTATIONNO);
var OrderClass = Java.type("org.hibernate.criterion.Order");
var order = OrderClass.desc(meta.EDANO.name());
criteria.addOrder(order);
var list = entityService.find(criteria);
if (list.size() === 0) {
    return;
}
var OLD_QUOTATION = list.get(0);
QUOTATION.QUOTATIONNO = QUOTATION.OLDNO + "-" + ExcelFunction.LPAD(ExcelFunction.TOSTR(QUOTATION.EDANO), 3, "0");
QUOTATION.EDANO = OLD_QUOTATION.EDANO + 1;

関連するページ