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