Api модуля humanresources. Сотрудники. Часть 3

Получить список сотрудников отдела
Существует 2 метода: getAllEmployees
и getPagedEmployees
.
Отличие в том, что метод getAllEmployees
вернёт список всех сотрудников подразделения, а метод getPagedEmployees
— только ограниченное количество сотрудников с постраничной навигацией, что удобно при работе с большими структурами. Параметр $withAllChildNodes
позволяет учесть подчиненные отделы.
Метод getById
класса RoleHelperService
вернет роль сотрудника в данном подразделении. Роли хранятся в таблице b_hr_structure_role
:
- HEAD — руководитель
- EMPLOYEE — сотрудник
- DEPUTY_HEAD — заместитель
use Bitrix\HumanResources\Service\NodeMemberService;
use Bitrix\HumanResources\Service\RoleHelperService;
$departmentId = 3;
$modeMemberService = new NodeMemberService();
$roleHelperService = new RoleHelperService();
// Получить всех сотрудников
$result = $modeMemberService
->getAllEmployees(
$departmentId,
false,
false
)
->getItemMap();
// Получить сотрудников с пагинацией
$result = $modeMemberService
->getPagedEmployees(
$departmentId,
false,
0,
100,
true
)
->getItemMap();
foreach ($result as $item) {
$memberId = $item->id;
foreach ($item->roles as $role) {
// получить роль сотрудника в данном подразделении
$role = $roleHelperService->getById($role);
}
}
Результирующий объект представляет собой экземпляр класса Bitrix\HumanResources\Item\NodeMember
.
Свойство id
этого объекта указывает на идентификатор сотрудника в контексте конкретного подразделения(memberId
).
В свойстве entityId
хранится id
пользователя.
Этот id
отличается от стандартного id
пользователя.
Рассмотрим объект Bitrix\HumanResources\Item\NodeMember
Свойство | Описание |
---|---|
entityType | Тип сущности, в данном случае это перечисление Bitrix\HumanResources\Type\MemberEntityType |
entityId | Идентификатор сущности (пользователя) |
nodeId | Идентификатор отдела |
active | Статус активности (1 — активен, 0 — неактивен) |
roles | Список ролей |
icon | Иконка |
id | Уникальный идентификатор сотрудника |
addedBy | Идентификатор пользователя, который добавил сотрудника |
createdAt | Дата и время создания сущности (DateTime) |
updatedAt | Дата и время последнего обновления сущности (DateTime) |
Вычислить отношение между сотрудниками
use Bitrix\HumanResources\Service\NodeMemberService;
$memberId = 3;
$targetMemberId = 11;
$result = $modeMemberService
->getMemberSubordination(
$memberId,
$targetMemberId
);
Отношения между сотрудниками в Битрикс24 хранятся в перечислении (enum
) Bitrix\HumanResources\Type\MemberSubordinateRelationType
.
Enum | Значение | Описание |
---|---|---|
RELATION_ITSELF | 0 | Один и тот же человек |
RELATION_HIGHER | 1 | Сотрудник выше по иерархии (руководитель) |
RELATION_EQUAL | 2 | Сотрудники на одном уровне (коллеги) |
RELATION_LOWER | 3 | Сотрудник ниже по иерархии (подчинённый) |
RELATION_OTHER | 4 | Связь не найдена |
RELATION_OTHER_STRUCTURE | 5 | Сотрудники из разных структур |
Получить руководителя подразделения
use Bitrix\HumanResources\Service\NodeMemberService;
$departmentId = 3;
$result = $nodeMemberService
->getDefaultHeadRoleEmployees($departmentId)
->getItemMap();
Добавить сотрудника в подразделение
use Bitrix\HumanResources\Exception\CreationFailedException;
use Bitrix\HumanResources\Item\NodeMember;
use Bitrix\HumanResources\Repository\NodeMemberRepository;
use Bitrix\HumanResources\Type\MemberEntityType;
$userId = 1;
$targetDepartmentId = 3;
$member = new NodeMember(
MemberEntityType::USER,
$userId,
$targetDepartmentId,
true,
role: 1 // руководитель
);
$nodeMemberRepository = new NodeMemberRepository();
try {
$nodeMemberRepository->create($member);
} catch (CreationFailedException $e) {
print_r($e->getErrors()->toArray());
}
Переместить сотрудника в другое подразделение
use Bitrix\HumanResources\Repository\NodeMemberRepository;
use Bitrix\HumanResources\Repository\NodeRepository;
use Bitrix\HumanResources\Service\NodeMemberService;
use Bitrix\Intranet\Exception\UpdateFailedException;
$modeMemberService = new NodeMemberService();
$nodeRepository = new NodeRepository();
$memberRepository = new NodeMemberRepository();
$targetDepartmentId = 3;
$memberId = 9;
$node = $nodeRepository->getById($targetDepartmentId);
$member = $memberRepository->findById($memberId);
// изменить роль на заместителя если требуется
$member->role = 3;
try {
$result = $modeMemberService->moveMember($member, $node);
} catch (UpdateFailedException $e) {
print $e->getErrors()->toArray();
}
Удалить сотрудника из подразделения
При удалении сотрудник будет перемещён в корневое подразделение.
use Bitrix\HumanResources\Exception\WrongStructureItemException;
use Bitrix\HumanResources\Repository\NodeMemberRepository;
use Bitrix\HumanResources\Repository\NodeRepository;
use Bitrix\HumanResources\Service\NodeMemberService;
use Bitrix\Intranet\Exception\UpdateFailedException;
$modeMemberService = new NodeMemberService();
$nodeRepository = new NodeRepository();
$memberRepository = new NodeMemberRepository();
$targetDepartmentId = 3;
$memberId = 9;
$member = $memberRepository->findById($memberId);
try {
$result = $modeMemberService->removeUserMemberFromDepartment($member);
} catch (UpdateFailedException $e) {
print_r($e->getErrors()->toArray());
} catch (WrongStructureItemException $e) {
print_r($e->getErrors()->toArray());
}
Полезные ссылки
Похожие статьи

