- Главная [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
- Начало работы
- Работа с типами
- Глобальный контекст и изоляция
- Работа с приложениями
- Работа с внешними сервисами
- Скрипты в виджетах
- Веб компоненты
- Права доступа
- Начало работы с процессами
- Начало работы с подписями
- Начало работы с предпросмотром файлов
- Начало работы с организационной структурой
- Начало работы с пользователями и группами
- Начало работы с типом данных Таблица
- Как решить вашу задачу
- Как сделать пользовательское отображение элементов приложений
- Как сделать динамическое отображение полей/виджетов со сложным условием
- Как регистрировать документ
- Как рассчитывать интервал между датами
- Как создать замещение пользователя
- Как использовать пагинацию и сортировку при поиске элементов приложения
- API
- Типы объектов
- Типы данных
- Глобальные константы
- Работа с приложениями
- Веб-запросы
- Права доступа
- Документооборот
- Линии
- Виджет «Код»
- Подписи
- Рабочие календари
- Интеграция с IP-телефонией
- Интеграция с сервисами рассылок
В этой статье
Начало работы с пользователями и группами
Иногда в процессе работы бывает необходимо получить или изменить данные группы или пользователя. В этой статье описаны часто используемые сценарии для взаимодействия с пользователями и группами.
Получение объекта пользователя
Получить объект пользователя и работать с полями профиля пользователя, а также использовать методы работы с объектом пользователя можно с помощью метода UserItemRef.fetch.
if (Context.data.user) { // Получаем данные о пользователе с помощью метода .fetch() const userData = await Context.data.user.fetch(); // Присваиваем переменной типа Дата дату рождения пользователя Context.data.birthDate = userData.data.birthDate; }
Поиск пользователей
Найти нужного пользователя и записать его в переменную можно с помощью метода Users.search, который возвращает объект UserSearch.
С помощью UserSearch можно запросить:
Фильтр можно задать через метод Search.where.
Например, если нужно найти пользователя по адресу электронной почты:
/* Находим нужного пользователя и записываем в переменную с помощью метода .search() с указанием фильтра .where()*/ Context.data.user = await System.users.search().where(f => f.email.eq('admin@mail.com')).first();
Блокировка и разблокировка пользователя
С помощью сценария можно заблокировать (UserItemRef.block) или разблокировать (UserItemRef.unblock) пользователя. Например, блокировку пользователя можно включить в бизнес-процесс увольнения сотрудника.
async function blockUser(): Promise<void> { // Запрашивать объект пользователя для блокировки не требуется if (Context.data.user) { await Context.data.user.block(); } }
Получение руководителей пользователя
Запросить руководителя пользователя можно с помощью метода UserItemRef.getChiefs.
/* Получаем массив данных, в котором записаны все руководители пользователя по иерархии из оргструктуры */ const chiefs = await ViewContext.data.user!.getChiefs(); // Выносим на форму непосредственного руководителя — первый элемент массива руководителей ViewContext.data.superviser = chiefs[0];
Работа с должностями пользователя
Получить список должностей пользователя можно с помощью метода UserItem.positions, а снять его с определенной должности — с помощью UserItem.removeFromPosition.
const user = await Context.data.user.fetch(); // Получаем должности пользователя const positions = await user.positions(); // Находим нужную должность const requiredPosition = positions.find(p => p.data.name === "Начальник отдела маркетинга"); // Обрабатываем ошибку, если должность не найдена if(!requiredPosition) { throw new Error ('position not found'); } // Снимаем пользователя с должности user.removeFromPosition(requiredPosition!); // Сохраняем объект пользователя await user.save();
Создание, изменение данных и сохранение пользователя
Чтобы создать пользователя (отправить приглашение через сценарий), изменить его данные или сохранить его, используется объект System. Для отправки приглашения новому пользователю необходимо его инициализировать:
let user = System.users.create(); // Заполняем поля пользователя user.data.email = "example@example.com"; user.data.fullname = { lastname: "Иванов", firstname: "Иван", middlename: "Иванович" }; // Сохраняем объект пользователя await user.save();
Поиск групп пользователей
Найти все группы можно с помощью метода UserGroups.search:
async function userMethods(): Promise<void> { // Присваиваем переменной все группы в системе const group = await System.userGroups.search().size(10000).all(); }
Найти группу Администраторы можно следующим образом:
async function userMethods(): Promise<void> { // Присваиваем переменной группу Администраторы const group = await System.userGroups.search().where(f => f.__name.like('Администраторы')).first(); }
Метод StringFieldOperand.like используется для фильтрации по строковому полю коллекции.
Как получить всех пользователей группы и проверить, входит ли пользователь в группу
Если необходимо, например, отображать виджет только для пользователей, входящих в определенную группу, можно использовать методы UserGroupItem.users и array.some().
// Получаем текущего пользователя const currUser = await System.users.getCurrentUser(); // Ищем нужную группу const allowedGroup = await System.userGroups.search().where(a => a.__name.like('Администраторы')).first(); // Получаем пользователей из группы с помощью метода .users() const usersInAllowedGroup = await allowedGroup!.users(); // Проверяем, входит ли текущий пользователь в полученный список if(usersInAllowedGroup.some(user => user.id === currUser.id)) { ViewContext.data.hideWidget = false; }
Получение должностей, родительских групп, подгрупп
Следующие методы возвращают в результате массивы.
Метод UserGroupItem.parentGroups позволяет получить список групп, в которые входит выбранная группа.
const parentGroups = await group.parentGroups();
Метод UserGroupItem.positions позволяет получить список должностей группы пользователей.
const groupName = 'Администраторы раздела'; const group = await System.userGroups.search().where(g => g.__name.eq(groupName)).first(); const positions = await group.positions();
Метод UserGroupItem.subGroups возвращает все подгруппы.
const parentGroups = await group.subGroups();
Удаление участника группы
Чтобы удалить из списка участников группы пользователя, элемент оргструктуры или другую группу, измените значение поля
subOrgunitIds
.// Находим группу, из которой необходимо удалить участника const group = await System.userGroups.search() .where(f => f.__id.eq('3624ea4d-9d14-50df-a5ef-05f740e3ac55')) .first(); // Находим пользователя, которого необходимо удалить из группы const user = await System.users.search().where(f => f.email.eq('dugaev@example.com')).first(); if (group && user && group.data.subOrgunitIds && group.data.subOrgunitIds.length > 0) { let allIds = group.data.subOrgunitIds; // Определяем индекс пользователя в массиве `subOrgunitIds` const index = allIds.findIndex(f => f == user.id); // Выходим из функции, если пользователь в массиве не найден if (index == -1) { return; } // Удаляем пользователя из массива allIds.splice(index, 1); group.data.subOrgunitIds = allIds; await group.save(); }
Изменение данных и сохранение группы
Метод UserGroupItem.save позволяет сохранить элемент группы пользователей. После внесения изменений группу пользователей необходимо сохранить.
await NeededGroup.save();