新規投稿
フォローする

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

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

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

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

 

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

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

・元請け情報(マスター)に登録済みの時「金額を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{//元請け以外の場合は何もしない。

        }

});


 
こちらのコードで実行したところ、確認ダイアログの無限ループが始まりました。
おそらくconfirmでtureを返す前に次の処理に行くためにループになるのでは?と思い
promiseでconfirmを処理してから進む記述にしたいと思っております。
 
色々試行錯誤したのですが、まずchangeイベントではpromiseをreturn出来ないので、
kintone.mobile.app.record.get();とkintone.app.record.set();使用しなくてなならないかと思います。
 
ですがそのget・setはkintone.events.on内では使用が出来ないとの事で書き方が分からずお手上げ状態です。
 
まず上記を実現したい場合、confirmが非同期処理になるのでpromiseを使用するという考えは有っているのでしょうか?
また、promiseのreturnとget・setが使用できない場合はどのように記述をすればいいのでしょうか?
 
よろしくお願い致します。
0

2件のコメント

Avatar
Kazuhiro Yoshida

>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://qiita.com/sy250f/items/5a0b43aa8bfe145bc870

0
Avatar
金沢麻未

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

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

実現できませんでした。

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

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

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

1
サインインしてコメントを残してください。