お世話になります。初めて投稿させていただきます。
現在、kintoneのカスタマイズを進めている最中ですが,タイトルのことで困っております。
顧客の基本情報を管理するアプリで、レコード詳細画面もしくは一覧表示した際に生年月日フィールドより年齢を自動算出するプログラムを作成しています(Webに公開されているプログラムを利用させていただいております)。
参照サイト:http://www.messiahworks.com/archives/4554
自動計算自体には成功しておりますが,レコード編集画面を開くと値は消えてしまいます。また,他のアプリからルックアップで年齢を呼び出そうとしても表示されません。
目標は,自動算出された年齢をフィールドに定着させることです。
皆様のご助言のほどどうぞよろしくお願いいたします。
// 20140813 kintone用javascript作成
// 生年月日(日付フィールド)から、年齢を計算する
// 以下のサンプルコードだと、うるう年を考えていないので自作した
// https://cybozudev.zendesk.com/hc/ja/articles/202640900-%E7%B5%8C%E9%81%8E%E5%B9%B4%E6%95%B0%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B
(function() {
// 生年月日が入っているフィールドコード名
const AGE = ‘agec’;
const BIRTHYEAR = ‘year’;
const BIRTHMONTH = ‘month’;
const BIRTHDAY = ‘day’;
“use strict”;
// 現在の年齢計算する関数
function getYearMonth(year, month, day) {
//本日の日付を取得
var today=new Date();
// 肝心の年齢計算について
// 年月日の日は、そのまま引き算。
// 年月日の月は、2ケタ左シフトして(100倍にする。1月は0なので+100からスタート)から、引き算。
// 年月日の年は、4ケタ左シフトして(1万倍にする)から、引き算。
// この計算方法の優れた所は、年・月・日を単独で計算して、足らなかったら上位からマイナスするという点!
// 単純ながら、確実な年齢計算が出来る優れたアルゴリズムです!
// ちなみに日数計算はできません。あくまで年数計算のみ
// 参照URL:http://d.hatena.ne.jp/toku-hiro/20070824
today=today.getFullYear()*10000+today.getMonth()*100+100+today.getDate();
// 生年月日一列に
var birthday=parseInt(year + month + day);
// 単純に引き算して、下4ケタを切り捨てて、年部分だけを返す
return(Math.floor((today-birthday)/10000));
}
// レコード詳細表示
kintone.events.on([‘app.record.detail.show’], function (event) {
var record = event.record; // 保存前の画面上のレコード
//関数で計算
var valBirthday = getYearMonth(record[BIRTHYEAR][‘value’], record[BIRTHMONTH][‘value’], record[BIRTHDAY][‘value’]);
// 年齢
var emBirthDay = kintone.app.record.getFieldElement(AGE);
emBirthDay.innerHTML = valBirthday;
return event;
});
// レコード一覧表示
kintone.events.on([‘app.record.index.show’], function (event) {
// レコード配列をローカル変数に格納
var records = event.records;
var emBirthDay = kintone.app.getFieldElements(AGE);
// レコード数の分だけループ
for (var i = 0; i < records.length; i++) {
var record = records[i];
// 生年・生月・生日値の取得
var record_data_1 = record[BIRTHYEAR][‘value’];
var record_data_2 = record[BIRTHMONTH][‘value’];
var record_data_3 = record[BIRTHDAY][‘value’];
// DOM要素の取得し、年齢を追加
var part = emBirthDay[i];
part.innerHTML = getYearMonth(record_data_1,record_data_2,record_data_3);
}
return event;
});
})();