- Главная [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]
- Начало работы
- Работа с типами
- Глобальный контекст и изоляция
- Работа с приложениями
- Массовые действия с элементами приложения
- Работа с внешними сервисами
- Скрипты в виджетах
- Веб компоненты
- Права доступа
- Начало работы с процессами
- Начало работы с подписями
- Начало работы с предпросмотром файлов
- Начало работы с организационной структурой
- Начало работы с пользователями и группами
- Начало работы с типом данных Таблица
- Динамическое вычисление типа события
- Как решить вашу задачу
- Как сделать пользовательское отображение элементов приложений
- Как сделать динамическое отображение полей/виджетов со сложным условием
- Как регистрировать документ
- Как рассчитывать интервал между датами
- Как создать замещение пользователя
- Как использовать пагинацию и сортировку при поиске элементов приложения
- API
- Типы объектов
- Типы данных
- Глобальные константы
- Работа с приложениями
- Веб-запросы
- Права доступа
- Документооборот
- Линии
- Виджет «Код»
- Подписи
- Рабочие календари
- Интеграция с IP-телефонией
- Интеграция с сервисами рассылок
В этой статье
Работа с типами
Все объекты системы описываются как одноуровневые структуры, в которых кодам полей сопоставляются определённые типы. Типы можно разделить на следующие четыре класса:
Также есть специальный тип TJSON для хранения неструктурированных данных. В зависимости от класса экземпляры этого типа конструируются разным образом.
Примитивные типы
Примитивные типы сопоставимы с примитивными типами TypeScript. Например, в контексте процесса может быть поле для комментария типа TString, с которым можно работать, как с обычной строкой:
Context.data.__comment = 'Скрипт выполнен успешно!';
Структурные типы
В терминах JavaScript структурные типы по сути представляют собой объекты. Например, мы можем взаимодействовать с ФИО инициатора (тип TFullName) следующим образом:
const initiator = await Context.data.__createdBy.fetch(); const fn = initiator.data.fullname; Context.data.__comment = `Скрипт запустил ${ fn.firstname } ${ fn.lastname }`;
Экземпляры классов
Экземпляры классов необходимо создавать с помощью конструктора или описания поля. Например, если в контексте есть поле
total
типа TMoney, то для его заполнения необходимо сделать следующее:Context.data.total = new Money(17999.99, 'RUB');
Если требуется добавить новую строку в поле типа TTable, то необходимо сделать следующее:
// Получаем заказ const order = await Context.data.orders!.fetch(); // Вставляем строку таблицы const row = order.data.content!.insert(); // Заполняем строку row.item = Context.data.product!; row.amount = Context.data.amount!; // Сохраняем заказ await order.save();
Примечание: без сохранения элемента приложения обновление таблицы не произойдет.
Ссылки на объекты
Ссылки на объекты системы имеют метод
fetch()
, с помощью которого можно получить сам объект. Подробнее про объекты написано ниже в разделе Типы объектов.Описание поля
Также каждый тип имеет объект описания, с помощью которого можно конструировать объекты и производить другие операции. Допустим, в контексте есть поле
participants
типа Пользователи (множественное). Оно будет хранить массив ссылок TUser. Получить массив пользователей можно из описания соответствующего поля типа UserField, в котором есть метод UserField.fetchAll:const participants = await Context.fields.participants.fetchAll();
Если в контексте есть поле
order
типа Приложение, то через описание этого поля можно получить доступ непосредственно к приложению, например, чтобы создать новый элемент:const order = Context.fields.order.app.create(); order.client = Context.data.client; await order.save(); Context.data.order = order;
Типы объектов
Объекты системы представляют собой записи в базе данных. Это могут быть элементы приложений (ApplicationItem) или базовые объекты системы (UserItem, FileItem, ImageItem). Каждый объект описывается набором соответствующих ему полей (ItemData), где коду поля сопоставляется его тип. Также объекты имеют базовый набор полей BaseItemData. Каждый объект содержит описание своих полей (свойство
fields
), а также объект значений этих полей (свойствоdata
). Описание поля зависит от его типа.Ссылки на объекты
Для всех объектов существует также объект-ссылка ItemRef, через который можно получить сам объект. Например, в базовом наборе полей любого объекта есть ссылка на автора этого объекта
__createdBy
. Чтобы получить объект автора, необходимо запросить его следующим образом:const author = await Context.data.__createdBy.fetch();
У любой ссылки есть метод
fetch()
, с помощью которого можно запросить сам объект.Пользователи
Пользователь (UserItem) является объектом системы с набором полей UserData. Для ссылки на пользователя используется объект типа UserItemRef. В данный момент пользователей нельзя создавать или изменять из скриптов.
Допустим, по элементу приложения
order
запускается процесс, и необходимо поставить задачу на автора этого элемента. Тогда достаточно сделать динамическую зону ответственности и в связанную с ней переменнуюauthor
передать автора элемента:const order = await Context.data.order.fetch(); Context.data.author = order.data.__createdBy;
Для объекта пользователя и ссылки на него доступен метод UserItemRef.getChiefs, который позволяет получить руководителей пользователя. Например, получить руководителей автора из предыдущего примера можно следующим образом:
Context.data.chiefs = await Context.data.author.getChiefs();
Файлы
Файл (FileItem) — это объект системы с набором полей FileData. Для ссылки на файл используется объект типа FileItemRef. В данный момент файлы нельзя изменять из скриптов.
Метод FileField.create позволяет создать файл в контексте процесса, привязывая его к полю типа Файл:
const fileRq = await fetch(`https://jpeg.org/images/jpegsystems-home.jpg`) const buf = await fileRq.arrayBuffer() const file = await Context.fields.file.create("home.jpg", buf)
Метод FileField.createFromLink позволяет загрузить файл из стороннего источника и добавить его в контекст процесса, привязывая его к полю типа Файл:
const file = await Context.fields.file.createFromLink("home.jpg", `https://jpeg.org/images/jpegsystems-home.jpg`)
Методы FileItem.getDownloadUrl и FileItemRef.getDownloadUrl позволяют получить ссылку на скачивание файла:
const url = await file.getDownloadUrl();
Элементы приложений
Элемент приложения (ApplicationItem) состоит из полей этого приложения. Если в контексте есть поле типа Приложение, то в этом поле будет лежать одна ссылка (ApplicationItemRef) или массив таких ссылок (если выбрана опция Несколько). Получить объекты приложений можно по ссылкам из других объектов, а также из глобальных констант. Подробнее про работу с приложениями можно узнать в статье «Работа с приложениями».