「仕入の商品名を手で直したのに、保存したらマスタの名前に戻っている」 「別のアプリから転記した商品名が、開き直すと消えている」 「テストは全部通っているのに、業務担当者の画面だけ値が違う」
kintone のルックアップは、参照先アプリの値をフィールドにコピーして持つ便利な機能です。ただし、コピーされた項目(取得項目)は、保存のたびにマスタの値へ戻る動きをします。人が編集した値を残したい場合は、設計から変える必要があります。
この記事では、ルックアップの取得項目が元に戻る時の考え方と、上書き用フィールドの作り方、画面間の転記で見落としやすい点、確認手順をまとめます。
- ルックアップの取得項目は、保存のたびにマスタの値へ戻る前提で設計する
- 人が書き換えた値を残したいなら、取得項目とは別の「上書き用フィールド」に持つ
- 別画面へ値を運ぶ処理(モーダル選択・コピー)にも上書き用フィールドを含める
- テストは「値を直接投入して表示確認」ではなく、画面操作で経路を通して確認する
目次を開く
症状と原因
起きること
- ルックアップで商品コードを選ぶと、商品名などの取得項目が自動で入る
- 取得項目を書き換えて保存しても、再表示や再保存でマスタの値に戻る
取得項目は「参照先の値を写したもの」で、持ち主はあくまでマスタ側です。そのため、レコードを保存するたびに参照先の値で更新されます。
判断の目安
| やりたいこと | 向いている方法 |
|---|---|
| マスタの最新値をそのまま表示したい | ルックアップの取得項目をそのまま使う |
| 取引ごとに名称や単価を変えたい | 上書き用フィールドを別に持つ |
| 発注時点の値を固定して残したい | 上書き用フィールドか文字列フィールドにコピーして持つ |
直し方:上書き用フィールドを別に持つ
手順
- フォーム設定で、取得項目と同じ種類の「上書き用」フィールドを追加する(例: 商品名 → 商品名(上書き))
- 一覧や帳票で表示する時は、上書き用フィールドが空でなければそれを、空なら取得項目を使う
- 人が編集するのは上書き用フィールドだけにする
表示の切り替えをカスタマイズで行う例です。フィールドコードは自分のアプリの値に置き換えてください。
kintone.events.on('app.record.detail.show', (event) => {
const record = event.record;
const name = record.product_name_override.value || record.product_name.value;
console.log('表示に使う商品名:', name);
return event;
}); 見落としやすい点:画面間の転記
上書き用フィールドを作っても、別の画面へ値を運ぶ処理がそれを含んでいなければ、値は途中で消えます。たとえば次のような処理です。
- 検索用のモーダルで選んだレコードから、別アプリのレコードへ値をコピーする処理
- 「発注から仕入を作る」のような、別アプリへの転記処理
転記処理を作る時は、コピーするフィールドの一覧に上書き用フィールドを入れます。
const copyFields = [
'product_code',
'product_name',
'product_name_override', // 上書き用フィールドも運ぶ
]; 新しくフィールドを足したら、転記処理のコピー対象一覧を必ず見直す、と決めておくと漏れません。
確認方法:経路を通してテストする
ここが最大の落とし穴です。自動テストで上書き用フィールドの値を REST API で直接書き込み、表示だけ確認する作りだと、転記処理が値を運んでいるかは確認できません。テストがすべて成功しているのに、実際の画面では値が消えている状態になります。
合格条件は「色が付いた」ではなく「経路を通った」で決めます。
- 元の画面(例: 発注)で、上書き用フィールドの値を編集して保存する
- 画面操作で転記先(例: 仕入)のレコードを作る
- 転記先で、上書き用フィールドの値が入っていることを確認する
- 転記先を保存し直して、値が残っていることを確認する
この手順は、そのまま証跡(スクリーンショット)の撮影にも使えます。
まとめ
- ルックアップの取得項目は、保存のたびにマスタの値へ戻る
- 人が編集した値を残したい場合は、別の上書き用フィールドに持つ
- 別画面への転記処理にも、上書き用フィールドを含める
- テストは値の直接投入ではなく、画面操作で経路を通して確認する
よくある質問(FAQ)
取得項目を編集不可にせず、そのまま書き換えて運用できますか?
保存のたびにマスタの値へ戻るため、書き換えた値を残す用途には向きません。上書き用フィールドを別に持つ方法をおすすめします。
上書き用フィールドが空の時はどうなりますか?
表示側の処理で取得項目を使う形にすれば、マスタの値がそのまま表示されます。
転記処理を直したのに値が来ません。何を確認しますか?
転記先のフィールドコードが合っているか、コピー対象の一覧に上書き用フィールドが入っているかを確認します。あわせて、転記元のレコードが保存済みかも見てください。
自動テストが通っているのに不具合が出るのはなぜですか?
値を直接投入するテストは、画面間の転記を通らないためです。経路を通す確認を1本は用意してください。
