新規投稿
フォローする

JavaScriptで計算した値を別のフィールドに転記する方法について

利用したソースコード

(() => {

'use strict';

kintone.events.on('app.record.detail.show', (event) => {

constrecord = event.record;

constbirthDayFieldCode = '生年月日_西暦';

//const spaceFieldCode = 'BirthDay';

constjoiningDayFieldCode = '入社年月日_西暦';

constageFieldCode = '年齢';

constjoiningYearFieldCode = '勤続年月';

constFeb1JoiningYearFieldCode = '勤続年月_2月1日時点';

/**

* 経過年月日を計算する

* @param {string} dateStr 日付文字列

* @returns {object} 計算結果のオブジェクト

*/

constcalculateDuration = function(dateStr) {

constcurrentDate = luxon.DateTime.local().startOf('day');

constdate = luxon.DateTime.fromISO(dateStr).startOf('day');

// 経過期間を計算する

constduration = currentDate.diff(date, ['years', 'months', 'days']);

returnduration.toObject();

};

// 入社からの経過年月日を表示する

constjoiningDayValue = record[joiningDayFieldCode].value;

if (joiningDayValue) {

constjoiningDayDuration = calculateDuration(joiningDayValue);

constjoiningDayElement = kintone.app.record.getFieldElement(joiningDayFieldCode);

const$emLabel = $('<label>');

const$emDiv = $('<span>');

$(joiningDayElement).append($emDiv);

$(joiningDayElement).css({

width:$(joiningDayElement).innerWidth() + 10 + 'px',

});

$emDiv.append($emLabel);

$emLabel.html('<br>');

$emLabel.append(

joiningDayDuration.years + '年' + joiningDayDuration.months + 'ヶ月'

);

$emDiv.css({

color:'blue',

});

}

 

背景・実現したいこと

上記内容で計算結果をフィールド内に表示させることはできたのですが、別のフィールドに計算結果を転記することは可能でしょうか?

 

 

0

2件のコメント

Avatar
村濱一樹

可能です。が、発想としては、

今お使いいただいている「レコード詳細表示イベント」は追加で情報を表示したり、装飾したりするものですね。

なので、今回やりたい「JSによって計算されたデータをあるフィールドにいれたい」ということは別のイベントがおすすめです。

一番ベーシックなのは「レコード保存前イベント」ですね。レコード保存直前に計算して、フィールドにデータを保存することができます。(あとは「レコードフィールドの値変更イベント」というのがありますが、不慣れであればレコード保存前のイベントでやるのがシンプルです)

レコード保存前イベントですとこんなかんじです

  kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], event => { 
const record = event.record;
record.とあるフィールド.value = 計算されたデータ;
return event; });

 

0
Avatar
エモ

村濱一樹

ありがとうございます!

やってみます!!

0
サインインしてコメントを残してください。