# REST APIのPUTやPOSTを「保存実行前イベント」や「保存成功後イベント」で行うとエラーになる

**URL:** <https://community.cybozu.dev/t/topic/2654>\
**Category:** kintone 開発相談\
**Created:** [2016 年 8 月 30 日午前 8:40 UTC](https://community.cybozu.dev/t/topic/2654 "2016-08-30T08:40:42Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account331](https://avatars.discourse-cdn.com/v4/letter/l/4da419/32.png) [@Legacy\_Account331](https://community.cybozu.dev/u/Legacy_Account331)\
**Post date:** [2016 年 8 月 30 日午前 8:40 UTC](https://community.cybozu.dev/t/topic/2654/1 "2016-08-30T08:40:42Z")

</div>

お世話になります。渡邊です。

アプリAの保存時に、アプリBを登録・更新するような、下記のようなコードを書いてますが、エラーの方に分岐していってしまいます。

kintone.Promiseオブジェクトも試してみましたが、やはり同じようにエラーの方に分岐してしまいます。

「文字列\_\_1行\_」の変更イベントの時は、特にエラーの方に分岐していきません。

仕様なのでしょうか？それとも何か勘違いしてるのでしょうか？

```
(function () {
    "use strict";
    
    var appID_test = 15;
    
    // 保存実行後
    //kintone.events.on(["app.record.edit.change.文字列 __1行_","app.record.create.change.文字列__ 1行_"], function(event) {
    //kintone.events.on(["app.record.edit.submit", "app.record.create.submit"], function(event) { // 保存実行前
    kintone.events.on(["app.record.create.submit.success","app.record.edit.submit.success"], function(event) { // 保存実行後
    
    
          // レコードへの値の設定
        var record = event.record;

        var flgGeppo = 0;

        if(flgGeppo == 0){
        
             // リクエストプロパティ(JSON)
            var params = {
                "app": appID_test,
                "record": {
                    "数値": { "value": 1 },
                    "計算": { "value": ""}
                
                }
            };
            
            console.log(params);

            // kintone REST API リクエスト ～ レコードの登録（POST）
            kintone.api(
                kintone.api.url('/k/v1/record', true), // - pathOrUrl
                'POST', // - method
                params, // - params
                function(resp) { // - callback
                    // (特に何もしない)
                    console.log(params);
                },
                function(resp) { // - errback
                    var errmsg = 'エラーが発生しました。 登録時';
                    // (特に何もしない)
                    if (resp.message !== undefined){
                      errmsg += '' + resp.message;
                    }
                    console.log(errmsg);
                    console.log(resp);
                    console.log(params);
                    alert(errmsg);
                    alert(params);
                    alert(resp);
                }
            );
            
        }else{
             // リクエストプロパティ(JSON)
            var params = {
                "app": appID_test,
                "id": 7,
                "record": {
                    "数値": { "value": 2 },
                    "計算": { "value": ""}
                }
            };
            
            console.log(params);

            // kintone REST API リクエスト ～ レコードの更新（PUT）
            kintone.api(
                kintone.api.url('/k/v1/record', true), // - pathOrUrl
                'PUT', // - method
                params, // - params
                function(resp) { // - callback
                    // (特に何もしない)
                    console.log(params);
                },
                function(resp) { // - errback
                    var errmsg = 'エラーが発生しました。 更新';
                    // (特に何もしない)
                    if (resp.message !== undefined){
                      errmsg += '' + resp.message;
                    }
                    console.log(errmsg);  
                    console.log(resp);
                    console.log(params);
                    alert(errmsg);
                    alert(params);
                    alert(resp);
                }
            );
        }
        return event;
    });

})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1557](https://avatars.discourse-cdn.com/v4/letter/l/49beb7/32.png) [@Legacy\_Account1557](https://community.cybozu.dev/u/Legacy_Account1557)\
**Post date:** [2016 年 8 月 30 日午前 8:48 UTC](https://community.cybozu.dev/t/topic/2654/2 "2016-08-30T08:48:48Z")

</div>

リクエストに「計算」フィールドが入っているのが気になります。

計算フィールドはユーザが値を設定することができないのでAPIでもエラーとなります。

一度計算フィ－ルドを削除して試してみていただけますか。

```
            var params = {
                "app": appID_test,
                "id": 7,
                "record": {
                    "数値": { "value": 2}
                }
            };

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2016 年 8 月 30 日午前 8:55 UTC](https://community.cybozu.dev/t/topic/2654/3 "2016-08-30T08:55:19Z")

</div>

あとは、submit.successイベントはちょっとクセがあるようで、体験されているかと思いますが直後にリロード走ったりするので、kintone.api() をPromiseなしの非同期処理のまま括るのは意図通りの動きにならない可能性を高めそうです。（createとeditでも少し違う動きに見えたり・・・よく確認できてない麺がありますが）

一方 submit.successイベントも従来のsubmitイベントと同じようにkintone.Promiseをreturn出来るようですので、非同期処理は return new kintone.Promise で括って、最終的にreturn eventするのが良さそうです。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account331](https://avatars.discourse-cdn.com/v4/letter/l/4da419/32.png) [@Legacy\_Account331](https://community.cybozu.dev/u/Legacy_Account331)\
**Post date:** [2016 年 8 月 30 日午前 8:57 UTC](https://community.cybozu.dev/t/topic/2654/4 "2016-08-30T08:57:20Z")

</div>

カキ氷さま

&nbsp;

ご回答ありがとうございます！

paramsの計算フィールドを削除しましたが、

エラーとなります。

アプリBは計算フィールドを持っていたいのですが、

その場合は、paramsはどういう記述方法になるのでしょうか？

---

<div class="post-metadata">

**Author:** ![Legacy\_Account331](https://avatars.discourse-cdn.com/v4/letter/l/4da419/32.png) [@Legacy\_Account331](https://community.cybozu.dev/u/Legacy_Account331)\
**Post date:** [2016 年 8 月 30 日午前 9:12 UTC](https://community.cybozu.dev/t/topic/2654/5 "2016-08-30T09:12:11Z")

</div>

**Ryu Yamashita** 様

いつもご回答ありがとうございます。

&nbsp;癖ががあるsubmit.successイベントではない場合でも、app.record.edit.submitであれば、エラーは発生しませんが、app.record.create.submitでエラーが発生してしまいました。

Promiseでの処理が書けてなかったかもしれませんので、Promiseで再度試してみます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account331](https://avatars.discourse-cdn.com/v4/letter/l/4da419/32.png) [@Legacy\_Account331](https://community.cybozu.dev/u/Legacy_Account331)\
**Post date:** [2016 年 8 月 30 日午前 9:21 UTC](https://community.cybozu.dev/t/topic/2654/6 "2016-08-30T09:21:49Z")

</div>

Ryu Yamashita様

先ほどのコードの「kintone REST API リクエスト ～ レコードの登録（POST）」の部分に下記のコードを書いてるのですが、

エラーとなってしまいます。書き方が異なるのでしょうか？

```
            var testValue = 1;
            var query = '数値="' + testValue + '"';
            return new kintone.Promise(function(resolve, reject) {
                var params = {app: appID_test, query: query};
                kintone.api('/k/v1/record', 'POST', params, function(resp) {
                    resolve(resp);
                });
            }).then(function(resp) {
                    var errmsg = 'エラーが発生しました。 登録時';
                    // (特に何もしない)
                    if (resp.message !== undefined){
                      errmsg += '' + resp.message;
                    }
                    console.log(errmsg);
                    console.log(resp);
                    console.log(params);
                    alert(errmsg);
                    alert(params);
                    alert(resp);
                
                
                return event;
            });

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1557](https://avatars.discourse-cdn.com/v4/letter/l/49beb7/32.png) [@Legacy\_Account1557](https://community.cybozu.dev/u/Legacy_Account1557)\
**Post date:** [2016 年 8 月 30 日午前 9:26 UTC](https://community.cybozu.dev/t/topic/2654/7 "2016-08-30T09:26:46Z")

</div>

**渡邊** さん

最初のコードをpromise化してみました。

エラーが出た場合、分かる範囲でいいのでその内容も教えていただけると解決の糸口が見つかるかもしれませんのでお願いします。

&nbsp;

```
(function () {
    "use strict";

    var appID_test = 15;

    // 保存実行後
    //kintone.events.on(["app.record.edit.change.文字列 __1行_","app.record.create.change.文字列__ 1行_"], function(event) {
    //kintone.events.on(["app.record.edit.submit", "app.record.create.submit"], function(event) { // 保存実行前
    kintone.events.on(["app.record.create.submit.success","app.record.edit.submit.success"], function(event) { // 保存実行後

          // レコードへの値の設定
        var record = event.record;

        var flgGeppo = 0;

        if(flgGeppo == 0){

             // リクエストプロパティ(JSON)
            var params = {
                "app": appID_test,
                "record": {
                    "数値": {"value": 1}
                }
            };

            console.log(params);

            // kintone REST API リクエスト ～ レコードの登録（POST）
            return kintone.api(
                kintone.api.url('/k/v1/record', true), // - pathOrUrl
                'POST', // - method
                params // - params
            ).then(function(resp) {// - callback
                // (特に何もしない)
                console.log(params);
                return event;
            }).catch(function(resp){
                var errmsg = 'エラーが発生しました。 登録時';
                // (特に何もしない)
                if (resp.message !== undefined){
                  errmsg += '' + resp.message;
                }
                console.log(errmsg);
                console.log(resp);
                console.log(params);
                alert(errmsg);
                alert(params);
                alert(resp);
            });

        }else{
            // リクエストプロパティ(JSON)
            var params = {
                "app": appID_test,
                "id": 7,
                "record": {
                    "数値": {"value": 2}
                }
            };

            console.log(params);

            // kintone REST API リクエスト ～ レコードの更新（PUT）
            return kintone.api(
                kintone.api.url('/k/v1/record', true), // - pathOrUrl
                'PUT', // - method
                params // - params
            ).then(function(resp) {// - callback
                // (特に何もしない)
                console.log(params);
                return event;
            }).catch(function(resp) {// - errback
                var errmsg = 'エラーが発生しました。 更新';
                // (特に何もしない)
                if (resp.message !== undefined){
                  errmsg += '' + resp.message;
                }
                console.log(errmsg);
                console.log(resp);
                console.log(params);
                alert(errmsg);
                alert(params);
                alert(resp);
            });
        }
    });
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account331](https://avatars.discourse-cdn.com/v4/letter/l/4da419/32.png) [@Legacy\_Account331](https://community.cybozu.dev/u/Legacy_Account331)\
**Post date:** [2016 年 8 月 30 日午前 9:34 UTC](https://community.cybozu.dev/t/topic/2654/8 "2016-08-30T09:34:31Z")

</div>

カキ氷さま

&nbsp;

ありがとうございます！

全くエラーが発生しません。

こちらを利用させていただきます！

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2016 年 8 月 30 日午前 9:34 UTC](https://community.cybozu.dev/t/topic/2654/9 "2016-08-30T09:34:58Z")

</div>

渡邊さんのコードとカキ氷が書かれたコードは多分等価で、良さ気に見えるので、エラーの内容次第でしょうか。

&nbsp;

また、極力エラーは拾うようにした方がいいですね。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2016 年 8 月 30 日午前 9:37 UTC](https://community.cybozu.dev/t/topic/2654/10 "2016-08-30T09:37:53Z")

</div>

すみません。等価ではなさそうですね。やはり、エラーの取扱部分は少なくとも。

&nbsp;

\>&nbsp;全くエラーが発生しません。

\> こちらを利用させていただきます！

&nbsp;

ということは、どこかに違いがありそうですが、・・・ひとまず解決されたようで良かったですね。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account331](https://avatars.discourse-cdn.com/v4/letter/l/4da419/32.png) [@Legacy\_Account331](https://community.cybozu.dev/u/Legacy_Account331)\
**Post date:** [2016 年 8 月 30 日午前 9:41 UTC](https://community.cybozu.dev/t/topic/2654/11 "2016-08-30T09:41:58Z")

</div>

Ryu Yamashita様

&nbsp;

ちょっと、まだコードの差分を確認できてないのですが、等価でしたか。。。

このsubmitのエラーの場合、「resp」の中はconsole.logで出しても空でしたので。。。

&nbsp;

あ、よかった。はい、追って、差分を確認しようと思います。

ありがとうございました。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1574](https://avatars.discourse-cdn.com/v4/letter/l/76d3ee/32.png) [@Legacy\_Account1574](https://community.cybozu.dev/u/Legacy_Account1574)\
**Post date:** [2016 年 8 月 30 日午前 10:22 UTC](https://community.cybozu.dev/t/topic/2654/12 "2016-08-30T10:22:11Z")

</div>

```
return new kintone.Promise(function(resolve, reject) {
                var params = {app: appID_test, query: query};
                kintone.api('/k/v1/record', 'POST', params, function(resp) {
                    resolve(resp);
                }, function(err){
reject(err)
});
            })

```

&nbsp;

\>&nbsp;このsubmitのエラーの場合、「resp」の中はconsole.logで出しても空でしたので。。。

やはりエラーが拾えてないためです。

&nbsp;

上のコードのように、エラーを拾い分ける必要があります。kintone.api() は、エラーバック省略できますが、書いたほうが良いと思います。文字通りエラーが拾えませんので。また、Promiseをチェーンした場合にcatchも書くのが良いと思います。rejectされた内容の処理が拾えませんので。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account331](https://avatars.discourse-cdn.com/v4/letter/l/4da419/32.png) [@Legacy\_Account331](https://community.cybozu.dev/u/Legacy_Account331)\
**Post date:** [2016 年 8 月 31 日午前 1:22 UTC](https://community.cybozu.dev/t/topic/2654/13 "2016-08-31T01:22:47Z")

</div>

Ryu Yamashita様

たびたび、ありがとうございます。

respとerrでかき分けたいと思います。

rejectでの記述やcatchなども了解しました。

いろいろありがとうございました。

---

<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 年 5 月 28 日午前 7:18 UTC](https://community.cybozu.dev/t/topic/2654/14 "2025-05-28T07:18:57Z")

</div>

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