Перейти к основному содержимому
Версия: 5.x

Внутренний вызов (INTERNAL)

Оператор внутреннего вызова позволяет создавать действия на языках программирования, отличных от языка lsFusion. На текущий момент в платформе существует поддержка внешних действий только на языке Java.

В этом операторе можно указывать как непосредственно исходный код действия на языке Java, так и имя Java класса, байт-код которого находится в отдельном Java-файле. Во втором случае предполагается, что этот файл должен находится в classpath'е виртуальной машины сервера, а сам Java класс должен наследоваться от lsfusion.server.physics.dev.integration.internal.to.InternalAction. Выполняться при этом будет метод executeInternal(lsfusion.server.logics.action.controller.context.ExecutionContext context) этого класса.

Для этого оператора можно задать, какие классы создаваемое действие может принимать на вход, и может ли оно принимать на вход значения NULL. Если задаваемые условия не будут выполнены, создаваемое действие не выполнится и просто передаст управление следующему за ним действию.

Язык

Для объявления действия, реализованного на языке Java, используется оператор INTERNAL.

Примеры

showOnMap 'Показать на карте' 
INTERNAL 'lsfusion.server.logics.classes.data.utils.geo.ShowOnMapAction' (DOUBLE, DOUBLE, MapProvider, BPSTRING[100]);

serviceDBMT 'Обслуживание БД (многопоточно, threadCount, timeout)'
INTERNAL 'lsfusion.server.physics.admin.service.action.ServiceDBMultiThreadAction' (INTEGER, INTEGER) NULL;

printlnAction 'Вывести текст в консоль' INTERNAL <{ System.out.println("action test"); }>;
// здесь context - это параметр метода executeInternal
setNoCancelInTransaction() INTERNAL <{ context.getSession().setNoCancelInTransaction(true); }>;