【kintone】テーブル内のフィールド変更時に自動で値を入れたい

背景・実現したいこと

kintoneのサンプルアプリ【ファイル管理】を利用し、都度アップされたファイルについて、テーブル内の【確認済】をクリックすると、クリックした日時とユーザー名(表示名)が自動で入るようにしたいです。

※画像には入っていませんが『A確認』の左側には、ファイルと変更内容を入れるフィールドがあります。

承認者は2名想定で、Aさんが『A承認』で【確認済】にチェックを入れると、その日時が『A確認日時』へ、そのクリックしたユーザー名(表示名)が『A確認者』へ自動で入るという動きです。

 

エラー情報 (開発者ツールのコンソール)

以前、【kintone】チェックボックスクリック時に、ユーザー名(表示名)を入れたいという投稿をさせていただき、解決しましたが、テーブル内でそれをした時に正常に動きませんでした。

それぞれの動きはできていて、必要なフィールドに値は入ります。

しかし、2行目で確認済をクリックすると、1行目の確認日時と確認者まで変わってしまいます。

 

利用したソースコード

(function() {
    "use strict";
    kintone.events.on(['app.record.create.change.A確認', 'app.record.edit.change.A確認'], function(event){
        var tableRecords = event.record.変更履歴.value;
        const user01 = kintone.getLoginUser();
        var date01 = new Date();
        event.record.変更履歴.value[0].value.A確認者.value.splice(0);
        event.record.変更履歴.value[0].value.A確認日時.value = "";
        if(event.record.変更履歴.value[0].value.A確認.value[0] === "確認済"){
            event.record.変更履歴.value[0].value.A確認日時.value = formatDateTime(date01);
            event.record.変更履歴.value[0].value.A確認者.value.push({code:user01.code, name:user01.name});
        }
        return event;
    });


    kintone.events.on(['app.record.create.change.B確認', 'app.record.edit.change.B確認'], function(event){
        var tableRecords = event.record.変更履歴.value;
        const user02 = kintone.getLoginUser();
        var date02 = new Date();
        event.record.変更履歴.value[0].value.B確認者.value.splice(0);
        event.record.変更履歴.value[0].value.B確認日時.value = "";
        if(event.record.変更履歴.value[0].value.B確認.value[0] === "確認済"){
            event.record.変更履歴.value[0].value.B確認日時.value = formatDateTime(date02);
            event.record.変更履歴.value[0].value.B確認者.value.push({code:user02.code, name:user02.name});
        }
        return event;
    });


    kintone.events.on(['app.record.create.change.A確認', 'app.record.edit.change.A確認'], function(event){
        var tableRecords = event.record.変更履歴.value;
        const user03 = kintone.getLoginUser();
        var date03 = new Date();
        event.record.変更履歴.value[1].value.A確認者.value.splice(0);
        event.record.変更履歴.value[1].value.A確認日時.value = "";
        if(event.record.変更履歴.value[1].value.A確認.value[0] === "確認済"){
            event.record.変更履歴.value[1].value.A確認日時.value = formatDateTime(date03);
            event.record.変更履歴.value[1].value.A確認者.value.push({code:user03.code, name:user03.name});
        }
        return event;
    });


    kintone.events.on(['app.record.create.change.B確認', 'app.record.edit.change.B確認'], function(event){
        var tableRecords = event.record.変更履歴.value;
        const user04 = kintone.getLoginUser();
        var date04 = new Date();
        event.record.変更履歴.value[1].value.B確認者.value.splice(0);
        event.record.変更履歴.value[1].value.B確認日時.value = "";
        if(event.record.変更履歴.value[1].value.B確認.value[0] === "確認済"){
            event.record.変更履歴.value[1].value.B確認日時.value = formatDateTime(date04);
            event.record.変更履歴.value[1].value.B確認者.value.push({code:user04.code, name:user04.name});
        }
        return event;
    });     
})();

function formatDateTime(dt) {
  var y = dt.getFullYear();
  var m = ('00' + (dt.getMonth()+1)).slice(-2);
  var d = ('00' + dt.getDate()).slice(-2);
  var hh = ('00' + dt.getHours()).slice(-2);
  var mi = ('00' + dt.getMinutes()).slice(-2);
  return (y + '-' + m + '-' + d + ' ' + hh + ':' + mi);
}

今は2行目までのコードしかなく、行が増えた場合に対応できないので、行数を固定しようと思っています。

もし、行数を固定しなくても、都度増えた行数に対して動く書き方があれば、そちらも教えていただきたいです。

 

よろしくお願い致します。

 

changeした行はevent.changes.row.valueで取得できるので、↓こちらでいかがでしょうか?

これでうまくいけばコピーしてB確認の処理を作ってみてください。

    kintone.events.on(['app.record.create.change.A確認', 'app.record.edit.change.A確認'], function(event){
        var tableRecords = event.record.変更履歴.value;
        const user01 = kintone.getLoginUser();
        var date01 = new Date();

        event.changes.row.value.A確認者.value.splice(0);
        event.changes.row.value.A確認日時.value = "";

        if(event.changes.row.value.A確認.value === "確認済"){
            event.changes.row.value.A確認者.value.push({code:user01.code, name:user01.name});
            event.changes.row.value.A確認日時.value = formatDateTime(date01);
        }
        return event;
    });

masuda.mitsuo様

何度もありがとうございます。

試してみたのですが、値が入りません。

コンソール画面にはエラーは出ていませんでした。

↓こちらで値は入りますでしょうか?

    kintone.events.on(['app.record.create.change.A確認','app.record.edit.change.A確認'], function(event){
       vartableRecords =event.record.変更履歴.value;
       constuser01 = kintone.getLoginUser();
       vardate01 =newDate();
       event.changes.row.value.A確認者.value.push({code:user01.code, name:user01.name});
       event.changes.row.value.A確認日時.value= formatDateTime(date01);
       returnevent;
    });

はい、入りました。

A確認の【確認済】をチェックした行の値のみで、他の行は変更されませんでした。

ただ、【確認済】のチェックを外しても、そのまま値は残りました。