- Главная [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-телефонией
- Интеграция с сервисами рассылок
В этой статье
Начало работы с организационной структурой
Доступ к организационной структуре можно получить через объект 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 ++; }