ボタンを押してラジオボタンの値を変更したい

初めて質問させていただきます。プログラミング未経験者です。
こちらでされている過去の質問や、ブログ記事等を見たのですが、どうしても行き詰ってしまい、お力添えいただきたいです。

レコード詳細画面でボタンを押したら、ラジオボタンの値を変更できるようにしたいです。
変更したいラジオボタンのフィールド名は「確認」で、
ボタンを押した後に変更したい値は「済」です。

ボタンの表示まではできるのですが、値の変更ができません。

<実行したコード>
(() => {
‘use strict’;
kintone.events.on(‘app.record.detail.show’, (event) => {
const menuButton = document.createElement(‘button’);
menuButton.id = ‘menu_button’;
menuButton.innerText = ‘テスト中’;
menuButton.onclick = function() {
const obj = kintone.app.record.get();
obj.record[‘確認’].value = “済”;
kintone.app.record.set(obj);
};
const spaceField = kintone.app.record.getSpaceElement(‘spSuteki’);
if (spaceField) {
spaceField.appendChild(menuButton);
}
return event;
});
})();

<表示されるエラー>
Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received

初歩的な質問で大変恐縮ですが、何卒よろしくお願いいたします。

marboさん、こんにちは。

kintone.app.record.set() 関数は、レコード追加画面とレコード編集画面でのみ利用可能となっています。

参考:/ja/kintone/docs/js-api/record/set-record-value/

記載いただいたように、レコード詳細画面で値を変更したい場合、kintone.api() 関数を利用して、kintone REST API を実行する必要があります。

具体的には、以下のような処理になると思います:

kintone.events.on('app.record.detail.show', (event) => {
    const menuButton = document.createElement('button');
    menuButton.id = 'menu_button';
    menuButton.innerText = 'テスト中';

    // 変更箇所:ここから
    menuButton.onclick = async function () {
        const body = {
            app: kintone.app.getId(),
            id: kintone.app.record.getId(),
            record: {
                '確認': {
                    value: '済'
                }
            }
        }
        await kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body);
        location.reload();
    };
    // 変更箇所:ここまで

    const spaceField = kintone.app.record.getSpaceElement('spSuteki');
    if (spaceField) {
        spaceField.appendChild(menuButton);
    }
    return event;
});

変更箇所:ここから〜ここまで以外は問題なく動作していました!

関数によって利用に制限があったり、そもそもkintone JavaScript APIとkintone REST API の使い分けが必要だったりとややこしい部分がありますが、適宜コミュニティでご相談いただければと思います!

参考:
kintone REST APIリクエストを送信する - cybozu developer network
1件のレコードを更新する - cybozu developer network

2 Likes

だいちゃん様

早速ご回答いただきましてありがとうございます!
いただいたコードで問題なく動作することが確認できました!

また参考ページもご丁寧にありがとうございます・・・!
いただいたご回答をもとに勉強させていただきます!

また行き詰まった際にはコミュニティで質問をさせていただきますので、お目に留まった際には何卒よろしくお願いいたします・・・!

1 Like

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