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

Brief: интеграция

Доступ извне

Снаружи вызывается действие с параметрами, а результатом возвращаются значения указанных свойств без параметров. Действие задается тремя способами: EXEC — по имени, EVAL и EVAL ACTION — переданным кодом lsFusion (изнутри его выполняет оператор EVAL).

Запросы принимают сервер приложений (порт 7651) и веб-сервер:

  • Action API — /exec, /eval, /eval/action, оба сервера;
  • Form API — /form, только веб-сервер: ведение формы в интерактивном представлении;
  • File API — /files/list, /files/read, /files/search, только веб-сервер: чтение classpath приложения.

Принимается ли такой вызов вообще, задает настройка: enableAPI — для Action API и File API, enableUI — для Form API, который платформа считает пользовательским интерфейсом, а не программным. Действие, оказавшееся интерактивным, маршрутизируется в запущенный клиент пользователя и требует enableUI вдобавок к проверке enableAPI. Опция действия @@api разрешает конкретное действие при enableAPI=0 (авторизованный пользователь при этом все равно нужен), а @@noauth обходит и проверку аутентификации, и enableAPI. Аннотация помечает именованное действие, поэтому она не распространяется ни на /eval и /eval/action, выполняющие произвольный код, ни на File API, где никакое действие не вызывается. Механизм — обращение из внешней системы.

Из той же JVM или того же SQL-сервера к элементам обращаются напрямую — Java-кодом (Java API для интеграций) либо запросом SQL к таблицам платформы (обращение из внутренней системы).

Внешние вызовы (EXTERNAL)

Оператор EXTERNAL создает действие с одним вызовом внешней системы: параметры — в PARAMS, результаты — в свойства без параметров из TO.

EXTERNAL externalCall [PARAMS paramExpr1, ..., paramExprN] [TO propertyId1, ..., propertyIdM]

externalCall:

HTTP [CLIENT] [requestType] connectionStrExpr httpOption1 ... httpOptionN
TCP [CLIENT] connectionStrExpr
UDP [CLIENT] connectionStrExpr
SQL connectionStrExpr EXEC execStrExpr
LSF connectionStrExpr lsfExecType execStrExpr
DBF connectionStrExpr APPEND [CHARSET charsetLiteral]

HTTP — запрос по строке, TCP и UDP — байты файла в сокет, SQL — команда стороннему SQL-серверу, LSF — действие на другом сервере lsFusion, DBF — дозапись строк в .dbf (обращение к внешней системе). Подключения SQL, TCP, DBF переиспользуются внутри блока NEWCONNECTION; файл по URL забирает оператор READ.

readRate () {
EXTERNAL HTTP GET r'https://www.lsfusion.org/rate?cur=$1' PARAMS r'USD' TO exportFile;
}

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

Оператор INTERNAL выполняет код внутри собственных компонент поставки: Java в JVM сервера приложений, JavaScript-функцию или ресурс в веб-клиенте пользователя (CLIENT), SQL к базе самой платформы (DB).

INTERNAL [CLIENT] [syncType] className [(classId1, ..., classIdN)] [NULL]
INTERNAL [syncType] <{anyTokens}> [NULL]
INTERNAL internalCall [PARAMS paramExpr1, ..., paramExprN] [TO propertyId1, ..., propertyIdM]

Java-цель — класс, наследующий InternalAction, заданный своим именем или встраиваемым фрагментом кода в <{ }>. Такой код пишет значения прямо в свойства lsFusion в той же сессии изменений; что ему доступно — Java API для интеграций. Механизм всех трех типов — внутренний вызов (INTERNAL), место оператора рядом с FORMULAобращение к внутренней системе.

setNoCancelInTransaction() INTERNAL <{ context.getSession().setNoCancelInTransaction(true); }>;

Декларативная интеграция (FORMULA, CUSTOM, JSON)

Оператор FORMULA создает свойство, вычисляемое выражением на SQL, возможно разным для разных СУБД; табличная форма отображает свойство на целую таблицу (пользовательская формула).

FORMULA [NULL] [className [valueId]] implList [( paramList )] [NULL]

CUSTOM отдает отрисовку JavaScript-функции клиента: у группы объектов — CUSTOM renderFunction [OPTIONS optionsExpr] (блоки объектов), у свойства — CUSTOM renderFunction [CHANGE [editFunction]] (блок свойств и действий). Функция получает собственный локальный контроллер представления, который читает и изменяет то, что это представление показывает; контроллер формы, а с ним и вызовы сервера, достается из него как controller.form (How-to: Пользовательские компоненты).

Операторы JSON и JSONTEXT создают свойство, собирающее JSON из списка свойств или из формы.

jsonKeyword FROM [columnId1 =] propertyExpr1, ..., [columnIdN =] propertyExprN
[WHERE whereExpr]
[ORDER orderExpr1 [DESC], ..., orderExprL [DESC]]
[TOP topExpr] [OFFSET offsetExpr]
jsonKeyword ( formName [OBJECTS objName1 = expr1, ..., objNameK = exprK]
[FILTERS filterExpr1, ..., filterExprP]
[TOP topSelect] [OFFSET offsetSelect] )

jsonKeyword — это JSON или JSONTEXT.