Promiseを利用してのルックアップ自動更新について

いつも当サイトを参考にさせていただいております。

現在、顧客アプリの文書を保存したタイミングで、ルックアップ参照している見積書アプリの複数文書に対してルックアップ更新する処理を作成しています。

第11回 REST APIを利用したレコード更新(

https://cybozudev.zendesk.com/hc/ja/articles/204537310-%E7%AC%AC11%E5%9B%9E-REST-API%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E6%9B%B4%E6%96%B0  )を参考にしたコードでは、見積アプリに対してのルックアップ更新がうまくいきますが、Promiseを利用した以下のソースでは、文書の更新はされるのですがルックアップ更新がうまくいきません。PromiseでのPUTではルックアップ更新はされないのでしょうか。

var target = record.CustmNo.value;
var appid = 111;
return new Promise(function(resolve, reject) {
   return kintone.api(
       kintone.api.url('/k/v1/records', true),
       'GET', {
           app: appid,
          query: 'CustmNo = "'+ target + '" '
      }
).then(function(resp){

if(resp.records.length !== 0){

var records = createPutRecords(resp.records);
//該当文書をルックアップ更新
return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', {
"app" : appid,
"records" :records
}).then(function(res){
     resolve();
});
}
return event;
resolve();
});
});

function createPutRecords(records) {
var putRecords = [];
for (var i = 0, l = records.length; i < l; i++) {
var record = records[i];

putRecords[i] = {
"id": record.$id.value,
"CustmNo": {
value: record.CustmNo.value
}
};
}
return putRecords;
}

 

また、**kintone Utility for JavaScript **のkintoneUtility.rest.putAllRecordsを利用した場合も処理は正常に戻って更新成功となっていますが、ルックアップ更新はされません。

コードが悪いのか、Promiseではそもそも更新ができないのかご教示いただければと思います。

 

K.Naga さん

下記のように、return event; がありますので、Promise が完了するresolve処理前にイベント処理が完了しています。
また、イベント処理終了時にevent を返す必要がありますので、resolve(event); とします。
とりあえず試してみてください。

※else も必要だと思います。

}).then(function(res){
     resolve();
});
}
return event;
resolve();


->

}).then(function(res){
     resolve(event);
});
}
else {
// return event;
resolve(event);
}

rex0220さん

はじめまして。早速のご返信ありがとうございます。

確かに、return event があるとresolve(event)が実行されませんでした。失礼しました。

ただ、resolve(event)にしても、成功して更新はされるのですが、ルックアップ更新は全くされずrevisionだけがあがって行く状況です。

他の原因がないかも調べてみます。

もしかすると、submit イベントで処理しようとしていますか?

submit イベントでは、まだ変更内容がレコードに反映されていません。

submit.success で処理する必要があります。

rex0220さん

ありがとうございます。

submit.success で処理をしています。

ログをみてもSuccessで戻ってきています。

第11回 REST APIを利用したレコード更新 の記事にあるREST APIのコードを参考した場合ですと、ルックアップ更新がうまくいっていますので、Promise処理の記述の問題かとと思ったのですが。引き続き調べてみます。

 

>ログをみてもSuccessで戻ってきています。

念のため、‘app.record.edit.submit’ イベントではなく、‘app.record.edit.submit.success’ イベントでしょうか?

ちょっと気になりましたので。submit.success イベントで処理されていたならすみません。

 

rex0220さん

表現がわかりにくくてすみませんでした。

イベントは 'app.record.edit.submit.success’です。

ログのSuccessというのは監査ログの閲覧にてAPI Operationの結果がSuccessということでした。

ルックアップ更新先のアプリでおかしなことをしていないかを含めて再度全体を見直してみます。

わかりました、putRecords に、“record”: { ~ がありません。

rex0220さん

ありがとうございました。

Promise処理ばかりに気をとられていました。

すごく基本的なところでした。

うまく動作しました。

遅くまでご対応いただき本当に有難うございました。