ここのdeveloper networkを調べて、レコード一覧画面を開くと、入社年月日から勤続年数を計算して値を書き換えるスクリプトを書きました。
実際に値は書き換わってますが、表示が更新されません。ブラウザの画面をリロードすると画面上の値も更新されますが、レコード一覧画面を開いただけで画面上の値も計算した結果になる方法はあるのでしょうか?
「同期・非同期」という処理は関係するのかなど調べきれていません。
コードは以下のように書きました。よろしければアドバイスお願いします。
- jQuery.noConflict();
- (function($) {
- “use strict”;
- // ロケールを初期化
- moment.locale(‘ja’);
- //アップデートするアプリのID(このアプリのID)
- var updateAppId = kintone.app.getId();
- //レコード一覧画面を開くと実行される
- kintone.events.on(‘app.record.index.show’, function(event) {
-
if (event.viewName !== '(すべて)') { //すべてのレコードが表示された状態で
-
window.confirm('ビューを(すべて)にしてください');
-
return;
-
}
-
// リクエストパラメータ
-
var requestParam = {
-
'app': kintone.app.getId(), //このアプリのID
-
'query': kintone.app.getQuery() //今の表示(クエリ)の状態を取得
-
};
-
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', requestParam, function(resp) {
-
var records = resp.records;
-
updateKinTerm(updateAppId, createPutRecords(records)); // 勤続年数の更新
-
});
-
return event;
- });
- // 今日までの年月計算
- function getYearMonth(dtDate) {
-
var dtToday = moment();
-
var dtFrom = moment(dtDate);
-
var years = 0;
-
var months = 0;
-
//入力日が過去日付の場合計算
-
if (!dtToday.isBefore(moment(dtFrom), 'day')) {
-
years = dtToday.diff(moment(dtFrom), 'years');
-
months = dtToday.diff(moment(dtFrom), 'months') % 12;
-
}
-
return years + "年 " + months + "ヶ月";
- }
- //置き換える勤続年数のデータを作成
- function createPutRecords(records) {
-
var putRecords = [];
-
for (var i = 0, l = records.length; i \< l; i++) {
-
var record = records[i];
-
var Dterm = getYearMonth(record.JoiningDate.value);
-
putRecords[i] = {
-
id: record.レコード番号.value,
-
record: {
-
kin\_term: {
-
value: Dterm
-
}
-
}
-
};
-
}
-
return putRecords;
- }
- //勤続年数を更新する関数
- function updateKinTerm(appId, records) {
-
kintone.api(
-
kintone.api.url('/k/v1/records', true),
-
'PUT', {
-
app: appId,
-
records: records
-
},
-
function(resp) {
-
alert('勤続年数の更新が完了しました!');
-
}
-
);
- }
- })();