お世話になります。
kintone初心者です。
新規登録画面で別のアプリのドロップダウンフィールドの情報を、既存の文字列フィールドに選択肢として表示させたいと考えています。
大本のアプリ
・学校区分(文字列)
・職区分(文字列)
・従業区分(文字列)
・所属コード(文字列)
別のアプリ
・学校名区分(ドロップダウン、アプリID:3)
・職名(ドロップダウン、アプリID:10)
・従業区員分(ドロップダウン、アプリID:8)
・所属名(ドロップダウン、アプリID:9)
発生した問題やエラーメッセージを具体的に書きましょう
デバッグのコンソール画面に下記のエラーが表示されてしまいます。
Field element not found for field code: 学校区分
Field element not found for field code: 職区分
Field element not found for field code: 従業区分
Field element not found for field code: 所属コード
エラー内容を調べ、フィールドコードやフォーム画面の表示設定など確認しましたが、原因がわかりませんでした。
どなたかわかる方いらっしゃいましたら教えていただきたいです。
実行したコードをコピー&ペーストしましょう
(() => {
'use strict';
// 単一のアプリからドロップダウンの選択肢を取得する関数
const fetchDropdownOptionsFromApp = async (appId, fieldCode) => {
try {
const response = await kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: appId,
fields: [fieldCode],
query: ''
});
console.log('API Response:', response);
console.log(appId);
console.log(fieldCode);
return response.records.map(record => ({
label: record[fieldCode].value,
value: record[fieldCode].value
}));
} catch (error) {
console.error(`Error fetching dropdown options from appId ${appId}`, error);
console.error('Error fetching data:', error);
return [];
}
};
// 新規登録画面が表示されたときに実行するイベント
kintone.events.on('app.record.create.show', async (event) => {
const appconfigs = [
{fieldCode: '学校区分', appId:3, fetchFieldCode: '学校区分名'},
{fieldCode: '職区分', appId:10, fetchFieldCode: '職名'},
{fieldCode: '従業区分', appId:8, fetchFieldCode: '従業員区分'},
{fieldCode: '所属コード', appId:9, fetchFieldCode: '所属名'}
];
//console.log('配列'+appconfigs[0]);
for (const config of appconfigs) {
console.log(`Processing field code: ${config.fieldCode}`); // デバッグ用に追加
// 他のアプリから選択肢を取得
const options = await fetchDropdownOptionsFromApp(config.appId, config.fetchFieldCode);
// フィールド要素を取得
let fieldElement = kintone.app.record.getFieldElement(config.fieldCode);
let attempts = 0;
// フィールド要素が取得できない場合、少し待機して再試行
while (!fieldElement && attempts < 5) {
console.log(`Field element for ${config.fieldCode} not found, retrying...`);
await new Promise(resolve => setTimeout(resolve, 500)); // 500ms待機
fieldElement = kintone.app.record.getFieldElement(config.fieldCode);
attempts++;
}
if (!fieldElement) {
console.error(`Field element not found for field code: ${config.fieldCode}`);
continue; // エラーが発生した場合はスキップ
}
// 文字列フィールドの入力欄をドロップダウンに変換
const selectElement = document.createElement('select');
selectElement.innerHTML = options.map(option => `<option value="${option.value}">${option.label}</option>`).join('');
fieldElement.innerHTML = ''; // 既存の入力欄をクリア
fieldElement.appendChild(selectElement);
// ドロップダウンの選択が変わったら、文字列フィールドの値を更新
selectElement.addEventListener('change', function() {
event.record[config.fieldCode].value = selectElement.value;
});
}
return event;
});
})();