Was this helpful?
- Getting started [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],[object Object],[object Object],[object Object]
- Manage types
- Global context and isolation
- Manage apps
- Batch actions with app items
- Manage external services
- Scripts in widgets
- Web components
- Access permissions
- Getting started with processes
- Getting started with signatures
- Getting started with file previews
- Getting started with the organizational chart
- Getting started with users and groups
-
Getting started with the
Table data type -
Getting started with the
Category data type - Dynamic event type calculation
- Typical use cases
- API
In this article
Начало работы с организационной структурой
Доступ к организационной структуре можно получить через объект System:
const item = System.organisationStructure;
Создание элемента оргструктуры
Создать новый элемент оргструктуры можно с помощью метода OrganisationStructure.createItem:
const item = System.organisationStructure.createItem('Директор по развитию', OrganisationStructureItemType.Position);
В данном примере Директор по развитию — название создаваемого элемента оргструктуры, а OrganisationStructureItemType.Position — тип элемента.
Элемент может быть одного из трёх типов:
Добавление элемента оргструктуры
Добавить вновь созданный элемент в существующую организационную структуру (к заданному родителю) можно с помощью метода OrganisationStructureItem.addChild:
const tree = await System.organisationStructure.fetchTree(); tree.getRoot().addChild(item);
Получение текущей оргструктуры
Текущее дерево организационной структуры можно загрузить с помощью метода OrganisationStructure.fetchTree:
const tree = await System.organisationStructure.fetchTree();
Найти элемент оргструктуры
Найти элемент оргструктуры можно по его названию с помощью метода OrganisationStructureTree.find. Будет возвращен первый найденный элемент или
undefined
, если такого элемента нет.// Получаем текущую оргструктуру const tree = await System.organisationStructure.fetchTree(); // Находим элемент с названием Генеральный директор и записываем в переменную const ceo = tree.find('Генеральный директор');
Найти корневой элемент оргструктуры
Получить корневой элемент организационной структуры, то есть высшую сущность в иерархии, можно с помощью метода OrganisationStructureTree.getRoot:
const root = tree.getRoot();
Валидация организационной структуры
Проверить оргструктуру на наличие ошибок и просмотреть найденные ошибки можно с помощью метода OrganisationStructureTree.validate. В случае если валидация не пройдена, метод возвращает массив с ошибками. При успешной валидации возвращается пустой массив. Рекомендуется проверять оргструктуру после ее изменения с помощью скриптов, так как такой метод может повлечь за собой ошибки, в отличие от визуального редактирования в разделе Администрирование.
// Записываем в переменную текущую оргструктуру const tree = await System.organisationStructure.fetchTree(); // Записываем в переменную массив возвращенных ошибок const errs = await tree.validate(); // Ставим условие, что если массив ошибок включает более 0 элементов, if (errs.length > 0) { // то они должны быть записаны в строку с использованием метода `join`; указываем разделитель (запятая с пробелом) Context.data.errors = errs.join(', '); } else { // Если массив ошибок пустой, то в строку должно быть записано соответствующее сообщение Context.data.errors = 'Оргструктура составлена правильно'; }
Ошибки, которые могут быть возвращены
Сохранение дерева в качестве текущей организационной структуры
Метод позволяет сохранить заданное дерево в качестве текущей организационной структуры. Перед сохранением организационная структура будет автоматически провалидирована (описание валидации можно найти в примере выше).
const errs = await System.organisationStructure.save(tree); if (errs.length === 0) { // Успешно сохранено }
В данном примере
tree
— сохраняемое дерево.Найти все отделы в оргструктуре и записать их в поле типа «Категория»
// Находим все отделы в оргструктуре по фильтру, который использует тип элемента `DEPARTMENT` — Отдел const deps = await System.organisationStructure.search().where(i => i.type.like('DEPARTMENT')).all(); // Запускаем цикл, в котором проходим по каждому из найденных элементов и задаем начальное значение счётчика для генерации уникального кода let counter = 1; for (let item of deps) { // Записываем значения поля типа Категория в переменную `variants` const variants = Context.fields.kategoriya.data.variants; // Если у элемента оргструктуры есть название, if (item.data.name) { // то делаем в поле типа Категория новую запись, присваивая ей уникальный код и имя; увеличиваем значение счётчика variants.push({ code: 'item'+counter.toString(), name: item.data.name }); } counter ++; }