こんにちは。
クリックイベント時に数値フィールドに値を代入したいのですがうまく出来ません。
またフィールドに代入後コンソールログにフィールドの値を出力すると、代入されたことになっています。
ご教示いただけますと幸いです。よろしくお願いいたします。
以下作成したコードです。
jQuery.noConflict;
(function($) {
'use strict';
kintone.events.on('app.record.edit.show', function(event) {
var rec = event.record;
// 合計ボタンを生成
var $button = $('<button>').text('合計').attr('id', 'total_button');
$(kintone.app.record.getSpaceElement('total')).append($button);
// ボタンを押した時の処理
$button.on('click', function() {
rec['合計'].value = 9999;
console.log(rec['合計'].value);
});
return event;
});
})(jQuery);
以下、実際の画面です。
event.showのオブジェクトに格納はできていて、
反映ができていないことが現状です。
jQuery.noConflict;
(function($) {
'use strict';
kintone.events.on('app.record.edit.show', function(event) {
// 合計ボタンを生成
var $button = $('<button>').text('合計').attr('id', 'total_button');
$(kintone.app.record.getSpaceElement('total')).append($button);
// ボタンを押した時の処理
$button.on('click', function() {
const record = kintone.app.record.get().record;
record['合計'].value = 9999;
kintone.app.record.set({record: record});
});
});
})(jQuery);
岡崎さま
ご返信ありがとうございます。
無事編集画面でフィールドに値を入力できました。
recordはeventにも格納されておりますので最終的に以下コードを作成いたしました。
jQuery.noConflict;
(function($) {
'use strict';
kintone.events.on('app.record.edit.show',function(event) {
varrec = event.record;
// 合計ボタンを生成
var$button = $('\<button\>').text('合計').attr('id','total\_button');
$(kintone.app.record.getSpaceElement('total')).append($button);
// ボタンを押した時の処理
$button.on('click',function() {
rec['合計'].value =9999;
kintone.app.record.set({record: rec});
});
returnevent;
});
})(jQuery);
kintone.app.record.set() はレコードに値をセットするに記述がありました。
動いたので全くOKなのですが1点疑問が残りました。レコードに値をセットするの中で「kintone.event.on のイベントハンドラ内で kintone.app.record.set() は実行できないと」あるのですが、なぜか上記コードは動きます。
また「eventオブジェクトをreturnしてください」とありますので修正前のコード(event を return している)で動いてもいいのではと思いました。
ご教示いただけますと幸いです。
kg.ogura1008様、
イベントハンドラ関係私も調査中ですので、しばしお待ちください。
また「eventオブジェクトをreturnしてください」とありますので修正前のコード(event を return している)で動いてもいいのではと思いました。
こちらはプログラムの実行順番として、ボタンを生成した後にクリックされたときの処理を 宣言 、
その後にreturnしているので、プログラムはそこで終わっています。
その時点でのレコード内容に変更はないということです。
もし、
ボタンをクリックしたときに宣言されたプログラム内でreturn event;も、返り値は
呼び出し元のクリック処理関数に返されるため、レコードに直接反映はできません。
追記:
kg.ogura1008さんのプログラムではボタンを押す前にレコードの編集をすると、
ボタンを押した後にレコードの編集が元に戻りませんか?
getしているのはそれを防ぐためです。
岡本様
ご返信ありがとうございます。
こちらはプログラムの実行順番として、ボタンを生成した後にクリックされたときの処理を宣言、
その後にreturnしているので、プログラムはそこで終わっています。
その時点でのレコード内容に変更はないということです。
イベントハンドラが app.record.edit.show なので、編集画面を開いた時点の内容(event.recordを含む)でreturn されるということですね!納得いたしました。
kg.ogura1008さんのプログラムではボタンを押す前にレコードの編集をすると、
ボタンを押した後にレコードの編集が元に戻りませんか?
getしているのはそれを防ぐためです。
仰るとおりです!クリック時点で最新のレコードを取得するということで納得いたしました。