APIでレコード取得後のフィールド更新表示

別アプリから取得したレコードから、ステータスごとの件数をカウントし、フィールドに表示したいです。

console.logで確認すると、レコードの取得〜件数カウントまでは正しく動いています。
'作業中’ステータスの値を「確定人数」フィールドに値を入れて表示させたいのですが、うまくいきません。
なお、'作業中’ステータスの値は正しく計算されていて、スペースフィールドに表示はできています。

いろいろ調べてみると、
kintone.api()が非同期のため、レコードにセットする前にイベントが終わっている
のかな、と思っていますが、解決できずにいます。
どうしたらよいでしょうか?

const events = ['app.record.detail.show'];

  kintone.events.on(events, (event) => {
    const clientCode = event.record['依頼コード'].value;
    const relatedAppId = kintone.app.getRelatedRecordsTargetAppId('オファー履歴');
    const query = `依頼コード="${clientCode}"`;
    const params = {
      'app' : relatedAppId,
      'query' : query
    };
    let statusCounts = {};

    // オファー管理アプリからレコードを取得
    kintone.api('/k/v1/records', 'GET', params, (resp) => {
      statusCounts = countStatus(resp.records);

      const obj = kintone.app.record.get();
      obj.record.確定人数.value = (statusCounts['作業中'] || 0);
      kintone.app.record.set(obj);
    }, (error) => {
      console.error('Error:', error);    
    });

    return event;
  });

こんにちは。
kintone.app.record.set() はレコード詳細画面で利用できないので、
値が設定できていないかと思います。

レコード詳細画面で、フィールド値の書き換えを行いたい場合には、
1 件のレコードを更新する を利用して、レコード更新する必要があります。

API を同期的に実行する方法については、以下のページで紹介されていたので、
確認してみてください。

2 Likes

返信ありがとうございます!
完全に見落としていました。参考に調べてみます。

今回のような場合は、
「別アプリ(オファー管理)でステータスが変更になったときにこちらのアプリのフィールドも変更させる」
という形がオーソドックスなのでしょうか?

個人的にはどちらの形でも大差ないのかなと思ってます。

ただ、レコード詳細画面で REST API を利用したレコードの更新を行う場合、
更新後の値は画面更新しないと確認できないので、オファー管理でステータスが
変更されたタイミングにフィールド値を変更させるほうが使い勝手はいいのかなと思います。

1 Like

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。