内田です。
レコード編集画面でAデータ群の入力後のタイミングで、新たに設置した’ボタン’をクリックして、その時点の時刻を入力、次にBデータ群の入力、、、といった作業です。
時刻フォームを使わずに、文字列フィールドなどに時刻を自動で入力したい。
ソースは以下の内容です。
教えてください。よろしくお願いします。
(function() {
“use strict”;
kintone.events.on(‘app.record.edit.show’, function(event) {
// 任意のスペースフィールドにボタンを設置
var mySpaceFieldButton = document.createElement(‘button’);
mySpaceFieldButton.id = ‘my_space_field_button’;
mySpaceFieldButton.innerHTML = ‘ボタン’;
mySpaceFieldButton.onclick = function () {
//時刻データを取得して変数jikanに格納する
var jikan= new Date();
var record = event.record;
window.alert(jikan);
record[‘入力時刻’][‘value’] = jikan;
return event;
}
kintone.app.record.getSpaceElement(‘my_space_field’).appendChild(mySpaceFieldButton);
});
})();
内田さん
こちらのmoment.jsライブラリを利用すると簡単に実装できます。
https://cybozudev.zendesk.com/hc/ja/articles/204982474
実装例
mySpaceFieldButton.onclick = function() {
//時刻データを取得して変数jikanに格納する
var record = event.record;
record['入力時刻']['value'] = moment().format();
return event;
}
カキ氷さん
回答ありがとうございます。
moment.js (local min版)を導入し、
ソースを以下に修正してみましたが、入力されません。教えていただいた内容はこの理解であっていますでしょうか。
ポイントを外しているかもしれません、教えてください。
(function() {
“use strict”;
// ロケールを設定
moment.locale(‘ja’);
kintone.events.on(‘app.record.edit.show’, function(event) {
// 任意のスペースフィールドにボタンを設置
var mySpaceFieldButton = document.createElement(‘button’);
mySpaceFieldButton.id = ‘my_space_field_button’;
mySpaceFieldButton.innerHTML = ‘ボタン’;
mySpaceFieldButton.onclick = function () {
//時刻データを取得して変数jikanに格納する
var jikan= new Date();
var record = event.record;
//window.alert(jikan);
//record[‘入力時刻’][‘value’] = jikan;
record[‘入力時刻’][‘value’] = moment(jikan).format(‘YYYY/MM/DD HH:mm’);
return event;
};
kintone.app.record.getSpaceElement(‘my_space_field’).appendChild(mySpaceFieldButton);
});
})();
内田さん
すみません。clickイベント内の処理だとeventオブジェクトが無効なためレコード情報が更新できていませんでした。
以下のコードで試していただけるでしょうか。
(function() {
"use strict";
kintone.events.on('app.record.edit.show', function(event) {
// 任意のスペースフィールドにボタンを設置
var mySpaceFieldButton = document.createElement('button');
mySpaceFieldButton.id = 'my_space_field_button';
mySpaceFieldButton.innerHTML = 'ボタン';
mySpaceFieldButton.onclick = function() {
//時刻データを取得して変数jikanに格納する
var record = kintone.app.record.get(); //レコード情報取得
record['record']['入力時刻']['value'] = moment().format();
kintone.app.record.set(record); //レコード情報登録
};
kintone.app.record.getSpaceElement('my_space_field').appendChild(mySpaceFieldButton);
});
})();
カキ氷さん
意図する結果が得られました。多謝!
学習1:clickイベントでは、eventオブジェクトが無効になる
学習2:moment.jsを使えば、日付操作は超簡単
最終的にはUTC形式?嫌って、moment().format(‘YYYY/MM/DD HH:mm’);しましたが
moment()には、暗黙的にDATEが代入されいることですか?
あと、これを覚えておけ という事柄ありましたら、教えてください。
ありがとうございました。
内田さん
>moment()には、暗黙的にDATEが代入されいることですか?
はい、そうです。呼出し時に現在時間を取得しています。
他に気にする部分ですと、eventオブジェクトの有効範囲でしょうか。
eventオブジェクトは「kintone.events.off(event, handler(event))」の発火時しか有効になりません。(以下のタイミングです。)
それ以外のclick操作等は上記イベントとは別の契機で発火するため、eventオブジェクトは無効となります。
結構ハマる部分かと思いますので意識するといいと思います。
これからも色々と試してみてください^^