新規投稿
フォローする

関連レコードに表示される値を、(ボタンを押して)テーブルに挿入したい

関連レコードに表示される項目(文字列,ラジオ,ラジオ)を、

ボタンを押すと、自動的にテーブルにも挿入されるようにしたいです。

ボタンを設置するところまでは、できましたが、

関連レコードの値を取得し、テーブルに挿入するところが分かりません。

宜しくお願いいたします。

0

6件のコメント

Avatar
江田篤史

napol様

お世話になっております。
cstapの江田と申します。

関連レコードの取得方法については下記記事で紹介しています。
よろしければご利用ください。
https://developer.cybozu.io/hc/ja/community/posts/360017851006

自作のボタンclick時にkintoneのeventオブジェクトを取得したり、レコードを書き換える場合は下記の2つを利用するとよいと思います。
https://developer.cybozu.io/hc/ja/articles/201942014#step2
https://developer.cybozu.io/hc/ja/articles/201942014#step4

0
Avatar
napol

江田さま

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

紹介していただいた記事を見ました。

私には難易度が高いようで、どこをどのように修正していくのか分かりません。

もしよろしければ、もう少し詳細にご教授いただけませんでしょうか?

0
Avatar
江田篤史

napol様

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

下記のようなコードになるかと思います。
8~10行目はフィールドコードに合わせて変更してください。 また、関連レコードのカラムとコピー先のサブテーブルのカラムはフィールドコードが一致している想定です。

(function() {
  "use strict";
  kintone.events.on([
    'app.record.create.show',
    'app.record.edit.show'
  ], function(){
    var
      buttonSpace = 'button_space', //ボタンを置くスペースのスペースID
      relatedRecordsFieldCode = '案件一覧', //関連レコードフィールドのフィールドコード
      table = 'Table', //コピー先のサブテーブルのフィールドコード
      button = document.createElement('a');
    button.innerHTML = 'copy';
    kintone.app.record.getSpaceElement(buttonSpace).appendChild(button);
    RelatedRecordsFieldManager.prototype.getFieldProperties().then(function(){
      button.addEventListener('click', function(){
        var
          event = kintone.app.record.get(),
          tableColumns = [];
        for(var fieldCode in event.record[table].value[0].value){
          tableColumns.push({
            fieldCode: fieldCode,
            type: event.record[table].value[0].value[fieldCode].type
          });
        }
        (new RelatedRecordsFieldManager(relatedRecordsFieldCode)).getRecords(event.record).then(function(records){
          event.record[table].value = records.map(function(record){
            var row = {value: {}};
            tableColumns.forEach(function(column){
              row.value[column.fieldCode] = {value: record[column.fieldCode].value, type: column.type};
            });
            return row;
          });
          kintone.app.record.set(event);
        });
      });
    });
  });
  // コンストラクタ定義
  var RelatedRecordsFieldManager = (function(fieldCode){
    //略
  })();
})();


江田篤史により編集されました
0
Avatar
napol

cstap 江田さま

いつもお世話になっております。

 

ご丁寧な対応をしていただきありがとうございます。

実装できました。

もう一点質問をさせていただきたいのですが、

上の例で言うと、案件一覧にて「確度」が100%のレコードだけをテーブルに反映したい場合は、

どのうようにすれば良いでしょうかご教授いただけると幸いです。

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

0
Avatar
江田篤史

napol様

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

filterを用いるとよいと思います。

(function() {
  "use strict";
  kintone.events.on([
    'app.record.create.show',
    'app.record.edit.show'
  ], function(){
    var
      buttonSpace = 'button_space', //ボタンを置くスペースのスペースID
      relatedRecordsFieldCode = '案件一覧', //関連レコードフィールドのフィールドコード
      table = 'Table', //コピー先のサブテーブルのフィールドコード
      button = document.createElement('a');
    button.innerHTML = 'copy';
    kintone.app.record.getSpaceElement(buttonSpace).appendChild(button);
    RelatedRecordsFieldManager.prototype.getFieldProperties().then(function(){
      button.addEventListener('click', function(){
        var
          event = kintone.app.record.get(),
          tableColumns = [];
        for(var fieldCode in event.record[table].value[0].value){
          tableColumns.push({
            fieldCode: fieldCode,
            type: event.record[table].value[0].value[fieldCode].type
          });
        }
        (new RelatedRecordsFieldManager(relatedRecordsFieldCode)).getRecords(event.record).then(function(records){
          event.record[table].value = records.filter(function(record){
            return record.確度.value === '100%';
          }).map(function(record){
            var row = {value: {}};
            tableColumns.forEach(function(column){
              row.value[column.fieldCode] = {value: record[column.fieldCode].value, type: column.type};
            });
            return row;
          });
          kintone.app.record.set(event);
        });
      });
    });
  });
  // コンストラクタ定義
  var RelatedRecordsFieldManager = (function(fieldCode){
    //略
  })();
})();
0
Avatar
napol

cstap 江田さま

 

お世話になります。

実装し動作も確認しました。

本当にありがとうございます。

 

0
ログインしてコメントを残してください。