Kintoneモバイル版の一覧から一括承認

Kintoneのモバイル版で、一覧から選択して一括承認ができるようにJavaScriptを作成しましたが、選択後に承認ボタンを押してもエラーが出てしまいます。

レコードを選択後、承認ボタンを押してもエラーで承認されません。

エラーメッセージは CB_VA01 エラーコードと「入力内容が正しくありません」というものが表示されます。 KintoneのAPIが間違っているのでしょうか?ご教示いただけると幸いです。

(() => {
    'use strict';
    kintone.events.on('mobile.app.record.index.show', async (event) => {
        const appId = kintone.app.getId();
        if (event.viewId !== ◎◎◎◎) {
            return;
        }

        // jQueryとSweetAlert2のロードチェック
        if (typeof $ === 'undefined' || typeof Swal === 'undefined') {
            console.error('jQueryまたはSweetAlert2が読み込まれていません。');
            return;
        }

        if ($('.mobile-header-contents').length !== 0) {
            return;
        }

        const el = kintone.mobile.app.getHeaderSpaceElement();
        const headerDiv = $('<div></div>', {
            class: 'mobile-header-contents'
        });

        // 承認ボタンを作成
        const approvalButton = $('<button></button>', {
            class: 'mobile-approval-button',
            text: '一括承認'
        });

        approvalButton.click(async () => {
            const selectedRecords = [];
            $('input[name="recordCheckBox"]:checked').each(function () {
                const recordId = $(this).val();
                selectedRecords.push({
                    id: recordId,
                    action: '承認' // アクション名は適切なものに変更
                });
            });

            if (selectedRecords.length > 0) {
                try {
                    const result = await Swal.fire({
                        title: '選択されたレコードを承認しますか?',
                        text: '選択されたレコードを承認します',
                        icon: 'warning',
                        showCancelButton: true,
                        confirmButtonColor: '#DD6B55',
                        confirmButtonText: '承認',
                        cancelButtonText: 'キャンセル',
                    });

                    if (result.isConfirmed) {
                        const requestObj = {
                            app: appId,
                            records: selectedRecords
                        };
                        await kintone.api(kintone.api.url('/k/v1/records/status', true), 'PUT', requestObj);
                        await Swal.fire({
                            title: '承認が完了しました。',
                            text: 'ありがとうございました',
                            icon: 'success'
                        });
                        location.reload();
                    }
                } catch (error) {
                    console.error(error);
                    await Swal.fire({
                        title: 'エラーが発生しました',
                        text: error.message,
                        icon: 'error'
                    });
                }
            } else {
                await Swal.fire({
                    title: 'レコードが選択されていません',
                    icon: 'warning'
                });
            }
        });

        // ボタンをヘッダーに追加
        headerDiv.append(approvalButton);

        // 各レコードにチェックボックスを追加
        event.records.forEach((record) => {
            const recordId = record.$id.value;
            const checkbox = $('<input>', {
                type: 'checkbox',
                name: 'recordCheckBox',
                value: recordId
            });
            const checkboxLabel = $('<label></label>')
                .append(checkbox)
                .append(' レコードNo: ' + recordId)
                .append($('<br />'));
            headerDiv.append(checkboxLabel);
        });

        $(el).append(headerDiv);
    });
})();

APIのエラーにみえますね
下記をもとにレスポンスの詳細をみるのと、想定通りのデータがおくれているか、みてみてください
https://cybozu.dev/ja/id/42b1d7ce01fd5d9b53dbf4df/#methods-list-5

ありがとうございます!解決しました!!

(もしよろしければ、何がどうおかしくてどうなおしたのか共有いただくと、他に困ってるひとの助けになるかもしれませんのでぜひ!)

「いいね!」 1

畏まりました!

上記のコードでは、kintone.app.getId()を使ってアプリIDを取得していましたが、エラーでappフィールドがnullになっていました。そこで、代わりに固定のアプリIDを直接設定する方法を試みたところ、無事に希望通り動作するようになりました!

「いいね!」 2

なるほど、共有いただきありがとうございます。

モバイル版の場合は、アプリIDを取得するのは kintone.mobile.app.getId() ですね!
これなら動くと思います
詳細: アプリのIDを取得する - cybozu developer network

モバイルだと一部JavaScriptAPIが下記のように変わります

「いいね!」 2

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