サブテーブル内にある特定の行を非表示にしたい

お世話になります。

サブテーブル内にあるチェックボックス「非表示行」にチェックが入っている場合、その行をレコード詳細画面と印刷画面では非表示にしたいです。

下記コードを実行しましたが、エラーもなく動作しません。
恐れ入りますが、アドバイス頂けないでしょうか。

(function() {
“use strict”;
var events = [
‘app.record.detail.show’,
‘app.record.print.show’
];

kintone.events.on(events, function(event) {
var rows = event.record[サブテーブル].value;
rows.forEach(function(row) {
var checkboxValue = row.value[非表示行].value;
if (checkboxValue === true) {
row.rowId.hidden = true;
}
});
return event;
});
})();

サブテーブルの特定行を非表示にするというカスタマイズはkintoneに用意されてなく(条件問わず特定列ならkintone.app.record.setFieldShown()で可能です)、実際に実装されるとしたらkintoneのクラス名を取得したDOM操作が必要になり、今後フロントエンド刷新のアップデートがあった場合、都度対応が必要になります。

それでも実装される場合は、サブテーブルの仕様上少しコツがいります。
①レコード詳細閲覧画面、印刷画面共に、ページを表示(detail.show/print.show)後にサブテーブルの各行を描画する動作を行うため、各イベントでそのまま描画されていない(まだ存在しない)行にアクセスしようとするとエラーになります。サブテーブルの描画完了を待つ処理を追加する必要があり、こちらもまたkintoneのクラス名を使用することになります。

/**
 * @param {String} table サブテーブルのフィールドコードを指定
 * @param {String} tableClass サブテーブルのclass名を指定(field-xxxxxxx)
 */
const trDrawWait = (table, tableClass) => {
	return new Promise((resolve, reject) => {
		setTimeout(() => {
			try {
				let recordData = kintone.app.record.get(), rec = recordData.record;

				if ((rec[table].value.length + 1) === Array.from(document.getElementsByClassName(tableClass))[0].querySelectorAll('tr').length) {
					resolve();
				} else {
					resolve(trDrawWait(table, tableClass));
				}
			} catch(error) {
				resolve();
			}
		}, 500);
	});
};

こんな感じの処理をthen()で繋いで、その後に目的の処理を実行する必要があります(async/awaitではなくthen()で繋ぐ必要があります)。

②その上で、サブテーブルの値(既にイベントは外れているのでレコードの値を取得するが必要です)でループを回し、該当行のtrをdisplay='none’にする

という手順が必要です。

「いいね!」 1

橋本様、お返事ありがとうございます。
また、レスが遅れてしまいまして失礼しました。

DOM操作は初めてですので、少しずつ紐解きながらチャレンジしてみたいと思います。
また行き詰まり?完成?になったらレスポンスさせて頂きます!

「いいね!」 1

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。