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

**URL:** <https://community.cybozu.dev/t/topic/9403>\
**Category:** kintone 開発相談\
**Created:** [2024 年 8 月 20 日午前 7:36 UTC](https://community.cybozu.dev/t/topic/9403 "2024-08-20T07:36:55Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![hoshi](https://avatars.discourse-cdn.com/v4/letter/h/bbce88/32.png) [@hoshi](https://community.cybozu.dev/u/hoshi)\
**Post date:** [2024 年 8 月 20 日午前 7:36 UTC](https://community.cybozu.dev/t/topic/9403/1 "2024-08-20T07:36:56Z")

</div>

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

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

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

```javascript
(() => {
    '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);
    });
})();

```

---

<div class="post-metadata">

**Author:** ![mura](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/mura/32/41_2.png) [@mura](https://community.cybozu.dev/u/mura)\
**Post date:** [2024 年 8 月 20 日午後 11:31 UTC](https://community.cybozu.dev/t/topic/9403/2 "2024-08-20T23:31:04Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![hoshi](https://avatars.discourse-cdn.com/v4/letter/h/bbce88/32.png) [@hoshi](https://community.cybozu.dev/u/hoshi)\
**Post date:** [2024 年 8 月 21 日午前 6:34 UTC](https://community.cybozu.dev/t/topic/9403/3 "2024-08-21T06:34:41Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![mura](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/mura/32/41_2.png) [@mura](https://community.cybozu.dev/u/mura)\
**Post date:** [2024 年 8 月 21 日午後 11:07 UTC](https://community.cybozu.dev/t/topic/9403/4 "2024-08-21T23:07:36Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![hoshi](https://avatars.discourse-cdn.com/v4/letter/h/bbce88/32.png) [@hoshi](https://community.cybozu.dev/u/hoshi)\
**Post date:** [2024 年 8 月 22 日午前 12:08 UTC](https://community.cybozu.dev/t/topic/9403/5 "2024-08-22T00:08:02Z")

</div>

畏まりました！

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

---

<div class="post-metadata">

**Author:** ![mura](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/mura/32/41_2.png) [@mura](https://community.cybozu.dev/u/mura)\
**Post date:** [2024 年 8 月 22 日午後 10:58 UTC](https://community.cybozu.dev/t/topic/9403/6 "2024-08-22T22:58:43Z")

</div>

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

モバイル版の場合は、アプリIDを取得するのは `kintone.mobile.app.getId()` ですね！  
これなら動くと思います  
詳細: [アプリのIDを取得する - cybozu developer network](https://cybozu.dev/ja/kintone/docs/js-api/app/get-app-id/)

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

> **[kintone JavaScript API](https://cybozu.dev/ja/kintone/docs/js-api/)**
>
> kintoneの画面上の動作や見た目を変えるAPIです。JavaScriptファイルをアプリにアップロードして適用することで、ユーザーのkintone画面上で動作します。kintoneにはさまざまなJavaScriptイベントがあり、動作を変更できます。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2024 年 8 月 25 日午後 10:59 UTC](https://community.cybozu.dev/t/topic/9403/7 "2024-08-25T22:59:09Z")

</div>

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