フィールドへの値のセットについて

こんにちは。kintoneカスタマイズ初心者です。

以下のコードを利用して、レコードの編集・レコード作成時に関連レコードで表示させている値を集計して編集・作成中のレコードのフィールドにセットしたいです。

(() => {
  'use strict';

  kintone.events.on(['app.record.edit.show','app.record.create.change.契約日'], async function(event) {
    const query = '工事名_日報="' + event.record['工事名_台帳'].value + '"'
    const appId = kintone.app.getRelatedRecordsTargetAppId("該当工事日報一覧");

    const client = new KintoneRestAPIClient();
    const res = await client.record.getAllRecords({app: appId, condition: query});
    console.log(res);

    var sum_Op = 0; //作業員コスト
    var sum_OoC = 0; //契約外コスト
    var sum_ME = 0; //機械設備コスト
    var sum_VM = 0; //各種資材コスト
    var sum_WC = 0; //契約内コスト

    res.forEach((record)=>{
      sum_Op += record['コスト_小計_作業員'].value ? parseInt(record['コスト_小計_作業員'].value) : 0;
      sum_OoC += record['コスト_小計_契約外'].value ? parseInt(record['コスト_小計_契約外'].value) : 0;
      sum_ME += record['コスト_小計_機械設備'].value ? parseInt(record['コスト_小計_機械設備'].value) : 0;
      sum_VM += record['コスト_小計_各種資材'].value ? parseInt(record['コスト_小計_各種資材'].value) : 0;
      sum_WC += record['コスト_小計_契約内'].value ? parseInt(record['コスト_小計_契約内'].value) : 0;
    });

     event.record['作業員コスト合計'].value = sum_Op;
     event.record['契約外コスト合計'].value = sum_OoC;
     event.record['機械設備コスト合計'].value = sum_ME;
     event.record['各種資材コスト合計'].value = sum_VM;
     event.record['契約内コスト合計'].value = sum_WC;
     kintone.app.record.set(event);
     return event;
  });

})();

しかし、このコードを適応してみると「You cannot call kintone.app.record.set() in handler or during processing a handler.」というエラーメッセージがコンソールに表示されうまく動作しません。エラーメッセージの意味とエラーの発生個所が最後の方の「kintone.app.record.set(event);」であることは分かるのですが、解決策を見出すことができず困っています。解決のためのアドバイスを頂けないでしょうか。

なお、「複数のレコードを取得する」APIを用いたものではうまく動作していたのですが、将来的に取得するレコードの数が500を超える可能性があるためそれに対応できるgetAllRecordsを使用したところ、今回の問題に直面しました。うまく動作したコードは以下の通りです。

(function() {
  kintone.events.on(['app.record.edit.show','app.record.create.change.契約日'], function(event) {
    const appId = kintone.app.getRelatedRecordsTargetAppId("該当工事日報一覧");
    const query = '工事名_日報="' + event.record['工事名_台帳'].value + '"' + 'limit 500'; 
    const body = {
      'app' : appId,
      'query' : query
    };
    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
      var sum_Op = 0; //作業員コスト
      var sum_OoC = 0; //契約外コスト
      var sum_ME = 0; //機械設備コスト
      var sum_VM = 0; //各種資材コスト
      var sum_WC = 0; //契約内コスト
      resp.records.forEach((record)=>{
        sum_Op += record['コスト_小計_作業員'].value ? parseInt(record['コスト_小計_作業員'].value) : 0;
        sum_OoC += record['コスト_小計_契約外'].value ? parseInt(record['コスト_小計_契約外'].value) : 0;
        sum_ME += record['コスト_小計_機械設備'].value ? parseInt(record['コスト_小計_機械設備'].value) : 0;
        sum_VM += record['コスト_小計_各種資材'].value ? parseInt(record['コスト_小計_各種資材'].value) : 0;
        sum_WC += record['コスト_小計_契約内'].value ? parseInt(record['コスト_小計_契約内'].value) : 0;

      });
       event.record['作業員コスト合計'].value = sum_Op;
       event.record['契約外コスト合計'].value = sum_OoC;
       event.record['機械設備コスト合計'].value = sum_ME;
       event.record['各種資材コスト合計'].value = sum_VM;
       event.record['契約内コスト合計'].value = sum_WC;
       kintone.app.record.set(event);
       console.log("success")
    });
    return event;
  });  
})();

よろしくお願いします。

S_Eさん、こんばんは。

いくつか問題ございますが、
まず、ご質問されていますエラーの原因は、
以下のURLの制限事項に書かれている内容となります。

今回の場合ですと、
return event;
の行で、値の設定はされていますので、編集画面表示イベントの際の処理につきましては、
kintone.app.record.set(event);
の行を削除されると動くと思います。

また、changeイベントでは、async/awaitは使えないので、そちらでもエラーが出ると思います。
そちらの解決方法については、
developer community内の、別の投稿でありますので、検索してみてください。

頑張ってください。

田中太郎さんご返事ありがとうございます。返信が遅れてしまい申し訳ありません。

カスタマイズについては、このトピックの投稿後も試行錯誤を重ね現在は一応は動作しているところまでこぎつけることができました。ただしご指摘通りchangeイベント関係のエラー(app.record.create.change.契約日 is not allowed to return “Thenable” object)が発生している状態です。このエラーが出ているのにchangeイベントが発火しても期待通りの動作をしていることは不思議ではありますが、これについては他の投稿を参考に理由を探ってみようと思います。
アドバイスに感謝いたします

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