# changeイベント使用時のpromise処理

**URL:** <https://community.cybozu.dev/t/topic/6774>\
**Category:** kintone 開発相談\
**Created:** [2020 年 9 月 17 日午前 4:00 UTC](https://community.cybozu.dev/t/topic/6774 "2020-09-17T04:00:22Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account749](https://avatars.discourse-cdn.com/v4/letter/l/d78d45/32.png) [@Legacy\_Account749](https://community.cybozu.dev/u/Legacy_Account749)\
**Post date:** [2020 年 9 月 17 日午前 4:00 UTC](https://community.cybozu.dev/t/topic/6774/1 "2020-09-17T04:00:22Z")

</div>

お世話になっております。

タイトルの通りchangeイベント使用時に非同期処理をpromiseで処理を行いたいのですが、

kintone側の制約がありどのように記述すればいいのかわかりません。

&nbsp;

まず行いたい事は下記となります。(初回で記述したコードです。)

・元請け情報と金額が変更されたときにイベント発火。

・元請け情報(マスター)に登録済みの時「金額を20％OFFするかどうかの」確認ダイアログを表示し、

YESの場合金額を20％OFFに書き換える。

```
//元請け登録済みの場合、金額を20％OFFする。

var event = ['app.record.create.change.元請け情報選択',

                'app.record.edit.change.元請け情報選択',

                'app.record.create.change.金額',

                'app.record.edit.change.金額']

kintone.events.on(event, function(event) {

        var record = event.record;

        var motouke = record['元請け情報選択']['value'];

        var money = record['金額']['value'];

        if(motouke === '元請け有(得意先管理登録済)'){//元請け登録済みの場合の処理

            var off20 = window.confirm('金額を20％OFFの卸価格に変更しますか？');

            if(off20){

                record['金額']['value'] = money*0.8;

                return event;

            }else{
        return;//NOの場合何もしない。
            }

        }else{//元請け以外の場合は何もしない。

        }

});

```

&nbsp;

こちらのコードで実行したところ、確認ダイアログの無限ループが始まりました。

おそらくconfirmでtureを返す前に次の処理に行くためにループになるのでは？と思い

promiseでconfirmを処理してから進む記述にしたいと思っております。

&nbsp;

色々試行錯誤したのですが、まずchangeイベントではpromiseをreturn出来ないので、

kintone.mobile.app.record.get();とkintone.app.record.set();使用しなくてなならないかと思います。

&nbsp;

ですがそのget・setはkintone.events.on内では使用が出来ないとの事で書き方が分からずお手上げ状態です。

&nbsp;

まず上記を実現したい場合、confirmが非同期処理になるのでpromiseを使用するという考えは有っているのでしょうか？

また、promiseのreturnとget・setが使用できない場合はどのように記述をすればいいのでしょうか？

&nbsp;

よろしくお願い致します。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1758](https://avatars.discourse-cdn.com/v4/letter/l/43a26b/32.png) [@Legacy\_Account1758](https://community.cybozu.dev/u/Legacy_Account1758)\
**Post date:** [2020 年 9 月 21 日午後 3:13 UTC](https://community.cybozu.dev/t/topic/6774/2 "2020-09-21T15:13:14Z")

</div>

\>confirmが非同期処理になるのでpromiseを使用するという考え

合ってます。

\>get・setはkintone.events.on内では使用が出来ない  
\>promiseのreturnとget・setが使用できない場合はどのように記述をすれば

get・setが使えないのは、kintone.events.onのイベントハンドラ内だけなので、  
それ以外のPromiseの処理中ではget・setは利用できます。

書き方としては下記が参考になるかと思います。

ジョイゾーさんのブログの記事です。  
[https://www.joyzo.co.jp/blog/2021](https://www.joyzo.co.jp/blog/2021)

拙稿です。  
[https://qiita.com/sy250f/items/5a0b43aa8bfe145bc870](https://qiita.com/sy250f/items/5a0b43aa8bfe145bc870)

---

<div class="post-metadata">

**Author:** ![Legacy\_Account749](https://avatars.discourse-cdn.com/v4/letter/l/d78d45/32.png) [@Legacy\_Account749](https://community.cybozu.dev/u/Legacy_Account749)\
**Post date:** [2020 年 9 月 29 日午前 1:04 UTC](https://community.cybozu.dev/t/topic/6774/3 "2020-09-29T01:04:01Z")

</div>

コメントいただきありがとうございます。

その後記事を見ながら色々と行いましたが、新規作成時はREST APIが使用できず

実現できませんでした。

同レコード内で全て完結し保存時以外のイベント発火の場合、上記のやり方はkintoneでは

実現出来ないようでした。

色々教えて頂きありがとうございました。

---

<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:** [2025 年 6 月 16 日午前 1:36 UTC](https://community.cybozu.dev/t/topic/6774/4 "2025-06-16T01:36:05Z")

</div>

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