計算項目において、発生日から何日経過しているかを算出したいので、本日日付を設定して、経過日数を表示したい。
ネットにあったサンプルを元に、以下のスクリプトを作成しましたが、追加画面及び編集画面では、設定することはできたが、一覧から詳細画面の時点では、設定できなかった。項目が編集状態でないと設定できないんだろうと、一旦諦めましたが、このような事を実現する方法はありませんでしょうか?
参考コード
(function() {
'use strict';
kintone.events.on(['app.record.detail.show','app.record.create.show','app.record.edit.show'], function(event) {
const record = event.record;
const d = new Date();
const formatDate = (d) => {
const formatd = d.getFullYear() + "-" + String(d.getMonth() + 1).padStart(2,'0') + "-" + d.getDate();
return formatd;
}
record['本日']['value'] = formatDate(d);
return event;
});
})();```
tenso
(てんそ)
2
そういうのは要件次第でやる事が変わってきます。
表示のみでいいのか。
データを保持する必要があるなら、自動更新するのか、手動更新するのか。
説明不足で申し訳ありません。
やりたいことは、一覧から詳細画面を開いた際に、本日を自動更新して、本日に関連する計算項目が更新できれば大丈夫です。
tenso
(てんそ)
4
これでできました。
(() => {
'use strict';
// レコードを更新する関数
const updateRecord = (event) => {
const record = event.record;
const today = new Date().toISOString().split('T')[0];
// 本日の値が今日の日付じゃなかったら今日にする
if (record['本日'].value !== today) {
record['本日'].value = today;
const body = {
app: kintone.app.getId(),
id: record.$id.value,
record: {
'本日': {
value: today
}
}
};
// レコードを更新するAPIを呼び出し、成功したらページをリロード
return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body)
.then(() => {
location.reload();
})
.catch((error) => {
console.error(error);
});
}
return event;
};
// レコード詳細画面が表示されたときに関数を実行
kintone.events.on('app.record.detail.show', updateRecord);
})();
ありがとうございます。確かに更新されて、計算項目も更新されました。
ただ、本日が今日で無い場合は、ちらつきがありましたので、完了日があれば更新しない等の仕様を追加して、必要以上のちらつきが出ないように工夫してみます。
大変助かりました。頂いた内容もノウハウとして勉強させていただきます。
system
(system)
Closed
6
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。