お世話になります。
テーブル外フィールドをテーブル内にコピーをしたいと考えています。
理想はテーブル外の
入出庫をつかさどるフィールド項目があり(出荷日、入M、出M)、
入出庫管理テーブルをテーブル用の同様のフィールドに追記していくイメージです。
テーブル外でのフィールドの役割は、最新の出荷時のデータがある。
テーブルには過去のデータがある。
というイメージです。
事由としては、他アプリから関連レコードなど紐づけをする際にテーブル内だと標準機能では成立しない部分があるためです。
この度作成したJSを組んで値を保存するときに
エラーが出てしまいます。
JSをシンプルにしても出るので、何か根本的なミスがあるのではと思うのですがもしお分かりになればご指摘いただけますと幸いです。
発生した問題やエラーメッセージ
エラー
- カスタマイズ用のJavaScriptの実行時にエラーが発生しました。アプリの管理者にお問い合わせください。
-
- event.record[‘入出庫管理’].value[0][‘T入tcモノ’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T入tcカラー’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T入B’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T入C’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T入M’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T入Y’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T出tcモノ’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T出tcカラー’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T出B’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T出C’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T出M’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T出Y’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T出荷日’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T入荷日’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T会社区分’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T販売区分’].type が不正です。
-
- event.record[‘入出庫管理’].value[0][‘T顧客ID’].type が不正です。
実行したコード
(function () {
‘use strict’;
const events = [‘app.record.create.submit’, ‘app.record.edit.submit’];
const safeValue = (record, code) => (record[code] ? record[code].value : ‘’);
kintone.events.on(events, function (event) {
const record = event.record;
const tableFieldCode = ‘入出庫管理’;
if (!record[tableFieldCode]) return event;
// 通常フィールドから値を取得してテーブル用のフィールドに対応付け
const normalFields = {
'T入t_cモノ': safeValue(record, '入t_cモノ'),
'T入t_cカラー': safeValue(record, '入t_cカラー'),
'T入B': safeValue(record, '入B'),
'T入C': safeValue(record, '入C'),
'T入M': safeValue(record, '入M'),
'T入Y': safeValue(record, '入Y'),
'T出tcモノ': safeValue(record, '出tcモノ'),
'T出tcカラー': safeValue(record, '出tcカラー'),
'T出B': safeValue(record, '出B'),
'T出C': safeValue(record, '出C'),
'T出M': safeValue(record, '出M'),
'T出Y': safeValue(record, '出Y'),
'T出荷日': safeValue(record, '出荷日'),
'T入荷日': safeValue(record, '入荷日'),
'T会社区分': safeValue(record, '会社区分'),
'T販売区分': safeValue(record, '販売区分'),
'T顧客ID': safeValue(record, '顧客ID')
};
// 未入力フィールドがあるか確認
const emptyFields = Object.entries(normalFields)
.filter(([_, value]) => value === '' || value === null || value === undefined)
.map(([key, _]) => key);
if (emptyFields.length > 0) {
const proceed = window.confirm(
`以下の項目が未入力ですが、そのまま保存しますか?\n\n${emptyFields.join('\n')}`
);
if (!proceed) {
event.error = '保存をキャンセルしました。未入力項目を確認してください。';
return false;
}
}
// 重複チェック(顧客ID・出荷日・入荷日)
const table = record[tableFieldCode].value || [];
const isDuplicate = table.some(row => {
return (
row.value['T顧客ID']?.value === normalFields['T顧客ID'] &&
row.value['T出荷日']?.value === normalFields['T出荷日'] &&
row.value['T入荷日']?.value === normalFields['T入荷日']
);
});
if (!isDuplicate) {
// 新しいテーブル行を作成
const newRow = { value: {} };
Object.keys(normalFields).forEach(key => {
newRow.value[key] = { value: normalFields[key] };
});
// 最新データが上に来るよう先頭に追加
record[tableFieldCode].value.unshift(newRow);
}
return event;
});
})();
大変恐れ入りますが
よろしくお願いいたします。