ありがとうございます!
この修正を行ったところエラーが出なくなりそこを糸口に何とかPC上では正しい動きをするプログラムができました。
(() => {
"use strict";
const APP_ID_SOURCE = 19; // 検索先アプリのID
const APP_ID_TARGET = 16; // 現アプリのID
const TABLE_CODE = "作業リスト"; // 現アプリのテーブルフィールドコード
const SEARCH_FIELD = "Management_number"; // 検索先アプリの検索対象フィールド
const INPUT_FIELD = "指示書No"; // 現アプリの検索トリガーとなるフィールド
// 転記するフィールドマッピング
const FIELD_MAPPING = {
"Construction_number": "工番",
"Car_model": "車種",
"Product_name": "品名",
"Part_name": "部品名"
};
// PC・モバイル対応のイベント
const events = [
`app.record.create.change.${INPUT_FIELD}`,
`app.record.edit.change.${INPUT_FIELD}`,
`mobile.app.record.create.change.${INPUT_FIELD}`,
`mobile.app.record.edit.change.${INPUT_FIELD}`
];
kintone.events.on(events, (event) => {
console.log("イベント発火: ", event);
const record = event.record;
const table = record[TABLE_CODE]?.value;
if (!table || !Array.isArray(table)) {
console.warn("テーブルデータが取得できません。");
return event;
}
console.log("作業リスト(テーブルデータ):", table);
// **すべての検索リクエストを実行**
const requests = table.map((row) => {
const rowData = row.value;
const searchValue = rowData?.[INPUT_FIELD]?.value;
if (!searchValue || searchValue.trim() === "") {
console.warn(`行ID: ${row.id} - 指示書No が空なのでスキップ`);
return Promise.resolve(null); // 空のPromiseを返す
}
console.log(`検索値(指示書No): ${searchValue}`);
const query = `${SEARCH_FIELD}="${searchValue}"`;
return kintone.api(kintone.api.url("/k/v1/records.json", true), "GET", {
app: APP_ID_SOURCE,
query: query
}).then((resp) => {
console.log(`検索結果 (${searchValue}):`, resp);
return { rowData, result: resp.records[0] || null };
}).catch((error) => {
console.error("検索エラー:", error);
return { rowData, result: null };
});
});
// **すべてのリクエストが完了した後に処理**
Promise.all(requests).then((results) => {
results.forEach(({ rowData, result }) => {
if (!result) return;
// **対象フィールドを初期化 & 転記**
for (const [sourceField, targetField] of Object.entries(FIELD_MAPPING)) {
rowData[targetField] = {
type: "SINGLE_LINE_TEXT",
value: result[sourceField]?.value ?? ""
};
}
});
// ✅ 変更後のデータを event.record に反映
event.record[TABLE_CODE].value = table;
console.log("[DEBUG] 転記後の event.record:", event.record);
// ✅ 最後に画面を更新
kintone.app.record.set(event);
});
return event;
});
})();
ただ、モバイル上では作動せずこの解決をしたいと思っています。
ここまで進めたのは非常に大きいと思っています。
本当にありがとうございます。
可能であれば引き続きご助言いただけないでしょうか?