新規投稿
フォローする

新規レコード登録時にタイトルに「文字列+レコード番号」を同時に登録したい

経験が浅く、JavaScriptが詳しくはありません。

新規レコードの登録をする際に、タイトルを自動で「【VOC】レコード番号」として登録したいです。

処理は通りますが、一瞬だけPUTのエラーが表示され、なにも登録されていません。

一瞬のため、詳しいエラーがわかりません。

コードは以下のようにしています。

//アプリでレコードを新規で保存した後に、レコード番号を取得し"タイトル"のフィードに
//【VOC】(レコード番号)を登録する
(function() {
    'use strict';

    //新規で詳細画面から登録して、データが保存した後に処理を実行
    kintone.events.on(['app.record.create.submit.success'], function(event){
        var record = event.record;
        var id = record.$id.value    //保存したレコードのレコード番号を取得

        var body = {
          "app": 1,                    //"アプリID"を設定
          "id": id,                    
            "record": {
                "VOCタイトル": {            
                    "value": '【VOC】' + id        //"タイトル"に「【VOC】(レコード番号)」を設定する
                }
            }            
        };
        
        //上記'body'で設定した内容をPUT(更新登録)する処理
        kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body, (resp) => {
          // アプリが正常に更新された場合
            return event;
        }, (error) => {
          // アプリが異常で更新されなかった場合
            event.error = 'レコード更新時にエラーが発生しました';    
            return event;        
        });    
        
    });
})();

どこかおかしいところがありますでしょうか。

アドバイス、よろしくお願いいたします。

0

14件のコメント

Avatar
harada

エラーなく登録されてしまいました。

アプリ番号が合っているか?

フィールドコードが合っているか?を確認する感じでしょうか?

0
Avatar
koma

>harada さま

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

はい、確認はしたのですが登録されないのです。

エラーも表示されていなかったということなので、他のjsファイルとなにかバッティングか順番に問題があるかもしれませんね。

書き方は間違いないということはわかったのでよかったです。

いったん、他のものを削除して試してます。

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

 

0
Avatar
harada
        kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body, (resp) => {
          // アプリが正常に更新された場合
            window.alert("正常系")
            return event;
        }, (error) => {
          // アプリが異常で更新されなかった場合
            console.log(error)
            window.alert("エラー")

            event.error = 'レコード更新時にエラーが発生しました';    
            return event;        
        });    

と変更した上で

1)フィールドコードを故意に間違えると、レコードは追加されるが、対象のフィールドは更新されない。エラーもでない。

2)存在しないレコード番号を指定するして実行するとエラーがでる。console.logで「指定したレコード(id: 911)が見つかりません。」と表示される。レコード番号をキーに更新しているのでレコード番号が存在しないというエラーと書き込み対象フィールドが存在しないのエラーについての深刻度が違うから動作が違うようです。

解決には至りませんでした。

0
Avatar
harada

本題とは関係ありませんが、

app.record.create.submit.success

のイベントは

レコード追加イベント – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/201941984#success

レコード追加が成功している時点ですので、event.errorがあったとしても表示する場所がないように思います。

event.error = 'レコード更新時にエラーが発生しました';    

 

0
Avatar
harada
 kintone.events.on(['app.record.create.submit.success'], function(event){

app.record.create.submit.successをapp.record.detail.showに書き換えて、レコード番号が発行されている詳細ページを表示させるとどうなるでしょうか?

 

0
Avatar
harada

自動採番プラグイン – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/209715393-%E8%87%AA%E5%8B%95%E6%8E%A1%E7%95%AA%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3

こういうプラグインをつかうことを検討するのも選択肢になると思います。

0
Avatar
koma

>haradaさま

ご丁寧に検証までありがとうございます。

>レコード追加が成功している時点ですので、event.errorがあったとしても表示する場所がないように思います。

だから、一瞬だけ表示されるのですかね。

window.alert("~")の方がわかりやすいでしょうか?

そもそも処理は通っているから

kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body, (resp) => {

より、上でエラー表示する方がいいでしょうか。

0
Avatar
koma

>自動採番プラグイン – cybozu developer network

こういうのあるんですね!

たしかに使えそうです。

ありがとうございます。

0
Avatar
harada

「そもそも処理は通っているから

kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body, (resp) => {

より、上でエラー表示する方がいいでしょうか。」

というのは、なにか認識がちがうようです。

1)kintone上で保存ボタンをおす。

2)レコードを書き込み、成功する(レコード番号が発番される)

3)app.record.create.submit.successのイベントでレコード番号を取得して、'【VOC】' + id の準備がされる。

4)レコード番号をキーに更新をかける。

この4)の処理で何かが起きて期待する動作にならないが、エラーもでない。という状況とおもいます。

4)より上ということはないと思います。

レコード追加が成功していると書いたのは、2)の時点で画面遷移が始まっているの画面に返せない状態のように考えました。

0
Avatar
koma

とてもわかりやすいです、ありがとうございます。

なるほど。

>この4)の処理で何かが起きて期待する動作にならないが、エラーもでない。

この時に「更新ができなかった」というエラーを出すのはharadaさまが記載しているように

window.alert("~")がわかりやすそうですね

 

0
Avatar
harada

1)私の環境では、window.alert()を入れても、どうもエラーではなく正常な流れをとっていることしかわかりませんでした。

2)chromeのデベロッパーツールのコンソールで一瞬エラーが出て消えてしまうなら、ログを保持にチェックを入れてみてください。何か見つかるかもしれません。

0
Avatar
koma

他のjsファイルを削除し、

以下の部分にアラートを追加するとエラーの方になりました。

        //上記'body'で設定した内容をPUT(更新登録)する処理

        kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body, (resp) => {

            // Aアプリが正常に更新された場合

            window.alert("正常に登録できました")

            return event;

        }, (error) => {

            // Aアプリが異常で更新されなかった場合

            window.alert("レコードのタイトル登録が正常にできませんでした")

            event.error = 'レコード更新時にエラーが発生しました';

            return event;      

        });

↑こちらのようにエラーがでました。

ただ、申し訳ありません。

アプリの動作テストでの現象で、試しにアプリ更新をして、本番に反映したら、動きました。

お騒がせして申し訳ありませんでした。

運用しているアプリでしたので反映したくなかったのですが、

次回からはコピー環境を作って試したいと思います。

PUTなどの処理は動作テスト環境だと動かないということですかね。

 

0
Avatar
koma

https://developer.cybozu.io/hc/ja/community/posts/202058494

だめみたいですね。こちらにありました。

haradaさま、本当にありがとうございました。

0
Avatar
harada

今回のやりとりの中で

1)PUT時に存在しないフィールドコードを指定してもエラーとならない。

2)「アプリの動作テスト機能」を使うとREST API系はテストできない。404エラーになる。

3)ページが遷移するとコンソールログのエラー消えてしまう件はchromeでデベロッパーツールで「ログを保持する」にチェックを入れればコンソールログを残せる。

を学べました。ありがとうございます。

 

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