Битрикс24: получение списка рабочих групп и проектов

Начнем с теории вопроса. Рабочие группы — это инструмент для организации совместной работы сотрудников. Этот инструмент позволяет сгруппировать все данные: задачи, файлы, сообщения, чаты, календарь в одном месте. Группы позволяют организовать работу в рамках определенного коллектива сотрудников, например, можно создать группу для департамента «Отдел продаж», добавить в нее ряд сотрудников, настроить права доступа.

Разновидности рабочих групп в «Битрикс24»:

  • Открытая группа — видна всем пользователям, все могут вступить в неё.
  • Закрытая группа — видна только ее членам, вступить в нее можно только после одобрения модератором.
  • Внешняя группа — видна только ее членам, в нее можно приглашать внешних пользователей.
  • Группа для внешних публикаций — служит для публикаций новостей и постов на сайтах Битрикс24, доступна только участникам.

В чем состоит отличие проекта от группы? Основное отличие проекта от группы – это связь сроков проекта и сроков задач. Сроки задачи проекта нельзя ставить и изменять вне сроков проекта.

Рабочие группы в «Битрикс24»

С теорией закончили. Переходим к практике. Вводные данные: на портале создано более 30-ти групп. 15 из них — внешние. 14 из них — это группы, в рамках которых ведется работа с поставщиками продукции. Задача: получить список рабочих групп поставщиков через API Битрикс24, вывести список этих групп и их участников в виде списка отдаленно напоминающего структуру компании. В конкретном случае таким образом на портале создается раздел «Наши поставщики». Работать данное решение будет в коробочной версии «Битрикс24».

Получаем список рабочих групп и проектов. В этом нам поможет метод CSocNetGroup::GetList.
Список возвращаемых полей:

  • ID — идентификатор рабочей группы,
  • SITE_ID — код сайта,
  • NAME — название группы,
  • DESCRIPTION — описание группы,
  • DATE_CREATE — дата создания,
  • DATE_UPDATE — дата последнего изменения параметров группы,
  • ACTIVE — активность,
  • VISIBLE — видима ли группа в списках,
  • OPENED — открыта ли группа для свободного вступления,
  • CLOSED — является ли группа архивной,
  • SUBJECT_ID — код темы группы,
  • OWNER_ID — код пользователя-владельца группы,
  • KEYWORDS — ключевые слова,
  • IMAGE_ID — код иконки,
  • NUMBER_OF_MEMBERS — количество членов группы,
  • INITIATE_PERMS — кто имеет право на прием в группу новых членов,
  • SPAM_PERMS — кто имеет право на написание сообщений членам группы,
  • DATE_ACTIVITY — дата последней активности в группе,
  • SUBJECT_NAME — название темы группы,
  • PROJECT — если проект — возвращает Y, если группа — N.

Нам нужны только внешние группы. В данном случае нам поможет поле SITE_ID: для внешних групп оно будет иметь значение ex. Исключим некоторые группы по уникальному идентификатору, отсортируем список групп по названию. Готовый код:

$extra_groups = CSocNetGroup::GetList(
$arOrder = array("NAME" => "ASC"),
$arFilter = array("SITE_ID"=>"ex", "!ID"=>array(1,2,3)),
$arGroupBy = false,
$arNavStartParams = false,
$arSelectFields = array()
);
while($extra_groups_list = $extra_groups->Fetch()){
...
}

Массив $extra_groups_list будет содержать список групп. В данном примере мы исключали группы по идентификатору, такой подход может быть не всегда удачным. Альтернативное решение — получать группы, название которых содержит ключевое слово. Для этого заменим "!ID"=>array(1,2,3) на "?NAME"=>"поставщик | дилер".

Для получения списка участников группы воспользуемся методом CSocNetUserToGroup::GetList.
Список возвращаемых полей:

  • ID — код записи;
  • USER_ID — код пользователя;
  • GROUP_ID — идентификатор группы;
  • DATE_CREATE — дата создания записи;
  • DATE_UPDATE — дата изменения записи;
  • INITIATED_BY_USER_ID — идентификатор пользователя, отправившего приглашение;
  • MESSAGE — текст приглашения;
  • ROLE — права пользователя в группе. A — владелец, E — модератор, K — участник группы

Пример выглядит следующим образом:

$dbRequests = CSocNetUserToGroup::GetList(
    array("USER_LAST_NAME" => "ASC", "USER_NAME" => "ASC"),
    array(
        "GROUP_ID" => $extra_groups_list['ID'],
        "USER_ACTIVE" => "Y"
    ),
    false,
    $arNavParams,
    array()
);
while ($arRequests = $dbRequests->GetNext())
{
$rsUser = CUser::GetByID($arRequests['USER_ID']);
$arUser = $rsUser->Fetch();
if (empty($arUser['UF_DEPARTMENT'][0])){
...
}
}

$extra_groups_list['ID'] — уникальный идентификатор группы. Условие if (empty($arUser['UF_DEPARTMENT'][0])) позволяет выводить не всех пользователей, состоящий в группе, а только внешних.

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

<?
$extra_groups = CSocNetGroup::GetList(
$arOrder = array("NAME" => "ASC"),
$arFilter = array("SITE_ID"=>"ex", /*"!ID"=>array(1, 2, 3)*/ "?NAME"=>"поставщик | дилер"),
$arGroupBy = false,
$arNavStartParams = false,
$arSelectFields = array()
);

while($extra_groups_list = $extra_groups->Fetch()){
    ?>
    <div class="card mb-3">
    <div class="card-header">
    <!-- название группы -->
    <?=$extra_groups_list['NAME'] ?>
    </div>
    <div class="card-body">
    <?
    $dbRequests = CSocNetUserToGroup::GetList(
    array("USER_LAST_NAME" => "ASC"),
    array(
    "GROUP_ID" => $extra_groups_list['ID'] ,
    "USER_ACTIVE" => "Y"
    ),
    false,
    $arNavParams,
    array()
    );
    while ($arRequests = $dbRequests->GetNext())
    {
        $rsUser = CUser::GetByID($arRequests['USER_ID']);
        $arUser = $rsUser->Fetch();
        /*только внешние пользователи*/
        if (empty($arUser['UF_DEPARTMENT'][0])){
            ?>
            <h5 class="card-title"><a href="/company/personal/user/<?=$arUser['ID'] ?>/"><?=$arUser['NAME'] . " " . $arUser['LAST_NAME']; ?></a></h5>
            <?
        }
    }
    ?>
    </div>
    </div>
    <?
}
?>

Опубликовано: 22 февраля 2021 года, в рубрике «Битрикс».

Оставить комментарий

5000
  Подписаться  
Уведомление о
Поблагодарить автора статьи
Зачем это нужно