経験が浅く、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;
});
});
})();
どこかおかしいところがありますでしょうか。
アドバイス、よろしくお願いいたします。
14件のコメント
エラーなく登録されてしまいました。
アプリ番号が合っているか?
フィールドコードが合っているか?を確認する感じでしょうか?
>harada さま
ご回答ありがとうございます。
はい、確認はしたのですが登録されないのです。
エラーも表示されていなかったということなので、他のjsファイルとなにかバッティングか順番に問題があるかもしれませんね。
書き方は間違いないということはわかったのでよかったです。
いったん、他のものを削除して試してます。
ご丁寧にありがとうございました。
と変更した上で
1)フィールドコードを故意に間違えると、レコードは追加されるが、対象のフィールドは更新されない。エラーもでない。
2)存在しないレコード番号を指定するして実行するとエラーがでる。console.logで「指定したレコード(id: 911)が見つかりません。」と表示される。レコード番号をキーに更新しているのでレコード番号が存在しないというエラーと書き込み対象フィールドが存在しないのエラーについての深刻度が違うから動作が違うようです。
解決には至りませんでした。
本題とは関係ありませんが、
app.record.create.submit.success
のイベントは
レコード追加イベント – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/201941984#success
レコード追加が成功している時点ですので、event.errorがあったとしても表示する場所がないように思います。
event.error = 'レコード更新時にエラーが発生しました';
のapp.record.create.submit.successをapp.record.detail.showに書き換えて、レコード番号が発行されている詳細ページを表示させるとどうなるでしょうか?
自動採番プラグイン – 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
こういうプラグインをつかうことを検討するのも選択肢になると思います。
>haradaさま
ご丁寧に検証までありがとうございます。
>レコード追加が成功している時点ですので、event.errorがあったとしても表示する場所がないように思います。
だから、一瞬だけ表示されるのですかね。
window.alert("~")の方がわかりやすいでしょうか?
そもそも処理は通っているから
より、上でエラー表示する方がいいでしょうか。
>自動採番プラグイン – cybozu developer network
こういうのあるんですね!
たしかに使えそうです。
ありがとうございます。
「そもそも処理は通っているから
より、上でエラー表示する方がいいでしょうか。」
というのは、なにか認識がちがうようです。
1)kintone上で保存ボタンをおす。
2)レコードを書き込み、成功する(レコード番号が発番される)
3)app.record.create.submit.successのイベントでレコード番号を取得して、'【VOC】' + id の準備がされる。
4)レコード番号をキーに更新をかける。
この4)の処理で何かが起きて期待する動作にならないが、エラーもでない。という状況とおもいます。
4)より上ということはないと思います。
レコード追加が成功していると書いたのは、2)の時点で画面遷移が始まっているの画面に返せない状態のように考えました。
とてもわかりやすいです、ありがとうございます。
なるほど。
>この4)の処理で何かが起きて期待する動作にならないが、エラーもでない。
この時に「更新ができなかった」というエラーを出すのはharadaさまが記載しているように
window.alert("~")がわかりやすそうですね
1)私の環境では、window.alert()を入れても、どうもエラーではなく正常な流れをとっていることしかわかりませんでした。
2)chromeのデベロッパーツールのコンソールで一瞬エラーが出て消えてしまうなら、ログを保持にチェックを入れてみてください。何か見つかるかもしれません。
他のjsファイルを削除し、
以下の部分にアラートを追加するとエラーの方になりました。
↑こちらのようにエラーがでました。
ただ、申し訳ありません。
アプリの動作テストでの現象で、試しにアプリ更新をして、本番に反映したら、動きました。
お騒がせして申し訳ありませんでした。
運用しているアプリでしたので反映したくなかったのですが、
次回からはコピー環境を作って試したいと思います。
PUTなどの処理は動作テスト環境だと動かないということですかね。
https://developer.cybozu.io/hc/ja/community/posts/202058494
だめみたいですね。こちらにありました。
haradaさま、本当にありがとうございました。
今回のやりとりの中で
1)PUT時に存在しないフィールドコードを指定してもエラーとならない。
2)「アプリの動作テスト機能」を使うとREST API系はテストできない。404エラーになる。
3)ページが遷移するとコンソールログのエラー消えてしまう件はchromeでデベロッパーツールで「ログを保持する」にチェックを入れればコンソールログを残せる。
を学べました。ありがとうございます。