Начнем с теории вопроса. Рабочие группы — это инструмент для организации совместной работы сотрудников. Этот инструмент позволяет сгруппировать все данные: задачи, файлы, сообщения, чаты, календарь в одном месте. Группы позволяют организовать работу в рамках определенного коллектива сотрудников, например, можно создать группу для департамента «Отдел продаж», добавить в нее ряд сотрудников, настроить права доступа.
Разновидности рабочих групп в «Битрикс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> <? } ?>
Оставить комментарий