新規投稿
フォローする

テーブルに値をコピーする際のテーブル操作について

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

タイトルの件について、下記のページを参考に

https://developer.kintone.io/hc/en-us/articles/115005450087

フィールドをテーブルへコピーするように設定したのですが、

新規登録時や、テーブルに何も値が入っていない場合に【Add to table】ボタンを押すと

2行目に値がコピーされるのですが、1行目から追加(コピー)させる方法はありますでしょうか。

ご教授いただいたければ幸いでございます。

お手数でございますが、ご確認お願い致します。

0

4件のコメント

Avatar
江田篤史

Nao様

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

cstapの江田です。

以下のようなコードで実装できるかと思います。

サンプルにあったフィールドでしか試していないので、リッチエディターなど複雑なフィールドをサブテーブル内に含む場合は「isEmptyRow()」を調整してみてください。

// Add a row with data into a table with a button click
 
(function() {
  'use strict';
 
  var SPACE = 'buttonspace'; // Element ID of Blank Space field
  var TEXT = 'textfield'; // Field code of text field
  var NUMBER = 'numberfield'; // Field code of number field
  var CHECKBOX = 'checkboxfield'; // Field code of checkbox field
 
  var TABLE = 'mytable'; // Field code of table field
  var TABLE_TEXT = 'text_in_table'; // Field code of text field in a table
  var TABLE_NUMBER = 'number_in_table'; // Field code of number field a table
  var TABLE_CHECKBOX = 'checkbox_in_table'; // Field code of checkbox field in a table
 
  var events = ['app.record.create.show', 'app.record.edit.show'];
 
  function isEmptyRow(tableRow){
    var result = true;
    for(var key in tableRow){
      if(typeof tableRow[key].value === 'object'){
        if(tableRow[key].value.length !== 0){
          result = false;
        }
      }else if(typeof tableRow[key].value !== 'undefined'){
        result = false;
      }
    }
    return result;
  }

  kintone.events.on(events, function(event) {
    var record = event.record;
    var elSpace = kintone.app.record.getSpaceElement(SPACE);
    var elButton = document.createElement('button');
    elButton.textContent = 'Add to table';
    elSpace.appendChild(elButton);
 
    elSpace.addEventListener('click', function() {
      var recordData = kintone.app.record.get();
      var rec = recordData.record;

      if(isEmptyRow(rec[TABLE].value[0].value)){
        rec[TABLE].value[0].value[TABLE_TEXT].value = rec[TEXT].value;
        rec[TABLE].value[0].value[TABLE_NUMBER].value = rec[NUMBER].value;
        rec[TABLE].value[0].value[TABLE_CHECKBOX].value = rec[CHECKBOX].value;
      }else{
        // add row with data into table
        var addData = {};
        addData.value = {};
        addData.value[TABLE_TEXT] = {
          "type": "SINGLE_LINE_TEXT",
          "value": rec[TEXT].value
        };
        addData.value[TABLE_NUMBER] = {
          "type": "NUMBER",
          "value": rec[NUMBER].value
        };
        addData.value[TABLE_CHECKBOX] = {
          "type": "CHECK_BOX",
          "value": rec[CHECKBOX].value
        };
        rec[TABLE].value.push(addData);
      }
 
      // delete values after inserting into table
      rec[TEXT].value = "";
      rec[NUMBER].value = "";
      rec[CHECKBOX].value = [];
 
      kintone.app.record.set(recordData);
    });
  });
}());
1
Avatar
Nao

江田篤史 様

ご返信ありがとうございます。

ご教授いただいたように設定し、テーブル1行目のコピーが出来ました。

また「リッチエディターなど複雑なフィールド・・・」のご案内もありがとうございます。

今後ともよろしくお願いいたします。

1
Avatar
猫山

サブテーブルのコピーを本ページを参考に作成しているのですが、
リッチエディターのコピーが成功しないため、こちらにて質問させてください。

コピーを行うと、サブテーブルの一番下の行のみ"リッチエディター"フィールドが空欄となってしまいます。 
同行の、"日付"や"文字列(複数行)"フィールドはコピーできているのですが、
"リッチエディター"フィールドは空欄(<div></ br></div>)となってしまい、コピーがうまくできない状態です。

「リッチエディターなど複雑なフィールドをサブテーブル内に含む場合は「isEmptyRow()」を調整」とは、どのように行うと良いでしょうか?

尚、データは上記コードと同様に
kintone.app.record.get();
で、取得して
kintone.app.record.set(recordData);
で値をセットしています。

恐れ入りますが何か良い案があればご教授頂きたくよろしくお願いいたします。

猫山により編集されました
0
Avatar
猫山

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

上記質問ですが、別ページにて
https://developer.cybozu.io/hc/ja/community/posts/360001341706-)
改めて新規で質問を行いましたので、
本質問はCLOSEさせてください。

有難うございました。

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