見よう見まねでJavascriptを使ったkintoneのカスタマイズを行っています、
ごく普通の在庫更新だと思いますが、出庫伝票の登録成功時に、その商品を在庫アプリから検索して、現在在庫から出庫数を引き去るようなカスタマイズを行っています。
当初作成したJavascriptだと非同期で処理されるので正しく更新されないことがあり、「kintoneにおけるPromiseの書き方の基本」を参考にして同期処理に書き直しました。
出庫伝票には複数の商品を入力できるので、検索で商品の在庫データを一括取得し、それを一括更新するようにしています。更新後に「完了しました」のアラートを表示します。
下記に一部省略したコーディングを示しますが、更新後のアラートが表示されません。ただしいつもではなく、商品が1件の場合は表示され、3件以上の場合は表示されたりされなかったりします。ちょうど非同期で動いていた時と同様です。コンソールを見ると、アラートが表示されない場合は詳細画面へのNavigateが表示されています。
しかし、商品在庫自体は正しく更新されています(もっと件数が多いとどうなるかわかりませんが)。
以下、問題の関数です。
/**********************************************************************
* 出庫伝票の登録成功時に、出庫伝票に入力された商品を商品在庫アプリから
* 検索し、各商品の現在の在庫数から出庫数を減じて商品在庫を一括更新する
* 出庫伝票のレコード追加画面の保存成功後のイベント
* ‘app.record.create.submit.success’ から呼び出される関数である
***********************************************************************/
function zaikoKensakuKousin(event) {
console.log(“zaikoKensaku Start”);
/* 出庫伝票のeventより入力された商品番号を取得し、商品在庫検索のqueryを parmに作成する。(省略)*/
// 在庫検索のREST APを実行
return kintone.api(url, ‘GET’, parm).then(function(resp){
//正常時の処理
console.log(“在庫検索OK”);
/*検索結果から商品在庫の現在在庫数-出庫伝票の出庫数を計算し、更新用
のparmを作成する。(省略)*/
// 在庫更新のREST APを実行 //promiseを返す
return kintone.api(url, ‘PUT’, parm);
}).then(function(resp2){
//正常時の処理
console.log(“在庫更新OK”);
alert(“完了しました。”);
return event;
}).catch(function(resperr){
//エラー発生時の処理
console.log(“エラー発生”);
event.error = resperr.messagel
return event;
});
}
どこが間違っているのかわかりません。何かヒントはありませんでしょうか。