レコード一覧画面の値が更新されない。リロードすれば更新される。

ここのdeveloper networkを調べて、レコード一覧画面を開くと、入社年月日から勤続年数を計算して値を書き換えるスクリプトを書きました。

実際に値は書き換わってますが、表示が更新されません。ブラウザの画面をリロードすると画面上の値も更新されますが、レコード一覧画面を開いただけで画面上の値も計算した結果になる方法はあるのでしょうか?

「同期・非同期」という処理は関係するのかなど調べきれていません。

コードは以下のように書きました。よろしければアドバイスお願いします。

 

  1. jQuery.noConflict();
  2. (function($) {
  3. “use strict”;
  4. // ロケールを初期化
  5. moment.locale(‘ja’);
  6. //アップデートするアプリのID(このアプリのID)
  7. var updateAppId = kintone.app.getId();
  8. //レコード一覧画面を開くと実行される
  9. kintone.events.on(‘app.record.index.show’, function(event) {
  10. if (event.viewName !== '(すべて)') { //すべてのレコードが表示された状態で
    
  11.   window.confirm('ビューを(すべて)にしてください');
    
  12.   return;
    
  13. }
    
  14. // リクエストパラメータ
    
  15. var requestParam = {
    
  16.   'app': kintone.app.getId(), //このアプリのID
    
  17.   'query': kintone.app.getQuery() //今の表示(クエリ)の状態を取得
    
  18. };
    
  19. kintone.api(kintone.api.url('/k/v1/records', true), 'GET', requestParam, function(resp) {
    
  20.   var records = resp.records;
    
  21.   updateKinTerm(updateAppId, createPutRecords(records)); // 勤続年数の更新
    
  22. });
    
  23. return event;
    
  24. });
  25. // 今日までの年月計算
  26. function getYearMonth(dtDate) {
  27. var dtToday = moment();
    
  28. var dtFrom = moment(dtDate);
    
  29. var years = 0;
    
  30. var months = 0;
    
  31. //入力日が過去日付の場合計算
    
  32. if (!dtToday.isBefore(moment(dtFrom), 'day')) {
    
  33.   years = dtToday.diff(moment(dtFrom), 'years');
    
  34.   months = dtToday.diff(moment(dtFrom), 'months') % 12;
    
  35. }
    
  36. return years + "年 " + months + "ヶ月";
    
  37. }
  38. //置き換える勤続年数のデータを作成
  39. function createPutRecords(records) {
  40. var putRecords = [];
    
  41. for (var i = 0, l = records.length; i \< l; i++) {
    
  42.   var record = records[i];
    
  43.   var Dterm = getYearMonth(record.JoiningDate.value);
    
  44.   putRecords[i] = {
    
  45.     id: record.レコード番号.value,
    
  46.     record: {
    
  47.       kin\_term: {
    
  48.         value: Dterm
    
  49.       }
    
  50.     }
    
  51.   };
    
  52. }
    
  53. return putRecords;
    
  54. }
  55. //勤続年数を更新する関数
  56. function updateKinTerm(appId, records) {
  57. kintone.api(
    
  58.   kintone.api.url('/k/v1/records', true),
    
  59.   'PUT', {
    
  60.     app: appId,
    
  61.     records: records
    
  62.   },
    
  63.   function(resp) {
    
  64.     alert('勤続年数の更新が完了しました!');
    
  65.   }
    
  66. );
    
  67. }
  68. })();

 

書き忘れましたが、Cybozu CDN と言うものも使っています。
https://js.cybozu.com/jquery/3.2.1/jquery.min.js
https://js.cybozu.com/momentjs/2.18.1/moment-with-locales.min.js

ちなみに上のコードは、この投稿で見やすくするために、半角スペースを全角スペースに置き換えています。

更新処理の後に、リロードする処理を入れて、自動でリロードさせる方法はいかがでしょうか。

cakerさん

ありがとうございます。

実はやってみたんですが、「レコード一覧画面を開く」イベントで実行されるので、リロードされるとまたこのスクリプトが実行されてしまい無限ループになってしまいます。