クリックイベント時に数値フィールに値を代入できません

こんにちは。
クリックイベント時に数値フィールドに値を代入したいのですがうまく出来ません。

またフィールドに代入後コンソールログにフィールドの値を出力すると、代入されたことになっています。

ご教示いただけますと幸いです。よろしくお願いいたします。

 

以下作成したコードです。

 

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しているのはそれを防ぐためです。

仰るとおりです!クリック時点で最新のレコードを取得するということで納得いたしました。