Skip to end of metadata
Go to start of metadata

Оператор EXTERNAL - создание действия, выполняющего обращение к внешней системе

Синтаксис

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

externalCall - внешний вызов, задается одним из следующих синтаксисов:

HTTP [requestType] connectionStrExpr [BODYURL bodyStrExpr] [HEADERS headersPropertyId] [COOKIES cookiesPropertyId] [HEADERSTO headersToPropertyId] [COOKIESTO cookiesToPropertyId]
SQL connectionStrExpr EXEC execStrExpr
LSF connectionStrExpr lsfExecType execStrExpr

Описание

Оператор EXTERNAL создает действие, которое делает запрос к внешней системе.

Параметры

HTTP

Ключевое слово. Определяет, что оператор выполняет http-запрос веб-сервера.

requestType

Ключевое слово. Определяет метод HTTP-запроса:

  • POST
  • GET
  • PUT
  • DELETE

Значением по умолчанию является POST.

SQL

Ключевое слово. Определяет, что оператор выполняет команду(ы) SQL-сервера.

LSF

Ключевое слово. Определяет, что оператор выполняет действие другого lsFusion-сервера.

connectionStrExpr

Выражение. HTTP: Строка http-запроса. SQL: строка подключения к СУБД. LSF: URL lsFusion-сервера (приложений).

bodyStrExpr

Выражение. Продолжение строки http-запроса в BODY. Актуально когда параметров в BODY > 1. Если не задано, параметры передаются в формате multipart.

headersPropertyId

headersToPropertyId

Идентификатор свойства, содержащего заголовки (headers) запроса. Свойство должно иметь ровно один параметр - имя заголовка запроса. Этот параметр должен принадлежать строковому классу. Если свойство не указано, заголовки не задаются / игнорируются.

cookiesPropertyId

cookiesToPropertyId

Идентификатор свойства, содержащего cookies запроса. Свойство должно иметь ровно один параметр - имя cookie. Этот параметр должен принадлежать строковому классу. Если свойство не указано, cookie не задаются / игнорируются.

lsfExecType

Ключевое слово. Определяет способ задания действия:

  • EXEC - задается имя вызываемого действия.
  • EVAL - задается код на языке lsFusion. Предполагается, что в этом коде присутствует объявление действия с именем run, именно это действие и будет вызвано.
  • EVAL ACTION - задается код действия на языке lsFusion. Для обращения к параметрам можно использовать спецсимвол $ и номер параметра (начиная с 1).

execStr

Выражение. SQL: SQL-команда(ы)запроса. LSF: имя действия или код, в зависимости от способа задания действия.

paramExpr1, ..., paramExprN

Список выражений, значения которых будут использоваться в качестве параметров обращения.

propertyId1, ..., propertyIdM

Список идентификаторов свойств (без параметров), в которые будут записаны полученные результаты.

Примеры

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 testExportFile = DATA FILE ();

externalHTTP()  { 
    EXTERNAL HTTP GET 'https://www.cs.cmu.edu/~chuck/lennapg/len_std.jpg' TO exportFile; 
    open(exportFile()); 

    EXTERNAL HTTP 'http://tryonline.lsfusion.org/exec?action=getExamples' PARAMS JSONFILE('\{"mode"=1\}') TO exportFile; // фигурные скобки escape'ся так как используются в интернационализации
    IMPORT FROM exportFile() FIELDS () TEXT caption, TEXT code DO
        MESSAGE 'Example : ' + caption + ', code : ' + code;
        
    EXTERNAL HTTP 'http://tryonline.lsfusion.org/exec?action=doSomething&someprm=$1' BODYURL 'otherprm=$2&andonemore=$3' PARAMS 1,2,'3'; // передает в BODY url-encoded второй и третий параметры
}
externalSQL ()  { 
    EXPORT TABLE FROM bc=barcode(Article a) WHERE name(a) LIKE '%Мясо%'; // получаем все штрих-коды товаров с именем мясо
    EXTERNAL SQL 'jdbc:mysql://$1/test?user=root&password=' EXEC 'select price AS pc, articles.barcode AS brc from $2 x JOIN articles ON x.bc=articles.barcode' PARAMS 'localhost',exportFile() TO exportFile; // читаем цены для считанных штрих-кодов
    
    // для всех товаров с полученными штрих-кодами записываем цены
    LOCAL price = INTEGER (INTEGER);
    LOCAL barcode = STRING[30] (INTEGER);
    IMPORT FROM exportFile() TO price=pc,barcode=brc;
    FOR barcode(Article a) = barcode(INTEGER i) DO 
        price(a) <- price(i);
}
externalLSF()  { 
    EXTERNAL LSF 'http://localhost:7651' EXEC 'System.testAction[]'; 
}; 

  • No labels