絞り込みに関しては、関連レコードの「表示するフィールド」にさえ含んでいれば絞り込み条件の選択肢に出現するため、kintoneの標準機能で絞り込みできると思います。一覧に追加する方法について回答します。
以下のような形で追加できます。4~6行目を必要に応じて変更し(一覧画面上では6行目に設定したフィールドに5行目のフィールドの値を追加で表示します。空のフィールドを作れば他のフィールドと同じように見えるかと思います)、50行目または53行目のどちらかを使って下さい(ユーザー選択フィールドであれば53行目にし、1つ目の「join(‘’)」を好きな区切り文字に変えることができます)。
(() => {
'use strict';
let relatedField = ''; // 関連レコードのフィールドコード
let managerField = ''; // 一覧に追加で表示するフィールド
let managerDisplayField = ''; // 「一覧に追加で表示するフィールド」を追加するフィールド
let fetchRecords = (query, offset, limit, records) => {
let getRecords = records || [];
let body = {
app: kintone.app.getRelatedRecordsTargetAppId(relatedField),
query: `${query} order by $id asc limit ${limit} offset ${offset}`
};
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then((resp) => {
getRecords = getRecords.concat(resp.records);
if (resp.records.length === limit) return fetchRecords(query, (offset + limit), limit, getRecords);
return getRecords;
});
};
kintone.events.on('app.record.index.show', (event) => {
let records = event.records;
let recordElements = kintone.app.getFieldElements(managerDisplayField);
let body = {
app: event.appId
};
kintone.api(kintone.api.url('/k/v1/app/form/fields', true), 'GET', body).then((resp) => {
let relatedFieldProperty = resp.properties[relatedField].referenceTable;
let selfField = relatedFieldProperty.condition.field;
let targetField = relatedFieldProperty.condition.relatedField;
let filterCond = relatedFieldProperty.filterCond;
for (let i = 0; i < records.length; i++) {
if (document.getElementById(`add-field-${records[i]['$id'].value}`)) continue;
let query = `${targetField} = "${records[i][selfField].value}"`;
if (filterCond) query += ` and ${filterCond}`;
fetchRecords(query, 0, 100, []).then((getRecords) => {
let div = document.createElement('div');
div.id = `add-field-${records[i]['$id'].value}`;
// 対象のフィールドが文字列フィールドの場合
div.innerText = getRecords.map((getRecord) => getRecord[managerField].value).join('');
// 対象のフィールドがユーザー選択フィールドの場合
// div.innerText = getRecords.map((getRecord) => getRecord[managerField].value.map((user) => user.name).join('')).join('');
recordElements[i].appendChild(div);
});
};
}).catch((error) => {
console.error(error);
});
return event;
});
})();