# フィールドに値を計算セットしたが画面上に反映されない件

**URL:** <https://community.cybozu.dev/t/topic/2666>\
**Category:** kintone 開発相談\
**Created:** [2016 年 9 月 7 日午前 9:35 UTC](https://community.cybozu.dev/t/topic/2666 "2016-09-07T09:35:44Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account2123](https://avatars.discourse-cdn.com/v4/letter/l/ccd318/32.png) [@Legacy\_Account2123](https://community.cybozu.dev/u/Legacy_Account2123)\
**Post date:** [2016 年 9 月 7 日午前 9:35 UTC](https://community.cybozu.dev/t/topic/2666/1 "2016-09-07T09:35:44Z")

</div>

いつもお世話になっております。JavaScriptでカスタマイズしておりますが、行き詰ってしまい、ご教示いただけると幸いです。よろしくお願いいたします。

a.【フォーム内容】  
基準日（日付）  
生年月日（日付）  
年齢（文字列１行）

b.【仕様】  
[年齢]フィールドは、[生年月日]から[基準日]時点での年齢をセットしておくフィールドです。  
•レコード追加イベント(app.record.create.show)、  
•レコード編集イベント(app.record.edit.show)  
において、[基準日]に本日日付を自動セットします。  
また、[年齢]フィールドは自動計算するので入力不可に設定します。

c.【作業手順】

1. 新規レコード追加画面で、[基準日]に本日日付(2016-09-07)が自動でセットされます。
2. [生年月日]に(1964-12-17)を入力すると、[年齢]フィールドに[51年9ｹ月]がセットされます。
3. 一旦保存します。
4. 本レコードを再度編集します。
5. [基準日]を[2020-01-01]に変更すると、[55年1ｹ月]の内容が[年齢]フィールドにセットされます。
6. 一旦保存します。
7. 本レコードを再度編集します。
8. app.record.edit.showの結果、[基準日]に本日日付が自動セットされ、[51年9ｹ月]の内容が  
計算されて、[年齢]フィールドにセットされると考えましたが、画面上には反映されず、  
[55年1ｹ月]のままとなりました。alertで計算内容を表示すると、正しく計算しているような  
状況なのに反映されないのがよくわかりませんでした。  
プログラムの改善点をご指摘いただけると幸いです。

e.【JavaScript内容】

(function() {  
&nbsp;&nbsp;&nbsp; “use strict”;  
// 基準日までの年月計算（経過年月数の計算）  
&nbsp;&nbsp;&nbsp; function nen\_set(dtDate, dtRefDate, typeDate) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var dtToday = new Date(dtRefDate);&nbsp; //基準日  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var dtFrom = new Date(dtDate);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (typeDate) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case ‘yy’:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var intDays = (dtToday - Date.parse(dtDate)) / 1000 / 60 / 60 / 24;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Math.floor(intDays / 365);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case ‘yymm’:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var intYear = dtToday.getFullYear() - dtFrom.getFullYear();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var intMonth = dtToday.getMonth() - dtFrom.getMonth();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (intMonth \< 0) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; intYear–;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; intMonth += 12;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return intYear + “年” + intMonth + “ｹ月”;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }  
&nbsp;&nbsp;&nbsp; }

//前ゼロの文字列を作成する関数  
&nbsp;&nbsp;&nbsp; function zeroformat(v, n) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var v1 = String(v).length;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (n \> v1) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (new Array((n - v1) + 1).join(0)) + v;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return v;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }  
&nbsp;&nbsp;&nbsp; }

&nbsp;kintone.events.on([‘app.record.create.show’,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘app.record.edit.show’], function(event) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var record = event.record;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // フィールド制御  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; record[‘年齢’][‘disabled’] = true;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 基準日に今日をセット  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var dt = new Date();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var today = dt.getFullYear() + “-” + zeroformat((dt.getMonth()+1),2) + “-” + zeroformat(dt.getDate(),2);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; record[‘基準日’].value = today;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return event;  
&nbsp;});

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■  
&nbsp;&nbsp;&nbsp; kintone.events.on([‘app.record.edit.change.生年月日’,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘app.record.create.change.生年月日’,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘app.record.index.edit.change.生年月日’,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘app.record.edit.change.基準日’,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘app.record.create.change.基準日’,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘app.record.index.edit.change.基準日’], function(event) {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var record = event.record;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var wkDate = record[‘生年月日’].value;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var wkReferenceDate = record[‘基準日’].value;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((wkDate === undefined) || (wkReferenceDate === undefined)) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; record[‘年齢’].value = “”;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return event;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(‘wkDate=’ + wkDate + ‘,wkReferenceDate=’ + wkReferenceDate);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var wkRetVal = nen\_set(wkDate, wkReferenceDate, ‘yymm’);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //「○年○ケ月」を求める  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(‘wkRetVal=’ + wkRetVal);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; record[‘年齢’].value = wkRetVal;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return event;  
&nbsp;&nbsp;&nbsp; });  
})();

---

<div class="post-metadata">

**Author:** ![Legacy\_Account513](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account513](https://community.cybozu.dev/u/Legacy_Account513)\
**Post date:** [2016 年 9 月 7 日午前 10:21 UTC](https://community.cybozu.dev/t/topic/2666/2 "2016-09-07T10:21:05Z")

</div>

teraさん

サイボウズスタートアップス武井です。

&nbsp;

showイベントの中でchangeイベントを発生させていることが原因です。

以下のように修正することで解消できます。

```
(function () {
	"use strict";
// 基準日までの年月計算（経過年月数の計算）
	function nen_set(dtDate, dtRefDate, typeDate) {
		var dtToday = new Date(dtRefDate); //基準日
		var dtFrom = new Date(dtDate);
		switch (typeDate) {
			case 'yy':
				var intDays = (dtToday - Date.parse(dtDate)) / 1000 / 60 / 60 / 24;
				return Math.floor(intDays / 365);
			case 'yymm':
				var intYear = dtToday.getFullYear() - dtFrom.getFullYear();
				var intMonth = dtToday.getMonth() - dtFrom.getMonth();
				if (intMonth < 0) {
					intYear--;
					intMonth += 12;
				}
				return intYear + "年" + intMonth + "ｹ月";
			default:
				return null;
		}
	}

//前ゼロの文字列を作成する関数
	function zeroformat(v, n) {
		var v1 = String(v).length;
		if (n > v1) {
			return (new Array((n - v1) + 1).join(0)) + v;
		} else {
			return v;
		}
	}

	var flg = true;
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
	kintone.events.on(['app.record.edit.change.生年月日',
		'app.record.create.change.生年月日',
		'app.record.index.edit.change.生年月日',
		'app.record.edit.change.基準日',
		'app.record.create.change.基準日',
		'app.record.index.edit.change.基準日',
		'app.record.create.show',
		'app.record.edit.show'], function (event) {
		var record = event.record;

		if (event.type === 'app.record.create.show' || event.type === 'app.record.edit.show') {
			// フィールド制御
			record['年齢']['disabled'] = true;

			// 基準日に今日をセット
			var dt = new Date();
			var today = dt.getFullYear() + "-" + zeroformat((dt.getMonth() + 1), 2) + "-" + zeroformat(dt.getDate(), 2);
			if (record['基準日'].value !== today) {
				record['基準日'].value = today;
				flg = false;
				return tekitou(event);
			}
		} else if (flg) {
			return tekitou(event);
		} else {
			flg = true;
		}

		return event;
	});

	function tekitou(event) {
		var record = event.record;
		var wkDate = record['生年月日'].value;
		var wkReferenceDate = record['基準日'].value;

		if ((wkDate === undefined) || (wkReferenceDate === undefined)) {
			record['年齢'].value = "";
			return event;
		}

		alert('wkDate=' + wkDate + ',wkReferenceDate=' + wkReferenceDate);
		var wkRetVal = nen_set(wkDate, wkReferenceDate, 'yymm'); //「○年○ケ月」を求める
		alert('wkRetVal=' + wkRetVal);
		record['年齢'].value = wkRetVal;
		return event;
	}
})();

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2123](https://avatars.discourse-cdn.com/v4/letter/l/ccd318/32.png) [@Legacy\_Account2123](https://community.cybozu.dev/u/Legacy_Account2123)\
**Post date:** [2016 年 9 月 8 日午前 1:53 UTC](https://community.cybozu.dev/t/topic/2666/3 "2016-09-08T01:53:36Z")

</div>

武井様、お世話になります。

showイベントの中でchangeイベントを発生させるとうまく動作しないのですね。

ご指南いただいたプログラムでうまく動作いたしました。ありがとうございました。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2123](https://avatars.discourse-cdn.com/v4/letter/l/ccd318/32.png) [@Legacy\_Account2123](https://community.cybozu.dev/u/Legacy_Account2123)\
**Post date:** [2016 年 9 月 8 日午前 2:58 UTC](https://community.cybozu.dev/t/topic/2666/4 "2016-09-08T02:58:24Z")

</div>

お世話になります。１つ疑問点があり、考えてみましたがよくわからなく、投稿させていただきました。

showイベントの中でchangeイベントを発生させていることがフィールド内容が変わらない原因とのことですが、[基準日]フィールドもshowイベントの中でchangeイベントを発生させているのもかかわらず、うまく動作するのは何故でしょうか？

ご教示いただけると幸いです。

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account513](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account513](https://community.cybozu.dev/u/Legacy_Account513)\
**Post date:** [2016 年 9 月 8 日午前 3:30 UTC](https://community.cybozu.dev/t/topic/2666/5 "2016-09-08T03:30:30Z")

</div>

teraさん

詳しい仕様は内部の人間でないので分かりませんが、

私の予想だと、eventのreturnのタイミングの問題な気がします。

&nbsp;

なので、もしかするとコード的には

「showイベントの中でchangeイベントを発生させていることが原因」であっても、

内部構造の中では厳密にはこの原因ではないかもしれません。

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2123](https://avatars.discourse-cdn.com/v4/letter/l/ccd318/32.png) [@Legacy\_Account2123](https://community.cybozu.dev/u/Legacy_Account2123)\
**Post date:** [2016 年 9 月 8 日午前 4:08 UTC](https://community.cybozu.dev/t/topic/2666/6 "2016-09-08T04:08:23Z")

</div>

武井様

奥が深いですね。'app.record.detail.show’イベントでも同様に処理できるようにしようと考えていますが、少し手を入れるとうまく動作しないような気がしてきました。。。参考にさせていただきます。ありがとうございました。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2123](https://avatars.discourse-cdn.com/v4/letter/l/ccd318/32.png) [@Legacy\_Account2123](https://community.cybozu.dev/u/Legacy_Account2123)\
**Post date:** [2016 年 9 月 9 日午前 1:51 UTC](https://community.cybozu.dev/t/topic/2666/7 "2016-09-09T01:51:26Z")

</div>

'app.record.detail.show’イベントでも同様に処理できるようにしようとしましたが、やはりうまく動作しませんでした。

簡単なサンプルアプリで動作確認したところ、'app.record.detail.show’イベントでは値をセットしてフィールドの更新ができないように思いますが、いかがでしょうか。ご存じであればご教示いただけると幸いです。

サンプルフォーム：「フリガナ（文字列１行）」

サンプルJavaScript

その１

(function () {  
&nbsp;“use strict”;

&nbsp;&nbsp;&nbsp; kintone.events.on([‘app.record.detail.show’], function(event) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var record = event.record;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; record[‘フリガナ’].value = “テスト組み込みフリガナ”;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return event;  
&nbsp;&nbsp;&nbsp; });  
})();

その２

(function () {  
&nbsp;“use strict”;  
&nbsp;&nbsp;&nbsp; function sample\_set(event) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var record = event.record;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; record[‘フリガナ’].value = “テスト組み込みフリガナ”;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return event;  
&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp; kintone.events.on([‘app.record.detail.show’], function(event) {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var record = event.record;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sample\_set(event);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return event;  
&nbsp;&nbsp;&nbsp; });  
})();

「その１」「その２」のいずれにおいてもフィールドの更新はできませんでした。

以上よろしくお願いいたします。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account513](https://avatars.discourse-cdn.com/v4/letter/l/8dc957/32.png) [@Legacy\_Account513](https://community.cybozu.dev/u/Legacy_Account513)\
**Post date:** [2016 年 9 月 9 日午前 1:56 UTC](https://community.cybozu.dev/t/topic/2666/8 "2016-09-09T01:56:18Z")

</div>

teraさん

当然detail.showイベントで同様には動作しません。

PUT処理が必要です。

&nbsp;

また、PUTした後に、ブラウザ表示上の年齢も更新したい場合は、

DOM操作で無理矢理書き換えるか、画面を更新させる処理も必要となるでしょう。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2123](https://avatars.discourse-cdn.com/v4/letter/l/ccd318/32.png) [@Legacy\_Account2123](https://community.cybozu.dev/u/Legacy_Account2123)\
**Post date:** [2016 年 9 月 9 日午前 2:22 UTC](https://community.cybozu.dev/t/topic/2666/9 "2016-09-09T02:22:34Z")

</div>

ハードルが一気に上がってしまいました。初心者なもっと勉強してから挑みたいと思います。ありがとうございました。

---

<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:** [2025 年 8 月 20 日午前 2:40 UTC](https://community.cybozu.dev/t/topic/2666/10 "2025-08-20T02:40:17Z")

</div>

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