Как скрыть не нужные группы?

Задача: есть группы (assignment_group), которые уже не актуальны, но которые нужны для аналитики. Нужно сделать так, чтобы они были не видны и не доступны для выбора в поле assignment_group. И одновременно, нужно оставить предустановленный динамический определитель ссылок, который показывает только группы, где есть пользователи из поля assigned_user.

Есть идея дополнить динамический фильтр условием, что если в группе нет пользователя, то на не видна и не доступна для выбора, но не знаю, что именно изменить в скрипте:

/* Example of return values:

  1. return ‘156956878014585856’;
    or
  2. return [‘156956878014585856’, ‘156956851511250859’];
    or
  3. return ‘(emailISNOTEMPTY^display_name=SimpleAdmin)’; // dynamic operators are not supported for use in condition string for filter scripts
    */
    (function executeDynamicScript(current = null /null for scripts used in filters/ ) {
    if (current.getValue(‘assigned_user’)) {
    const listOfGrop = ;
    const userHasGroup = new SimpleRecord(‘sys_user_group’);
    userHasGroup.addQuery(‘user_id’, current.getValue(‘assigned_user’));
    userHasGroup.query();
    while (userHasGroup.next()) {
    listOfGrop.push(userHasGroup.getValue(‘group_id’))
    }
    return listOfGrop;
    }
    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. Советую дождаться выхода следующей версии платформы, там кое-что на эту тему будет.

:slight_smile: Всё Simple :slight_smile:

1 лайк

Есть уже готовое решение в статье https://community.simpleone.ru/t/vozmozhnost-zapreta-peredachi-obrashhenij-na-konkretnuyu-gruppu/

Возможно оно подойдет?

Спасибо - работает, как часы :+1: