Задача: существуют группы (assignment_group), которые уже не актуальны, но необходимы для аналитики. Необходимо сделать так, чтобы они не отображались и не были доступны для выбора в поле assignment_group. При этом необходимо сохранить предустановленный динамический определитель ссылок, который показывает только группы, где есть пользователи из поля assigned_user.
Есть идея дополнить динамический фильтр условием: если в группе нет пользователя, то она не отображается и не доступна для выбора, но не знаю, что именно изменить в скрипте:
/* Примеры возвращаемых значений:
return ‘156956878014585856’;
или
return [‘156956878014585856’, ‘156956851511250859’];
или
return ‘(emailISNOTEMPTY^display_name=SimpleAdmin)’; // динамические операторы не поддерживаются в строке условия для скриптов фильтра
*/
(function executeDynamicScript(current = null /null для скриптов, используемых в фильтрах/ ) {
if (current.getValue(‘assigned_user’)) {
const listOfGroup = ;
const userHasGroup = new SimpleRecord(‘sys_user_group’);
userHasGroup.addQuery(‘user’, current.getValue(‘assigned_user’));
userHasGroup.query();
while (userHasGroup.next()) {
listOfGroup.push(userHasGroup.getValue(‘group’));
}
return listOfGroup;
}
return ‘()’;
})(current)
Привет!
Тяжеловасто будет проверять каждую существующую группу на наличие (наверное, активных (active=true) членов) в динамическом фильтре. Я бы в эту сторону не смотрел.
Наша задача скорее про признак (поле) в таблице sys_group, которое будет нам говорить, можно ли ее выбирать или нет.
Допустим, мы создали true/false поле “c_assignment_possible” с default значением true и проставили у старых групп это поле в значение false или написали Scheduled Script, который выставляет в группе “c_assignment_possible” = false, если в ней нет членов или… дальше пошел полет фантазии… если все члены группы деактивированы и т.п.
Тогда нам из динамичесго фильтра никуда не нужно лезть.
(function executeDynamicScript(current = null /*null for scripts used in filters*/) {
const assignedUserId = current.getValue('assigned_user');
if (assignedUserId) {
const groupIdsArr = [];
const userHasGroup = new SimpleRecord('sys_user_group');
userHasGroup.addQuery('user_id', assignedUserId);
userHasGroup.addQuery('group_id.c_assignment_possible', true); // Фильтруем те, что доступны для назначения и в которых есть наш пользователь
userHasGroup.selectAttributes('group_id'); //Ускоряемся с запросом, нам нужен только group_id
userHasGroup.query();
while (userHasGroup.next()) {
groupIdsArr.push(userHasGroup.getValue('group_id'));
}
return groupIdsArr; //Вот они, группы нашего Assigned User, причем только разрешенные для назначения
}
return '(c_assignment_possible=1)'; //Вот они, разрешенные для назначения группы. Все.
})(current)
С уважением, Никита
p.s. Советую дождаться выхода следующей версии платформы, там кое-что на эту тему будет.