USER_SELECTフィールドにコピーを追加していく方法

USER_SELECTフィールドに入力した内容をテーブルにコピーすると同時に、もう一つ別のUSER_SELECTフィールドにも追加していく方法を探しています

(function() {
‘use strict’;

var SPACE = ‘buttonspace’;
var TABLE = ‘mytable’;

var USER = ‘userfield’;
var OWNER = ‘ownerfield’;
var TABLE_USER = ‘user_in_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 = ‘コピー’;
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_USER].value = rec[USER].value;
rec[OWNER].value = rec[USER].value;

}
else{
var addData = {};
addData.value = {};

addData.value[TABLE_USER] = {
“type”: “USER_SELECT”,
“value”: rec[USER].value
};

rec[OWNER].value = rec[USER].value;

rec[TABLE].value.push(addData);
}
rec[USER].value = [];

kintone.app.record.set(recordData);
});
});
})();

 

上記のように rec[OWNER].value = rec[USER].value; とすると最後に入力したユーザーで上書きされてしまいます。

下記のように入力したユーザーをコピーしてなおかつ追加していく方法についてアドバイスをお願いします。

宮澤さん

ユーザー選択フィールドは値が入力されると配列になります。追加していきたい場合には

rec[OWNER].value.length などで「既に入力されているユーザー数」を取得してから最後尾に追加してあげると良いかと思います。

高田さん

アドバイスいただき、ありがとうございます。

下記のような感じに変えてみましたが「event.record[‘ownerfield’].value[1].code が不正です」となってしまいました。

var ownercount = rec[OWNER].value.length;
rec[OWNER].value[ownercount] = rec[USER].value;

 

下記も試しましたが同じエラーとなりました。

rec[OWNER].value.push(rec[USER].value);

 

他もいろいろ試してみます。

なにか思いついたことがあればコメントいただければ幸いです。

 

宮澤さん

ご確認ありがとうございます。ユーザ選択フィールドにおける注意点を一つ、お伝えし忘れておりました…申し訳ないです。

https://developer.cybozu.io/hc/ja/articles/202166330-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E5%BD%A2%E5%BC%8F 

 上記ページはkintoneのフィールド形式について詳細説明されているページなのですが、「ユーザー選択」の項目を見てもらうと

valueの中に"code"と"name"という2つのプロパティを含むことが書かれています。

 

ここでの注意点は、「ユーザー選択フィールドに対して値登録・更新する際は、"code"で指定する必要がある」ことです。

(エラー内容も、codeが不正と出力されていますね)

 

ここまでを前提として、下記項目を修正してみて下さい。

> rec[OWNER].value[ownercount] = rec[USER].value;

rec[OWNER].vakue[ownercount].code = rec[USER].value[0].code;

→ここまで書いて気付いたのですが、上記内容ではUSERに複数入力されていた場合を想定出来ていませんので、ユーザーが2人以上の場合には

ループさせる等の考慮が必要です。

 

参考になりますと幸いです。