レコード追加・編集画面でのルックアップの取得ボタン押下時の処理について

お世話になっております。

 

レコード追加・編集画面にて、ルックアップ(テーブル)の各行の取得ボタンを押下した場合に

対応する「取得フラグ」フィールドが更新される処理を実現したいと検討しております。

ルックアップ(テーブル)

①1行目の取得ボタンを押下した場合、「取得フラグ1」フィールドに1が入力

②2行目の取得ボタンを押下した場合、「取得フラグ2」フィールドに1が入力

③3行目の取得ボタンを押下した場合、「取得フラグ3」フィールドに1が入力

 

検討中の実装概要としては、以下となります。

(1)処理①:追加画面表示イベント時に、ルックアップテーブルに行を追加

(2)処理②:追加・編集画面表示イベント時に、各取得ボタン押下時に取得フラグを更新する

 

(1)は、追加画面遷移時に、2行目以下の取得ボタンが存在しない場合は、

2つ目以降の、addEventListenerの処理が動作しなかったため、実装しております。

 

現在、下記コードにて動作確認を行いましたが、処理①/処理②のルックアップテーブルの

処理が競合してしまっている状況のため、いずれの動作も動かない状況となります。

 

コードの記載方法に誤りがある認識ではございますが、正しい記載方法ご教示いただけないでしょうか?

 

なお、処理②は、下記サイトを参照しております。

https://developer.cybozu.io/hc/ja/community/posts/360010394806-%E3%83%AB%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97-%E5%8F%96%E5%BE%97-%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E6%99%82%E3%81%AB%E5%87%A6%E7%90%86%E3%82%92%E8%B5%B0%E3%82%89%E3%81%9B%E3%81%9F%E3%81%84 

 

(function() {

    “use strict”;

    

  // 処理①:追加画面表示イベント時に、ルックアップテーブルに行を追加

  kintone.events.on([‘app.record.create.show’], function (event) {

 

     var record = event.record;

     // 初期テーブル行を複製

     var row = record[‘テーブル’].value[0].value;

     var newRow = {};

     var fcodes = Object.keys(row);

     fcodes.forEach(function(fcode) {

     newRow[fcode] = {

     type: row[fcode].type,

     value: row[fcode].value

     }

     });

     record[‘テーブル’].value.push({ value: newRow });

     record[‘テーブル’].value.push({ value: newRow });

     return event;

     });

  

  // 処理②:追加・編集画面表示イベント時に、各取得ボタン押下時に取得フラグを更新する

  kintone.events.on([‘app.record.create.show’, ‘app.record.edit.show’], function (event) {

 

    document.getElementsByClassName(‘input-lookup-gaia’)[0].addEventListener(‘click’, function(click) {

      console.log(“aaa”);

      var myRecord1 = kintone.app.record.get();

      myRecord1.record.取得フラグ1.value = 1;

      kintone.app.record.set(myRecord1);

    }, true);

    

    document.getElementsByClassName(‘input-lookup-gaia’)[1].addEventListener(‘click’, function(click) {

      console.log(“aaa”);

      var myRecord2 = kintone.app.record.get();

      myRecord2.record.取得フラグ2.value = 1;

      kintone.app.record.set(myRecord2);

    }, true);

    

    document.getElementsByClassName(‘input-lookup-gaia’)[2].addEventListener(‘click’, function(click) {

      console.log(“aaa”);

      var myRecord3 = kintone.app.record.get();

      myRecord2.record.取得フラグ3.value = 1;

      kintone.app.record.set(myRecord3);

    }, true);

  });

 

})();

 

ms様

お世話になっております.
自分のコメントを参考にしていただいたところ申し訳ございませんが,DOM操作より容易な方法がございます.
「ほかのフィールドのコピー」を設定している場合は、値がコピーされたタイミングでイベントを取得できます.

  1. サブテーブル内にダミーで数値フィールドを追加します.フィールドコードは「数値」にします.

  2. ルックアップの「ほかのフィールドのコピー」に,1で追加した数値フィールドを指定します.コピー元はなんでも良いです(レコード番号など).

  3. 下記JSを読み込みます.3~9行目のフィールドコードは適宜変更してください.

    (function() {
    “use strict”;
    var copyCode = ‘数値’; //ルックアップの設定で「ほかのフィールドのコピー」に指定したフィールドのフィールドコード
    var tableCode = ‘テーブル’; //サブテーブルのフィールドコード
    var flagCodes = [ //取得フラグフィールドのフィールドコード
    ‘取得フラグ1’,
    ‘取得フラグ2’,
    ‘取得フラグ3’,
    ];
    kintone.events.on([
    ‘app.record.create.show’,
    ‘app.record.edit.show’,
    ], function(event){
    kintone.app.record.setFieldShown(copyCode, false);
    });
    kintone.events.on([
    ‘app.record.create.change.’ + copyCode,
    ‘app.record.edit.change.’ + copyCode,
    ], function(event){
    var changeRowIndex = event.record[tableCode].value.findIndex(function(row){
    return row === event.changes.row;
    });
    if(changeRowIndex !== -1) {
    event.record[flagCodes[changeRowIndex]].value = 1;
    }
    return event;
    });
    })();

江田篤史 様

お世話になっております。

 

ご教示いただいたコードにて実現できました。

早急なご対応大変ありがとうございます。

江田篤史 様

 

お世話になっております。

 

以前回答いただきました内容について恐れ入ますが、追加で確認させてください。

 

ご教示頂いたルックアップテーブルの値変更時(値がコピーされたタイミング)に、

取得フラグを更新する処理を実装させて頂いておりますが、

ルックアップの「クリア」ボタンを押下した場合の挙動に問題があることを確認しました。

 

以下の様な実装は可能でしょうか_

 

①ルックアップテーブルの値変更時(値がコピーされたタイミング)に取得フラグを1に更新

②ルックアップテーブルの「クリア」ボタン押下時は、取得フラグを0に更新

 

以上、よろしくお願い致します