Вопрос

Видимость колонок в разделе

Всем доброго времени суток.

Версия 7.11.



В карточке можно управлять видимостью колонок в зависимости от значения некоторой из колонок объекта. К примеру, в карточке контрагента можно настроить видимость колонок таким образом, что колонки будут отображаться только в случае, если значение колонки Owner равно текущему контакту пользователя, либо текущий пользователь относится к роли системных администраторов. Для этого необходимо добавить bind видимости колонки на значение виртуальной колонки.



Можно ли сделать такую же операцию на странице раздела? Необходимо именно скрывать данные колонок, то есть например, если вывести несколько колонок в таблицу, то они должны быть видны только у тех контрагентов, у которых Owner равен текущему контакту, а у остальных, допустим - только название. Но тех, чьи данные доступны, нужно видеть - поэтому вариант просто не выводить лишних колонок в настройке колонок, не подходит.

Нравится

5 комментариев

Добрый день. А администрирование по полям эту задачу не решают?

Иванов Александр А.,

... ну да, получается, что определённые колонки должен видеть только owner... правами надо заморочиться, чтобы такое сделать... к примеру прицепить событийный процесс "Перед сохранением", в котором пользователю из колонки Owner раздать права на чтение колонок, а остальным как-то запретить. Не доводилось подобных задач решать, но, может, как вариант...

 

Добрый день!

Если я правильно понял вопрос, то можно попробовать вклиниться в формирование грида (onGridDataLoaded в GridUtilitiesV2) и кодом делать соответствующие проверки и не показывать ненужные колонки.

Тёскин Дмитрий Валерьевич,

не помогло, к сожалению. Разобрал onGridDataLoaded и связанные функции, как я понял непосредственно генерация таблицы происходит в

addItemsToGridData, то есть в gridData.loadAll(dataCollection, options);

Для примера перед этим в prepareResponseCollectionItem там, где происходит перебор всей коллекции, добавляю

 if (!item.values.Address){

                    item.values.Address = "test";

                }

Просто ради теста. То есть если у меня колонка Адрес (выведена на страницу) пустая, то должно быть отображена строка "test". Это намного проще даже, чем проверка id пользователей.

И всё равно ничего не происходит - на странице загружаются по прежнему пустые блоки (и адреса, если они заполнены). При этом если вывести console.log(dataCollection); уже внутри addItemsToGridData, то есть непосредственно перед генерацией, там будут мои правки.

Здравствуйте, можете использовать для этих целей метод: loadGridData из схемы GridUtilitiesV2, и в колбеке esq запроса

esq.getEntityCollection(function(response) {

изменять коллекцию что находится в переменной response основываясь на данных из нее же.

К примеру:

response.collection.collection.items[0].set("Name", "");

Скроет имя из первой строки коллекции. В итоговом варианте конечно стоит использовать циклы и проверки.

Показать все комментарии