# 日付の自動更新をJavascriptでカスタマイズする方法

**URL:** <https://community.cybozu.dev/t/topic/7774>\
**Category:** kintone 開発相談\
**Created:** [2023 年 7 月 11 日午前 5:56 UTC](https://community.cybozu.dev/t/topic/7774 "2023-07-11T05:56:09Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![hira](https://avatars.discourse-cdn.com/v4/letter/h/7993a0/32.png) [@hira](https://community.cybozu.dev/u/hira)\
**Post date:** [2023 年 7 月 11 日午前 5:56 UTC](https://community.cybozu.dev/t/topic/7774/1 "2023-07-11T05:56:09Z")

</div>

現在、Javascriptを用いてKintoneのカスタマイズを検討しております。  
カスタマイズ初心者のためエラーの原因と解消方法が分からず困っています。

実行条件は以下です。  
契約状況フィールドが「継続」で、契約期限が「今日」より過去の場合、  
契約期限に、自動更新年（ｎ年）を足した日付を契約更新日フィールドに自動で計算し出力する

例）フィールド名：値  
契約状況：継続（ドロップダウン）  
契約期限：2023/7/10（日付）  
更新年度：2（年：数値）  
→契約更新日：2025/7/10（日付）

★window.alert(‘契約更新しました’);にブレイクポイントを設定し処理実行したところ、  
日付の更新処理は反映しているが、Kintone画面上では反映されていない状況です。  
エラーは発生しておりませんが、処理が反映されていない場合、どのような問題が考えられますでしょうか。  
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－  
(() =\> {  
‘use strict’;

kintone.events.on(‘app.record.edit.show’, (event) =\> {

// メニューの上側の空白部分にボタンを設置  
const myIndexButton = document.createElement(‘button’);  
myIndexButton.id = ‘my\_index\_button’;  
myIndexButton.innerText = ‘最新契約更新日の更新’;  
myIndexButton.onclick = () =\> {

```
 window.alert('契約更新しますか？');

```

const situation = event.record.状態.value;  
const today = dayjs();  
const checkDay = dayjs(event.record.契約期限.value);  
const checkValue = event.record.更新年度.value;  
const addedDate = checkDay.add(checkValue,‘year’)  
//もし「状況」が「継続」かつ最新契約更新日が「今日以前」だったら処理実行する  
if (situation === ‘継続’ && checkDay \< today){  
event.record.契約更新日.value = addedDate;  
★ window.alert(‘契約更新しました’);  
}  
return event;

};

kintone.app.record.getSpaceElement(‘my\_space\_field’).appendChild(myIndexButton);

})();

---

<div class="post-metadata">

**Author:** ![mls-hashimoto](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/mls-hashimoto/32/34_2.png) [@mls-hashimoto](https://community.cybozu.dev/u/mls-hashimoto)\
**Post date:** [2023 年 7 月 11 日午前 7:36 UTC](https://community.cybozu.dev/t/topic/7774/2 "2023-07-11T07:36:55Z")

</div>

```javascript
myIndexButton.onclick = () => {
// 略

```

ボタンのクリックイベントでレコードの中身を書き換える場合、[レコードの値を取得する](https://cybozu.dev/ja/kintone/docs/js-api/record/get-record/)と[レコードに値をセットする](https://cybozu.dev/ja/kintone/docs/js-api/record/set-record-value/)が必要です。

event.recordの変更で値を変えられるのはあくまでイベントが発生した時（今回の場合だとedit.show=編集開始時）で、edit.showで実行しているのはボタンの設置処理だけ、実際にボタンをクリックした時はタイミングが違うから変えられない、と覚えると良いと思います。

---

<div class="post-metadata">

**Author:** ![hira](https://avatars.discourse-cdn.com/v4/letter/h/7993a0/32.png) [@hira](https://community.cybozu.dev/u/hira)\
**Post date:** [2023 年 7 月 11 日午前 8:05 UTC](https://community.cybozu.dev/t/topic/7774/3 "2023-07-11T08:05:06Z")

</div>

```javascript
ご回答ありがとうございます。
ボタンの設置処理とクリックしたときでタイミングが違う、という点
非常に勉強になりました！
以下に修正したところ正常に動作しました。
ありがとうございました。

---------------------------------------------------------------------------------------
(() => {
  'use strict';
   
   kintone.events.on('app.record.edit.show', (event) => {
   
   // メニューの上側の空白部分にボタンを設置
    const myIndexButton = document.createElement('button');
     myIndexButton.id = 'my_index_button';
     myIndexButton.innerText = '最新契約更新日の更新';
     myIndexButton.onclick = () => {
      
      window.alert('契約更新しますか？');
      
   const current = kintone.app.record.get();
   const situation = current.record.状態.value;
   const today = dayjs();
   const checkDay = dayjs(current.record.契約期限.value);
   const checkValue = current.record.更新年度.value;
   const addedDate = checkDay.add(checkValue,'year');//.format('YYYY-MM-DD');
  
  //もし「状況」が「継続」かつ最新契約更新日が「今日以前」だったら処理実行する
  if (situation === '継続' && checkDay < today){  
    current.record.契約更新日.value = addedDate.format('YYYY-MM-DD');   
    kintone.app.record.set(current);
         window.alert('契約更新しました');
  }
  return event;
      
   };
    
    kintone.app.record.getSpaceElement('my_space_field').appendChild(myIndexButton);
   
   
   });
})();
```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2023 年 9 月 25 日午前 4:23 UTC](https://community.cybozu.dev/t/topic/7774/4 "2023-09-25T04:23:22Z")

</div>

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