モバイルの新規登録イベントでREST APIレコード取得がエラーとなる

活動記録アプリに登録(更新・新規登録)が成功すると、最新の活動日を取得して、顧客アプリの最終活動日フィールドを更新する処理を作成しました。

PC版では、うまく処理できましたが、モバイルではうまくいきません。

詳しく確認したところ、活動記録アプリの新規登録の場合にここの処理で

59  kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, body , function(resp) { 

エラーとなります。

window.alert(“GETerror”); 

が表示されました。

 

一方、モバイルでも、

45   ・・・ ‘mobile.app.record.edit.submit.success’

のイベントはエラーとなりませんでした。

 

モバイル版のAPI呼び出しが必要なのかと思いましたが、更新イベントではエラーにはなりませんので、他に原因がわかりません。

あともう一歩のところまでできたのですが、どなたかお知恵を拝借できれば幸甚です。

 

  1. (function() {

  2.  “use strict”;

  3.  

  4. //PC用

  5.  kintone.events.on([‘app.record.edit.submit.success’, ‘app.record.index.edit.submit.success’,‘app.record.create.submit.success’,

  6. ],function(event) {

  7.  //window.alert(‘はじめようkintone JavaScript API’);

  8.  

  9.  var r = event.record;

  10.  //console.log(r[‘顧客No’].value); 

  11.  var n =r[‘顧客No’].value

  12.  

  13.  var body = { 

  14.       “app”: 16, 

  15.       “query”: ‘顧客No=’ + n + ’ order by 対応日時 desc limit 1’,

  16.       “fields”: [‘対応日時’] 

  17.  }; 

  18.  

  19.      

  20.  kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, body , function(resp) { 

  21.    // success 

  22.    var record = resp.records;

  23.    var lastdate = record[0][‘対応日時’].value

  24.    console.log(lastdate); 

  25.    var body2 = { 

  26.     “app”: 15, 

  27.     “id”: n,

  28.     “record”: {‘最終活動日’: {‘value’: lastdate}}}

  29.     kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, body2, function(resp2) {

  30.       console.log(resp2);

  31.     }, function(error) {// error 

  32.       window.alert(error);

  33.     } )

  34.  }, function(error) { 

  35.     // error 

  36.       window.alert(error); 

  37.  })

  38.  

  39.  

  40.  }

  41.  )//kintone.events.on終わり

  42. //mobile用

  43. kintone.events.on([‘mobile.app.record.edit.submit.success’, ‘mobile.app.record.create.submit.success’],function(event) {

  44. //window.alert(‘はじめようkintone JavaScript API’);

  45.  

  46. var r = event.record;

  47. window.alert(r[‘顧客No’].value); 

  48. var n =r[‘顧客No’].value

  49.  

  50. var body = { 

  51.      “app”: 16, 

  52.      “query”: ‘顧客No=’ + n + ’ order by 対応日時 desc limit 1’,

  53.      “fields”: [‘対応日時’] 

  54. }; 

  55.  

  56.     

  57. kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, body , function(resp) { 

  58.   // success 

  59.   var record = resp.records;

  60.   var lastdate = record[0][‘対応日時’].value

  61.   window.alert(lastdate); 

  62.   var body2 = { 

  63.    “app”: 15, 

  64.    “id”: n,

  65.    “record”: {‘最終活動日’: {‘value’: lastdate}}}

  66.    kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, body2, function(resp2) {

  67.      console.log(resp2);

  68.    }, function(error) {// error 

  69.      window.alert(“PUTerror”);

  70.    } )

  71. }, function(error) { 

  72.    // error 

  73.      window.alert(“GETerror”); 

  74. })

  75. }

  76. )//kintone.events.on終わり

  77.  

  78. })(); 

    

 

 

 

栗栖 史匡様

お世話になっております.
トヨクモの江田と申します.

まずは,errorオブジェクトの中身を確認してみると良いと思います.
chromeであればDevToolsのブレークポイントという機能で,処理を一時停止して変数の確認などができます.
https://developers.google.com/web/tools/chrome-devtools/javascript/breakpoints?hl=ja

江田篤史様

 

早速のアドバイスありがとうございます。

デバッグの理解が深まりました。

ところで、今回はモバイル環境での不具合なのですが、PC環境で疑似的にモバイル環境で動作するデバッグ方法があるということでしょうか?

ぜひその方法も教えていただけますと助かります。

栗栖 史匡様

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

PCからモバイル版サイトの閲覧は可能です.
PC版URLの「k/」の後に「m/」を付け足したものがモバイル版URLとなります.


PC版: https://example.cybozu.com/k/1/edit

モバイル版: https://example.cybozu.com/k/m/1/edit

また,DevToolsの「Toggle device toolbar」(下図赤枠)を用いて切り替えることもできます.
モバイルデバイス表示に切り替え後,一度ページリロードが必要です.(モバイル版URLにリダイレクトするため)

江田篤史様

 

お世話になります。

続けてアドバイスありがとうございます。

PC版ではデバッグしながらなんとか作成できましたが、PCでもモバイル環境でテストできるんですね。

とても参考になりました!

 

早速、PCでモバイル環境にてテストしたところ、スマホではエラーとなっていた新規登録イベントではエラーなく処理が完了しました。

その後、スマホでもう一度同じ処理を行いましたが、やはりスマホでは新規登録イベントでレコード取得時にエラーとなってしまいます。

 

何か原因は考えられますでしょうか?kintoneのバグでしょうか?

スマホはiPhone8です。

栗栖 史匡様

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

ブラウザやOS依存がありそうな箇所は見当たりませんね…

そうなると実機でデバッグする他無さそうですね。
alertでerrorオブジェクトを確認するのが手っ取り早いと思います。
alert(JSON.stringify(error));

江田篤史様

お世話になります。

ご親切に何度もありがとうございます。

オブジェクトをJSON文字列に変換するメソッドですね。

function(error) { 

の中にコーディングして早速行ってみたところ、””とだけダイアログ表示されました。

エラーオブジェクトは何もないとうことでしょうか?

しかし、エラーはキャッチされているので、何かしらのエラーにはなっているんでしょうが・・・。

 

他に、エラーを調べる方法、もしくは試してみる方法などございませんか?

栗栖 史匡様

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

一度コードを簡素化して,kintone REST APIを叩けるか試していただけますか.

(function() {
  "use strict";
  kintone.events.on([
    'mobile.app.record.edit.submit.success',
    'mobile.app.record.create.submit.success'
  ], function(event) {
    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
      "app": 16,
    }, function(resp) {
      alert(JSON.stringify(resp));
    }, function(error) {
      alert(JSON.stringify(error));
    });
  });
})();

また,お使いのブラウザを教えていただけますか?

江田篤史様

 

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

早速試してみました!

PC画面上でのモバイル環境下ではalert(JSON.stringify(resp)); は以下の結果となりました。(ブラウザはChromeの83.0.4103.97(Official Build) (64 ビット)です)

{“records”:[{“対応者”:{“type”:“USER_SELECT”,“value”:[{“code”:“xxxxx@gmail.com”,“name”:“栗栖 史匡”}]},“レコード番号”:{“type”:“RECORD_NUMBER”,“value”:“87”},“更新者”:{“type”:“MODIFIER”,“value”:{“code”:“xxxxx@gmail.com”,“name”:“栗栖 史匡”}},“文字列__1行_”:{“type”:“SINGLE_LINE_TEXT”,“value”:“”},“担当者名”:{“type”:“SINGLE_LINE_TEXT”,“value”:“”},“案件名”:{“type”:“SINGLE_LINE_TEXT”,“value”:“”},“文字列__複数行__0”:{“type”:“MULTI_LINE_TEXT”,“value”:“”},“顧客名”:{“type”:“SINGLE_LINE_TEXT”,“value”:“山口”},“文字列__複数行_”:{“type”:“MULTI_LINE_TEXT”,“value”:“”},“ルックアップ”:{“type”:“SINGLE_LINE_TEXT”,“value”:“”},“対応日時”:{“type”:“DATE”,“value”:“2020-06-11”},“顧客No”:{“type”:“NUMBER”,“value”:“42”},“案件管理レコード番号_関連レコード一覧紐付け用”:{“type”:“NUMBER”,“value”:“”},“作成者”:{“type”:“CREATOR”,“value”:{“code”:“xxxxx@gmail.com”,“name”:“栗栖 史匡”}},“$revision”:{“type”:“__REVISION__”,“value”:“1”},“部署名”:{“type”:“SINGLE_LINE_TEXT”,“value”:“”},“数値_0”:{“type”:“NUMBER”,“value”:“”},“更新日時”:{“type”:“UPDATED_TIME”,“value”:“2020-06-11T05:48:00Z”},“商談メモ”:{“type”:“MULTI_LINE_TEXT”,“value”:“”},“対応内容”:{“type”:“DROP_DOWN”,“value”:null},“複数選択”:{“type”:“MULTI_SELECT”,“value”:[]},“添付ファイル”:{“type”:“FILE”,“value”:[]},“数値”:{“type”:“NUMBER”,“value”:“”},“ルックアップ_0”:{“type”:“SINGLE_LINE_TEXT”,“value”:“”},“作成日時”:{“type”:“CREATED_TIME”,“value”:“2020-06-11T05:48:00Z”},“$id”:{“type”:“__ID__”,“value”:“87”}},{“対応者”:{“type”:“USER_SELECT”,“value”:[{“code”:“xxxxx@gmail.com”,“name”:“栗栖 史匡”}]},“レコード番号”:…

 

一方、スマホで実行させた結果は昨日と同じく””のみでした。

2回試しましたが同じです。

スマホの場合はブラウザではなく、iPhoneのkintoneアプリです。updateはためてないので、最新版です。

 

と、思っていたら、この投稿の直前にもう一台のスマホ(Android)にキントーンアプリをインストールして試してみたら、PCモバイル環境での結果と同じになりました!

もともと行いたかったjsファイルに載せ替えてandroidスマホで試すと、期待通りの動きになりました!

 

となると、iPhone用アプリの固有のバグでしょうか?

 

栗栖 史匡様

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

>iPhone用アプリの固有のバグでしょうか?

その可能性が高いですね.
私自身がiphoneを所持していないため,検証はできないのですが.
因みに私のAndroid版kintoneアプリでも問題なく動作しました.

App Storeのレビューに書き込んだ方が良い回答を得られるかもしれませんね.

江田篤史様

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

最後までアドバイス賜りありがとうございました。

いろいろと勉強になりました。

また何かの機会でお力をお借りできれば幸いです。

心より感謝申し上げます。