新規投稿
フォローする

レコード空更新で関連レコードの集計値を一覧画面で更新したい

背景・実現したいこと

一覧画面に更新ボタンを設置し、関連レコード集計値(数値フィールド)を一覧画面で更新したいです。

① こちらの記事を拝見し、関連レコード集計値を数値フィールドに表示しました。

こちらの記事を拝見し、更新ボタンを設置しました。

upbateボタンをクリックしても集計値の変更はされません。(各レコードの編集画面を開き、保存すると更新されます。)

修正点をご教授いただけますと幸いです。

エラー情報(開発者ツールのコンソール)

 コンソールには表示されません。

利用したソースコード

ちなみに、レコード編集画面で該当の文字列フィールドの値から関連レコードが正しく表示されますが、集計は保存実行後でないとされません。

'app.record.create.show',    'app.record.edit.show',のイベント表記は働かないのでしょうか?

(function() {
  "use strict";
  kintone.events.on([
    'app.record.create.show',
    'app.record.edit.show',
    'app.record.create.submit',
    'app.record.edit.submit'
  ], function(event){
    return new kintone.Promise(function(resolve){
      RelatedRecordsFieldManager.prototype.getFieldProperties().then(function(){
        (new RelatedRecordsFieldManager('関連レコード')).getRecords(event.record).then(function(records){
          event.record.売上.value = records.reduce(function(sum, record){
          return sum + Number(record.会計売上.value);
          }, 0);
          resolve(event);
        });
      });
    });
  });
}());

 ②(参考記事から変更しておりません。)

(function() {
  "use strict";
  var getRecords = function(app, tmpRecords){
    var limit = 500;
    var tmpRecords = tmpRecords || [];
    return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
      app: app,
      query: 'limit ' + limit +' offset ' + tmpRecords.length
    }).then(function(response){
      tmpRecords = tmpRecords.concat(response.records);
      return response.records.length === limit ? getRecords(app, tmpRecords) : tmpRecords;
    });
  }
  var putRecords = function(app, records){
    var limit = 100;
    return kintone.Promise.all(
      records.reduce(function(recordsBlocks, record){
        if(recordsBlocks[recordsBlocks.length - 1].length === limit){
          recordsBlocks.push([record]);
        }else{
          recordsBlocks[recordsBlocks.length - 1].push(record);
        }
        return recordsBlocks;
      }, [[]]).map(function(recordsBlock){
        return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', {
          app: app,
          records: recordsBlock
        });
      })
    );
  }
  kintone.events.on('app.record.index.show', function(event){
    if(document.getElementById('updateButton') !== null) return;
    var button = document.createElement('button');
    button.innerHTML = 'update';
    button.id = 'updateButton';
    kintone.app.getHeaderMenuSpaceElement().appendChild(button);
    button.addEventListener('click', function(){
      getRecords(kintone.app.getId()).then(function(records){
        putRecords(kintone.app.getId(), records.map(function(record){
          return {
            id: record.$id.value,
            record: {}
          };
        })).then(function(){
          alert('updated');
          location.reload();
        });
      });
    });
    return event;
  });
})();
0

4件のコメント

Avatar
TO

ayoko様

コンソールには何もでてこない,とのことですが,②で

        })).then(function(){
          alert('updated');
          location.reload();
        });

これがあって,更新ができた場合は「updated」というメッセージがポップアップで表示されます.
これはでてきますか?

また,前後しますが①で,

        (new RelatedRecordsFieldManager('関連レコード')).getRecords(event.record).then(function(records){

このコード内にgetRecordsがありますが,
このコードがあるjsファイル内にgetRecordsがないと機能しないと思いますが,同じファイル内にありますか?
コードではresolveしかないのでエラーになってもconsoleには表示されません.
このあたりを確認ください.

0
Avatar
ayoko

TO 様

コメントありがとうございます。

ご指摘部分、以下の通りです。

・更新ができた場合は「updated」というメッセージがポップアップで表示されます.
これはでてきますか?

→ダイアログ表示されます。

・このコードがあるjsファイル内にgetRecordsがないと機能しないと思いますが,同じファイル内にありますか?

→参考記事のコンストラクタを別ファイルで保存しています。

そもそも設定を間違えているのでしょうか?

ご教授いただければ幸いです。どうぞよろしくお願いいたします。

0
Avatar
TO

ayoko様

>参考記事のコンストラクタを別ファイルで保存しています。
webpackをつかってimport/exportしているなら良いのですが,そうでない場合は,javascriptでは別ファイルにした関数は,そのままでは呼び出すことができません.
目指せ!JavaScriptカスタマイズ中級者(1) 〜webpack編〜
上記以外にグローバル関数として使う方法もあるにはあるのですが,あまりお勧めはできません.

使う関数だけコピペして,動作するか検証してみるのが良いかと思います.

0
Avatar
ayoko

TO 様

ご教示ありがとうございます。

参考記事をもう一度確認し、

 return {
            id: record.$id.value,
            record: {}
          };

部分を書き換えたところ、一覧画面で更新できました。

お騒がせいたしました。

この度はご親切にありがとうございました。

ayokoにより編集されました
0
サインインしてコメントを残してください。