下記、コードのどこをどのように修正したらよいか、教えてください
※フィールドコードはJSおよびKintoneで一致しています。下記は(仮)の情報です。
【やりたいこと(目的)】
◆CSVファイルを読み込んだ際に、以下の自動入力処理を実現したい
- 「入力フィールドA」の値に応じて、「判定フィールドA」の値を自動で入力する
- 「入力フィールドB」の値に応じて、「判定フィールドB」の値を自動で入力する
【現状の課題】
- CSVファイルを読み込んでも、自動入力処理が実行されていない
- レコードの詳細画面を開いても、「判定フィールドA」「判定フィールドB」に値が反映されていない
(() => {
'use strict';
const FIELD_MAPPING = [ // 入力データと出力フィールドの対応表を定義
{ source: '判定入力_項目A', target: '判定結果_項目A' }, // 項目Aの入力 → 判定結果
{ source: '判定入力_項目B', target: '判定結果_項目B' } // 項目Bの入力 → 判定結果
];
const convertValue = (input) => { // 入力データを判定形式に変換する関数
if (!input) return ''; // 入力が空なら空文字を返す
const directCopy = ['A', 'B', 'C', 'D']; // そのままコピーする値
if (directCopy.includes(input)) return input; // 該当するならそのまま返す
switch (input) { // 特定の文字を別の判定値に変換
case 'BF':
return 'B'; // BF → B に変換
case 'Z':
return 'E'; // Z → E に変換
case 'G':
return 'D'; // G → D に変換
default:
return ''; // 該当しないものは空にする
}
};
const updateJudgementFields = (record) => { // 入力データに基づき判定フィールドを更新する関数
FIELD_MAPPING.forEach(({ source, target }) => {
const original = record[source]?.value || ''; // 入力データの元値を取得
const current = record[target]?.value || ''; // 判定結果の現在値を取得
if (original && !current) { // 条件①:入力あり・判定空 → 判定を反映
record[target].value = convertValue(original); // 判定結果に変換した値をセットする
}
// 条件②:入力なし・判定なし → 何もしない
// 条件③:入力なし・判定あり → 判定結果は上書きしない
});
};
kintone.events.on( // イベント登録:レコード作成・編集送信時
['app.record.create.submit', 'app.record.edit.submit'], // レコード保存・CSVインポート確定時を対象
(event) => {
updateJudgementFields(event.record); // 判定更新処理を実行
return event; // イベントをそのまま返す(保存を続行)
}
);
})();