単一キーで絞込機能を応用した枝番
最終更新日: 2022年2月25日
R8 | R9
「複合キーによる枝番」を先に読んでおいてください。「枝番」を複合キーの一部として設定する方式は、このページに記載している内容よりも設定が容易です。
ここでは複合キーではなく、単一キーで枝番機能を設定する方法を説明します。「他モデルの参照 > 他項目の値で選択肢を絞り込む」機能を応用します。
ここで説明する設定は次の仕様に基づいています。
主キーと枝番に関係する項目は4つあります。
主キーであるため自動的に必須指定となります。また、入力時は隠し項目になります。
IDseq 項目の値をベースとし、max_branchid の値が 0 より大きい場合、"-" の後に max_branchid の値を付与します。これが枝番部分になります。
ID値を数字に変換したものを保持します。このとき、枝番部 ("-" で始まる) があれば、それを取り除きます。
TOINT は引数の文字列を数値に変換します。
特定の「ID順序部」をもったデータ群について、最大枝番の値を保持するように設定します。
現在の枝番の値を保持します。
最大枝番が空白の場合は 1 を、すでに存在する場合は +1 した値を保存するようにします。
最初の設定では、システムが内部で利用する上記項目を「隠し」ではなく「読み取り専用」とするとよいでしょう。テストによって枝番の動きが把握できます。動作確認できたところで「隠し」としてください。
枝番部をゼロ詰め3桁表記とした例です。
ID項目の登録時の自動計算式を次の通りに変更します。
枝番部をアルファベット表記 ("A", "B", "C",...) かつハイフンなしとした例です。
IDの登録時の式を次のようにA1FORMAT関数を使うように変更します。
A1FORMAT はExcelの列名ルールに準拠して数値をアルファベットに置き換えます。
ID順序部の登録時の式を次のように正規表現で判定するように変更します。
式の組み合わせではなく、スクリプトで実現することもできます。[詳細...]
この説明を読む前に
仕様と例
仕様
動作
定義方法
項目名
項目ID
型
主キー
順序
DB保存
入力時隠し
出力時隠し
登録時の計算
その他
ID
ID
文字列
○
○
○
-
-
[後述]
コピー登録時は順序を使わない
ID順序部
IDseq
数値
-
-
○
○
○
[後述]
-
最大枝番
max_branchid
モデル参照
(自分自身のbranchid)-
-
-
○
○
-
絞込 [後述]
枝番
branchid
数値
-
-
○
○
○
[後述]
-
ID
IF(EXACT(SCREENTYPE(),"copy"),
CONCATENATE(
TOSTR(${IDseq}),
IF(${max_branchid}>0,
CONCATENATE("-",TOSTR(${max_branchid})),
""
)
),
${ID}
)
ID順序部
入力時・出力時とも隠し項目とします。
IF(EXACT(SCREENTYPE(),"copy"),
${IDseq},
TOINT(
LEFT(${ID},
IF(FIND("-", ${ID})>0,
FIND("-", ${ID})-1,
LEN(${ID})
)
)
)
)
LEFT は引数の文字列の左から何番目までを取得します。
FIND は指定された文字が何番目に含まれているかを返します。
LEN は文字列の長さを返します。
最大枝番
モデル参照の設定では、「ID順序部」項目による絞込みを設定します。
「出力制御 > 一覧画面 > 共通 > 隠し項目にする」も同様にチェックを入れます。
枝番(非表示)
IF(ISBLANK(${max_branchid}),
1,
${max_branchid#content}+1
)
注意
枝番をゼロ詰め3桁で表現する
例
定義方法
IF(EXACT(SCREENTYPE(),"copy"),
CONCATENATE(
TOSTR(${IDseq}),
IF(${max_branchid}>0,
CONCATENATE("-",TEXT(${max_branchid}, "000")),
""
)
),
${ID}
)
枝番をアルファベット表記かつハイフン区切りなしとする
例
定義方法
IDの設定
IF(EXACT(SCREENTYPE(),"copy"),
CONCATENATE(
TOSTR(${IDseq}),
IF(${max_branchid}>0,
A1FORMAT(${max_branchid}),
""
)
),
${ID}
)
ID順序部の設定
IF(EXACT(SCREENTYPE(),"copy"),
${IDseq},
TOINT(
LEFT(${ID},
IF(FINDRE("[A-Z]", ${ID})>0,
FINDRE("[A-Z]", ${ID})-1,
LEN(${ID})
)
)
)
)
関連するページ