新規登録画面で他のアプリのデータを選択肢として表示したい

お世話になります。
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;
    });

})();

getFieldElement が詳細画面にしか対応してないから、ですかね。


Field element not found for field code: xxx
がでているということは

if (!fieldElement) {
ここに到達していて、つまり、 fieldElement が空っぽいてことですよね。

fieldElement = kintone.app.record.getFieldElement(config.fieldCode);

で取得できてないということですが
getFieldElement()詳細画面(と印刷画面)でしか利用できません

なので、スペースフィールドを定義しその上に候補をだすなどの別の方法が必要だと思います

「いいね!」 1

maru様ご回答いただきありがとうございます。
getFieldElement が詳細画面にしか対応していないという初歩的なことだったんですね、、。
もっとたくさん勉強したいと思います!

てんそ様、ご回答いただきありがとうございます。
前回に引き続き、無事に希望通りの表示をすることができました!

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。