レコード登録成功時に別のアプリに登録

JavaScriptを学習しております。

 

アプリ1:一つのレコードにその日1日の49人分の従業員の昼食弁当を 注文する/しない をテーブルに登録

アプリ2:上記アプリ1の一つのレコード(49人分)をバラバラのレコードに保存し直す。

 

アプリ1の保存ボタンを押して保存が成功すると、アプリ2が保存または更新される。という仕組みを作ろうとしています。

以下のようなコードを作成してアプリ1に設定しましたが、アプリ1を新規登録するときにアプリ2へ登録できません。しかしアプリ1を更新登録するとアプリ2へも登録されます。登録と更新では何か方法が違うのでしょうか?更新の際はコンソール画面に情報が表示されますが、新規登録の際は画面がすぐにリロードされてコンソール画面が読めません。

アプリ1で49人分のテーブルからアプリ2へ送信するデータを作成する際にループ処理が発生していました。今回のコードでは問題を簡単にするために、前もってアプリ1の複数文字列フィールドに入れてあるものを①変数に代入して、②配列に変換して、③送信する。というようにしました。

「データがあったら更新、なければ登録」のために「kintone Utility Library for JavaScript」のkintoneUtility.rest.upsertRecordsを使用してみました。

Promiseを使った処理の順番を制御する説明をじっくり呼んでみていますが、経験が浅くて理解度が低いです。ちなみにこのコードにはpromiseという単語は使われてないですが、書き方が似ています。この書き方でも処理の順番を考慮した書き方という理解で良いでしょうか?

よろしくお願い致します。

 

  1. (function() {
  2.    “use strict”;
  3.    // 保存ボタンクリック後、保存が成功すると。別アプに登録または更新
  4.    kintone.events.on([‘app.record.create.submit.success’,‘app.record.edit.submit.success’], function(event) {
  5.       // 画面全体の情報を取得
  6.       var record = event.record;
  7.       //複数行文字列フォームに保存してある49人分のデータを取得
  8.       var json_text_w = record[‘従業員送信データ’].value;
  9.       //文字列を配列に変換
  10.       var records_w = JSON.parse(json_text_w);
  11.       var param_w = {
  12.          app: 86,
  13.          records: records_w,
  14.          isGuest: false,
  15.       };
  16.       //「kintone Utility Library for JavaScript」を使用してデータが有れば更新、なければ登録
  17.       kintoneUtility.rest.upsertRecords(param_w).then(function(resp_w) {
  18.          // 成功時の処理を記載する
  19.          console.log(JSON.stringify(resp_w, null, ’ '));
  20.          return event;
  21.       }).catch(function(error) {
  22.          // エラー時の処理を記載する
  23.          console.log(error.message);
  24.       });
  25.  
  26.    }); 
  27. })();

 

 1点補足情報です。アプリ1を新規登録でアプリ2に49個のレコードが追加できるときも稀にあります。それが、どういうタイミングなのかが分かりません。アプリ1の更新だと必ずアプリ2にも登録できています。

もう一回、入門ページの「kintone.Promiseの書き方・使い方~超入門編~」

https://developer.cybozu.io/hc/ja/articles/215029846-kintone-Promise%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9-%E4%BD%BF%E3%81%84%E6%96%B9-%E8%B6%85%E5%85%A5%E9%96%80%E7%B7%A8-

に戻って一番最初のコードを参考にして書き直してみたところ、うまく動いております。

  1. (function() {
  2.   “use strict”;
  3.   // 保存ボタンクリック後、保存が成功すると。別アプに登録または更新
  4.    kintone.events.on([‘app.record.create.submit.success’,‘app.record.edit.submit.success’], function(event) {
  5.       // 画面全体の情報を取得
  6.       var record = event.record;
  7.       //複数行文字列フォームに保存してある49人分のデータを取得
  8.       var json_text_w = record[‘従業員送信データ’].value;
  9.       //文字列を配列に変換
  10.       var records_w = JSON.parse(json_text_w);
  11.       var param_w = {
  12.          app: 86,
  13.          records: records_w,
  14.          isGuest: false,
  15.       };
  16.       return new kintone.Promise(function(resolve,reject){
  17.          //「kintone Utility Library for JavaScript」を使用してデータが有れば更新、なければ登録
  18.          kintoneUtility.rest.upsertRecords(param_w).then(function(resp_w) {
  19.             // 成功時の処理を記載する
  20.             console.log(JSON.stringify(resp_w, null, ’ '));
  21.             resolve(event);
  22.          }).catch(function(error) {
  23.             // エラー時の処理を記載する
  24.             console.log(error.message);
  25.             resolve(event);
  26.          });
  27.       });
  28.    }); 
  29. })();