Иногда в процессе работы бывает необходимо получить или изменить данные группы или пользователя.
В этой статье описаны часто используемые скрипты для взаимодействия с пользователями и группами.
Получить объект пользователя и работать с полями профиля пользователя, а также использовать методы работы с объектом пользователя
можно с помощью метода UserItemRef.fetch.
if (Context.data.user) {
// Получаем данные о пользователе с помощью метода .fetch()const userData = await Context.data.user.fetch();
// Присваиваем переменной типа Дата дату рождения пользователя
Context.data.birthDate = userData.data.birthDate;
}
Например, если нужно найти пользователя по адресу электронной почты:
/* Находим нужного пользователя и записываем в переменную с помощью метода .search()
с указанием фильтра .where()*/
Context.data.user = await System.users.search().where(f => f.email.eq('admin@mail.com')).first();
С помощью скрипта можно заблокировать (UserItemRef.block) или разблокировать (UserItemRef.unblock) пользователя. Например, блокировку пользователя можно включить в бизнес-процесс увольнения сотрудника.
asyncfunctionblockUser(): Promise<void> {
// Запрашивать объект пользователя для блокировки не требуетсяif (Context.data.user) {
await Context.data.user.block();
}
}
/* Получаем массив данных,
в котором записаны все руководители пользователя по иерархии из оргструктуры */const chiefs = await ViewContext.data.user!.getChiefs();
// Выносим на форму непосредственного руководителя — первый элемент массива руководителей
ViewContext.data.superviser = chiefs[0];
const user = await Context.data.user.fetch();
// Получаем должности пользователяconst positions = await user.positions();
// Находим нужную должностьconst requiredPosition = positions.find(p => p.data.name === "Начальник отдела маркетинга");
// Обрабатываем ошибку, если должность не найденаif(!requiredPosition) {
thrownewError ('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();
asyncfunctionuserMethods(): Promise<void> {
// Присваиваем переменной все группы в системеconst group = await System.userGroups.search().size(10000).all();
}
Найти группу Администраторы можно следующим образом:
asyncfunctionuserMethods(): Promise<void> {
// Присваиваем переменной группу Администраторыconst group = await System.userGroups.search().where(f => f.__name.like('Администраторы')).first();
}
Если необходимо, например, отображать виджет только для пользователей, входящих в определенную группу, можно использовать методы 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;
}
Чтобы удалить из списка участников группы пользователя, элемент оргструктуры или другую группу, измените значение поля 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();
}
Начало работы с пользователями и группами
Иногда в процессе работы бывает необходимо получить или изменить данные группы или пользователя. В этой статье описаны часто используемые скрипты для взаимодействия с пользователями и группами.
Получение объекта пользователя
Получить объект пользователя и работать с полями профиля пользователя, а также использовать методы работы с объектом пользователя можно с помощью метода 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();