他アプリのデータを自アプリのテーブルに展開したい。

アプリ間で、下記のデータ連携を行いたい。

  1. OT REQUESTアプリを開く。
  2. WORKERアプリを参照して、ID, NAME, SHIFTフィールドのデータを取得。
  3. 取得したWORKERアプリID, NAME, SHIFTフィールドのデータを、OT REQUESTアプリのテーブル(employeelist)のID, NAME, SHIFTフィールドに、IDおよびSHIFTで昇順ソートして表示したい。
  4. アプリのテーブル(employeelist)の残りのフィールド(START, END, HOURS)には空白を設定したい。

以下図解を参照願います。

以下のコードを実行しましたが、エラーが発生します。

(() => {
    'use strict';

    kintone.events.on(['app.record.create.show'], (event) => {
        const record = event.record;

        // 従業員テーブルアプリから従業員データを取得して、従業員IDとシフトでソート
        kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
            app: 261, // 従業員テーブルアプリの実際のアプリIDに置き換えてください
            query: 'order by ID asc, SHIFT asc', // 従業員IDとシフトでソートするクエリを指定
            fields: ['ID', 'NAME', 'SHIFT'] // 取得するフィールドを指定
        }).then(function (resp) {

        console.log("GET COMPLETED");
        console.log(resp);

            // 従業員データを処理して表示
            var employeeData = resp.records;
            var employeeList = [];

        console.log("rsep.records");
        console.log(resp.records);

        console.log("employeeData");
        console.log(employeeData);

        console.log("employeeList");
        console.log(employeeList);

            // 従業員リスト配列を構築

        console.log("Start of 従業員リスト配列を構築");
        
            for (var i = 0; i < employeeData.length; i++) {
                employeeList.push({
                    'ID': employeeData[i].ID.value,
                    'NAME': employeeData[i].NAME.value,
                    'SHIFT': employeeData[i].SHIFT.value,
                    'START': "",
                    'END' : "",
                    'HOURS': ""
                });
            }

            // 残業申請アプリのテーブルフィールドに従業員リストを設定
        console.log("Start of record.employeeTable.value = employeeList");
            record.employeeTable.value = employeeList;
        console.log("record.employeeTable.value");
        console.log(record.employeeTable.value);
        console.log("End of record.employeeTable.value = employeeList");

        console.log("Start of kintone.app.record.set(event)");
            kintone.app.record.set(event);
        console.log("End of kintone.app.record.set(event)");    
        });
    });
})();

<エラー内容>
エラー
カスタマイズ用のJavaScriptの実行時にエラーが発生しました。アプリの管理者にお問い合わせください。

  • event.record[‘employeeList’].value[0] が不正です。
  • event.record[‘employeeList’].value[1] が不正です。
  • event.record[‘employeeList’].value[2] が不正です。
  • event.record[‘employeeList’].value[3] が不正です。
  • event.record[‘employeeList’].value[4] が不正です。
  • event.record[‘employeeList’].value[5] が不正です。
  • event.record[‘employeeList’].value[6] が不正です。

コードの不具合箇所の特定と、修正コードの内容をご教示いただけないでしょうか。

        kintone.app.record.set(event);

ここでエラーでている、ということでしたら、
期待されるサブテーブルのデータ構造になってないかもしれませんね。
setする直前でどういうオブジェクトの状態になっているか一度みてみてはいかがでしょうか。

テーブルの構造は複雑ではあるため、この記事を参考にすり合わせると良いかと思います。

mura様
ありがとうございます。
共有いただいた情報をもとにトライしてみます。

記事を読んで、ソースを見直す等して、いろいろ試していますが、解決できておりません。
下図の通り、テーブルを更新する直前のemployeeList配列への書き込み(record.employeeTable.value = employeeList)までは問題ないようですが、最後のkintone.app.record.set(event)処理でエラーが出ていると理解します。
どこが問題なのでしょうか?

下記の通り、valueとtypeを明示するとうまく行きました。

(function () {
    'use strict';

    kintone.events.on(['app.record.create.show'], function (event) {
        var record = event.record;

        // 従業員テーブルアプリから従業員データを取得して、従業員IDとシフトでソート
        kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
            app: 261, // 従業員テーブルアプリの実際のアプリIDに置き換えてください
            query: 'order by ID asc, SHIFT asc', // 従業員IDとシフトでソートするクエリを指定
            fields: ['ID', 'NAME', 'SHIFT'] // 取得するフィールドを指定
        }).then(function (resp) {
            // 従業員データを処理して表示
            var employeeData = resp.records;
            var employeeList = [];

            for (var i = 0; i < employeeData.length; i++) {
                employeeList.push({
                    'value': {
                        'ID': {
                            'value': employeeData[i].ID.value,
                            'type': 'NUMBER'
                        },
                        'NAME': {
                            'value': employeeData[i].NAME.value,
                            'type': 'SINGLE_LINE_TEXT'
                        },
                        'SHIFT': {
                            'value': employeeData[i].SHIFT.value,
                            'type': 'SINGLE_LINE_TEXT'
                        },
                        'START': {
                            'value': "",
                            'type': 'TIME'
                        },
                        'END': {
                            'value': "",
                            'type': 'TIME'
                        },
                        'HOURS': {
                            'value': "",
                            'type': 'NUMBER'
                        }
                    }
                });
            }

            // 残業申請アプリのテーブルフィールドに従業員リストを設定
            record.employeeTable.value = employeeList;

            // レコードを更新
            kintone.app.record.set(event);
        });
    });
})();

ありがとうございました。

「いいね!」 2

不具合を調査するときに

console.log()

を複数書くのは疲れませんか?
ブレイクポイントを入れて、変数などの中身を見る方法を使われてはいかがでしょうか?

debuggerを設定する
デバッグをしてみよう - cybozu developer network

「いいね!」 1

debuggerですね。ありがとうございます。トライしてみます。

「いいね!」 1