ユーザーにボタンを押下して時刻を登録させたい

内田です。

 

レコード編集画面で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オブジェクトは無効となります。

結構ハマる部分かと思いますので意識するといいと思います。

 

 

これからも色々と試してみてください^^