Глобальный контекст и изоляция

Во время исполнения в сценарии доступно несколько глобальных констант.

Context

Основной глобальной константой является объект Context, содержимое которого зависит от местоположения сценария. Например, для сценария процесса Context будет содержать информацию об экземпляре этого процесса.

Context является объектом со списком полей, определённых пользователем (подробнее в статье «Работа с типами»). Например, если на вкладке Контекст добавить поле типа Строка с кодом foo, то с ним можно будет взаимодействовать следующим образом:

Context.data.foo = 'some string';

Context во многом похож на элемент приложения — за исключением того, что он не имеет методов сохранения и удаления. Он сохраняется автоматически по завершении сценария.

Application

Если процесс или виджет находится на уровне приложения, то в нём всегда доступен объект Application, предоставляющий методы по работе с текущим приложением. Например, можно создать новый заказ следующим образом:

const order = Application.create();
order.data.client = Context.data.client;
await order.save();

Namespace

Если процесс или виджет находится на уровне раздела, то в нём может быть доступен объект Namespace, содержащий все приложения этого раздела. Например, описание конкретного приложения можно получить как Namespace.app.orders:

const clientOrders = await Namespace.app.orders.search()
    .where(f => f.client.eq(Context.data.client))
    .all();

Global

В сценарии также может быть доступен объект Global, содержащий описание всех разделов. Использование этого объекта препятствует дальнейшей выгрузке сценария. Это значит, что если использовать этот объект в сценарии процесса или виджета, лежащего в разделе или приложении, то этот раздел или приложение нельзя будет экспортировать.

Объект Global содержит все доступные разделы в поле ns, то есть если создать раздел store, внутри которого расположено приложение orders, то его описание можно будет получить как Global.ns.store.app.orders:

const clientOrders = await Global.ns.store.app.orders.search()
    .where(f => f.client.eq(Context.data.client))
    .all();

Подробнее про работу с приложениями можно узнать в статье «Работа с приложениями». Константа Global всегда доступна в процессах и виджетах, созданных на уровне компании. В процессах, расположенных в разделах и приложениях, необходимо разрешить доступ к этой константе.

Запуск процессов

Из объектов Namespace и Application также можно запускать процессы.

await Application.processes.process_code.run({param: 1});
await Namespace.processes.process_code.run({param: 1});
await Global.ns._clients.app._leads.processes.process_code.run({param: 1});
await Global.ns._clients.processes.process_code.run({param: 1});

Подробнее читайте в описании объекта Process.

System

В объекте System доступны такие системные коллекции, как:

Server

В клиентских сценариях виджета доступна глобальная константа Server. В объекте Server доступны для вызова методы из серверного сценария виджета.

await Server.rpc.doSomething()

Подробнее в статье справки «Сценарии в виджетах».