Javascript APIで違うアプリのテーブルを更新するときのエラー

受注表アプリで受注表を作成・保存したときに在庫マスターにある出入庫履歴のテーブルに対してアップデートを行うJavascriptを書いているのですが、書き込み自体は成功しているのに、console.logに出力される内容は失敗と表示されます。まだ始めたばかりで使い勝手がうまく飲み込めていないのですが、どこか間違っているのでしょうか?

実際には問題なくテーブルが更新されているので流れるデータは問題ないと思うのですが…

また、検索やテーブルアップデートに関してもう少し効率のいいやり方があればご教授ください

 

kintone.events.on(“app.record.create.submit.success”,function(event){
 //サブテーブルから商品名を取得
 var tableRecords = event.record.order_item_table.value;
 var itemCode = tableRecords[0].value[‘Lookup’].value;

 //商品名からレコードIDを取得
 var params = {
  “app”:24,//在庫マスターのアプリ
  “query”:‘itemCode = "’+itemCode+‘"’,
 };

 //検索実行
 kintone.api(
  kintone.api.url(‘/k/v1/records’,true), //path or URL
  ‘GET’,//method
  params,//data
  function(resp){ //検索に成功した場合
   console.log(“Item find success”);
   var update_id = parseInt(resp.records[0].$id.value);

   //在庫
   var params = {
    “app”:24,
    “id”:1,
    “record”:{
      “Table_0”:{
       “value”:[
        {
          “value”:{
           “order_number”:{
            “value”:“1”,
           },
           “Date_0”:{
              “value”:“2016-12-31”,
           },
           “item_qty”:{
             “value”:“20”
           }
          }
         },
//以下複数個入出庫データを作成
        ]
       }
      }
     }

     //Update実行
     kintone.api(
       kintone.api.url(‘/k/v1/record’,true), //path or URL
       ‘PUT’,//method
       params,//data
       function(resp){//在庫マスターの入出庫テーブルのアップデートに成功
         console.log(“Update Success”);//←こちらが表示されずに
       },
       function(resp){//在庫マスターの入出庫テーブルのアップデートに失敗
        console.log(“update fail”);//←これが出てしまう
        console.log(resp.message);//メッセージの内容は"Undefined"となっています。
       }
     );
    },function(resp){//検索に失敗した場合
   }
  );
 });

hide さん

エラーの原因は、非同期処理でAPIを行っており、そのAPI処理終了を待たずに、イベント処理が終了するためです。
submit.success の場合は、イベント処理終了後に画面遷移してしまいますのでエラーが発生しやすいです。

対応としては、「kintone API で Promise を使ってみよう!」にあるようにPromise 処理を使うことです。

Promise に関しては、下記に関連リンクをまとめていますので、よろしければ見てください。
http://qiita.com/rex0220/items/05ebd85e918eeb16e483#promise-%E9%96%A2%E9%80%A3

もう少し効率のいいやり方ですが、最近下記が公開されていますので、適用できそうでしたら検討してみてください。
「kintone Utility for JavaScript を使ってみたよ」
http://qiita.com/kiku38/items/f903fcdf0c4e3d6ac1ab

rex0220 さん

 

エラーの原因の解説ありがとうございます。

Promise処理を行ったところ正常に書き込みがされました。

ありがとうございます。

また、有用なリンクを教えていただき、ありがとうございます。
これからもよろしくお願いします。