レコード一覧を開いた時に、関連レコードが無いレコードのチェックボックスにチェックを付けたいです。

お世話になっております。是非どなたかお力をお貸し下さい。

レコード一覧を開いた時に、関連レコードがあるレコード(氏名)には色をつけ、無いレコードにはチェックボックスにチェックを入れたいのですが、勉強不足で申し訳ないのですが、PUTの仕方がわかりません。どなたかご教授いただけましたら、ありがたいです。

 

下記のコードにてレコード一覧を開いたら関連レコードがあるレコードには、氏名に色が着くようにしています。できることなら、13行目に色が着かないレコードのチェックボックスに「未レコード」などのチェックを入れ、絞り込み検索で関連レコードがないレコードの絞り込みを行いたいのです。

どなたかよろしくお願い致します。

(function() {
"use strict";
kintone.events.on([
'app.record.index.show'
], function(event){

RelatedRecordsFieldManager.prototype.getFieldProperties().then(function(){
var relatedRecordsField = new RelatedRecordsFieldManager('関連レコードフィールドコート');
event.records.forEach(function(record, index){
relatedRecordsField.getRecords(record).then(function(records){
if(records.length){
kintone.app.getFieldElements('氏名')[index].style.background = '#0F0';

//ここで色がつかないレコードのチェックボックスにチェックを入れたい
}
});
});
});
});
var RelatedRecordsFieldManager = (function(fieldCode){
function RelatedRecordsFieldManager(fieldCode) {
this.fieldCode = fieldCode;
this.targetAppId = kintone.app.getRelatedRecordsTargetAppId(fieldCode);
this.property = this.fieldProperties[fieldCode].referenceTable;
}
RelatedRecordsFieldManager.prototype = {
selfAppId: kintone.app.getId(),
records: [],
limit: 1,
//limit: 500,
offset: 0,
getFieldProperties: function(){
return kintone.api(kintone.api.url('/k/v1/app/form/fields', true), 'GET', {
app: RelatedRecordsFieldManager.prototype.selfAppId,
}).then(function(response){
RelatedRecordsFieldManager.prototype.fieldProperties = response.properties;
});
},
query: function(record){
return (
this.property.condition.relatedField +
'="' +
record[this.property.condition.field].value +
(this.property.filterCond ? '" and ' : '"') +
this.property.filterCond
);
},
getRecords: function(record){
var _this = this;
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: this.targetAppId,
query:
this.query(record) +
' order by ' + this.property.sort +
' limit ' + this.limit +
' offset ' + this.offset
}).then(function(response){
return response.records;
/*_this.records = _this.records.concat(response.records);
_this.offset += response.records.length;
if(response.records.length === _this.limit){
return _this.getRecords(record);
}else{
return _this.records;
}*/
});
}
}
return RelatedRecordsFieldManager;
})();
})();

こちらでいかがでしょうか(動作確認はしていません)。

標準のAPIであるため、標準上限である100件までしか更新されません。これ以上のレコードを更新する必要がある場合は、kintone/rest-api-client等を使用した方が手軽です。

(function() {
"use strict";

kintone.events.on('app.record.index.show', function(event){
var records = event.records, appId = event.appId;
var checkBoxField = 'チェックボックスのフィールドコード', checkBoxValue = '未レコード';

RelatedRecordsFieldManager.prototype.getFieldProperties().then(function(){
var relatedRecordsField = new RelatedRecordsFieldManager('関連レコードフィールドコート');
var putRecords = {
'app': appId,
'records': []
};

records.forEach(function(record, index){
var putRecord = {
'id': record['$id'].value,
'record': {}
};

relatedRecordsField.getRecords(record).then(function(records){
if (records.length){
kintone.app.getFieldElements('氏名')[index].style.background = '#0F0';

if (record[checkBoxField].value.indexOf(checkBoxValue) != -1) {
putRecord.record[checkBoxField] = {
'value': []
};
putRecords.records.push(putRecord);
}
} else {
if (record[checkBoxField].value.indexOf(checkBoxValue) == -1) {
putRecord.record[checkBoxField] = {
'value': [checkBoxValue]
};
putRecords.records.push(putRecord);
}
}
});
});

if (putRecords.records.length) {
kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', putRecords, function(resp) {
location.reload();
}, function(error) {
alert(JSON.stringify(error));
});
}
});
});
var RelatedRecordsFieldManager = (function(fieldCode) {
//...略
})();
})();

返信遅れて申し訳ございません。

頂いたコードを元に無事チェックを付けれました!!本当にありがとうございました。

もう少し教えて頂きたいことがあるのですが、上記のコードでAPIを叩くと、リクエストの数がレコード2500件に対して、4000件近くのリクエスト数になります。

これに対する、対処方などはございますでしょうか?

 

それと、2500件のレコードなので可能であれば一括更新を行えれば助かるのですが、どこの部分のコードを修正したらいいでしょうか?

勉強不足で申し訳ございませんが、よろしくお願い致します。