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

Краткий обзор lsFusion

Краткий обзор элементов lsFusion для ИИ-агентов

Формат: очень сжато, для понимания и генерации кода. Подробное описание и синтаксис извлекаются инструментами через RAG в документации.


Базовые элементы (от простых к сложным)

Классы (Classes)

  • Аналогия: классы ООП, с множественной диспетчеризацией по классам параметров. Задают типы объектов; используются в сигнатурах свойств/действий/форм.
  • Описание: базовый элемент — множество объектов. Наследование. Встроенные и пользовательские классы. Полиморфизм через наследование, ABSTRACT + += / ACTION+, MULTI.
  • Синтаксис (поиск): CLASS ClassName ['Caption'] [: ParentClass];

Свойства (Properties)

  • Аналогия: математические / чистые функции. Вычисляют факты, не меняют состояние. Декларативны, близки к SQL.
  • Описание: DATA (хранимые) и вычисляемые (формулы, агрегации, композиции).
  • Синтаксис (поиск): name 'Caption' = DATA Type (Class1, ...); или name (Params...) = Expression;

Действия (Actions)

  • Аналогия: процедуры / методы. Меняют состояние (БД или внешнее). Императивны, близки к Java.
  • Описание: двойственны свойствам: свойства = что; действия = как это изменяется.
  • Синтаксис (поиск): actionName 'Caption' (Params...) { ActionOperators }

Формы (Forms)

  • Аналогия: SQL-запрос, но шире (много таблиц сразу). Универсальный элемент данных/UI.
  • Описание: OBJECTS (группы), PROPERTIES (что показывать / действия), FILTERS (фильтр строк). Представления: интерактивное (SHOW), печатное (PRINT), структурное (EXPORT/IMPORT). Расширяется через EXTEND FORM.
  • Синтаксис (поиск): FORM FormName 'Caption' OBJECTS ... PROPERTIES ... FILTERS ... ;

События (Events)

  • Аналогия: триггеры БД, но шире. Зависящие от времени реакции на изменения данных.
  • Описание: основной оператор WHEN; анализаторы изменений сессии CHANGED, SET, DROPPED, PREV и т. д. События формы: ON CHANGE/ON EDIT/ON CONTEXTMENU/ON GROUPCHANGE/ON CHANGEWYS. События блока: BEFORE / AFTER.
  • Синтаксис (поиск): prop(...) <- Expr WHEN CHANGED(...); или PROPERTIES(...) prop ON CHANGE action(...);

Ограничения (Constraints)

  • Аналогия: ограничения целостности, не зависящие от времени инварианты.
  • Описание: проверяются на APPLY; виды: общие (CONSTRAINT), простые (=>, NONULL, уникальность через GROUP AGGR).
  • Синтаксис (поиск): CONSTRAINT name 'Caption' CHECK condition(...); или premise(...) => consequence(...) [RESOLVE LEFT|RIGHT];

Агрегации (Aggregations)

  • Аналогия: агрегированные объекты, поддерживаемые декларативно.
  • Описание: создаются через AGGR (см. операторы свойств). Платформа поддерживает агрегированные объекты по правилам.
  • Синтаксис (поиск): см. оператор AGGR ниже.

Дополнительные элементы

  • Навигатор (NAVIGATOR): меню / маршрутизация, связывающая формы и действия.
  • Окна (WINDOW): компоновка нескольких форм/областей.
  • Таблицы (TABLE): явные таблицы БД (редко; низкоуровневое IN/интеграция).
  • Индексы (INDEX): явные индексы БД (в основном генерируются автоматически).

Модули (Modules)

  • Аналогия: пакет / сборка (.lsf-файл).
  • Описание: единица переиспользования; содержит классы/свойства/действия/формы/события/ограничения; зависимости через REQUIRE.
  • Синтаксис (поиск): MODULE ModuleName; REQUIRE ModuleA, ModuleB;

Операторы свойств

Базовые выражения

  • Описание: арифметика, логика, строки, сравнения, проверки типа (IS/AS), условные (IF ... ELSE, постфиксное f(a) IF g(a)).
  • Синтаксис (поиск): стандартные операторы выражений.

Композиция (Composition)

  • Аналогия: вызов функции внутри функции / композиция функций в математике. Использование одного свойства в выражении другого.
  • Описание: свойство-от-свойства. Обычно неявно (простая подстановка свойства в выражение).
  • Синтаксис (поиск): использование свойств в выражениях других свойств.

Группировка (GROUP)

  • Описание: агрегаты значений (sum/count/max/min/last/concat). Не агрегаты объектов.
  • Синтаксис (поиск): GROUP SUM source(...) IF Condition; или GROUP SUM source(...) BY groupExprs...;

Партиционирование / окно (PARTITION)

  • Описание: оконная логика: ранги, предыдущее значение, накопительные.
  • Синтаксис (поиск): PARTITION AggOp expression IF Condition ORDER orderExprs...;

Агрегирование объектов (GROUP AGGR)

  • Описание: поддерживает агрегированные объекты через BY.
  • Синтаксис (поиск): GROUP AGGR Class x WHERE BaseCondition BY groupExprs...;

Оператор AGGR

  • Описание: создаёт/поддерживает агрегированные объекты автоматически.
  • BNF: aggrPropertyDefinition ::= AGGR baseEventPE customClassUsage WHERE propertyExpression (NEW baseEventNotPE)? (DELETE baseEventNotPE)?
  • Синтаксис (поиск): AGGR Class x WHERE condition(...) [NEW newEvent] [DELETE deleteEvent] [MATERIALIZED] [INDEXED];

OVERRIDE

  • Описание: слияние нескольких источников с приоритетом.
  • Синтаксис (поиск): OVERRIDE expr1, expr2, expr3;

RECURSION

  • Описание: рекурсивные свойства (деревья/графы/замыкания).
  • Синтаксис (поиск): RECURSION baseExpr THEN stepExpr;

ABSTRACT

  • Описание: объявление абстрактного свойства; реализации через += в других модулях.
  • Синтаксис (поиск): ABSTRACT [MODIFIERS] Type (ParamClasses...); и prop[Context](Params...) += implExpr;

Операторы действий

Базовые операторы

  • Мутации: присваивание (<-), NEW, DELETE.
  • Вызов действия: Аналогия — вызов функции / процедуры / метода. Просто имя действия с параметрами. Не мутация, выполняет другое действие.
  • Синтаксис (поиск): property(...) <- Expression [WHERE ...];, NEW alias = Class { ... }, DELETE ... WHERE ...;, actionName(params...);

Последовательность (Sequence)

  • Описание: упорядоченный блок действий.
  • Синтаксис (поиск): actionName(Params...) { op1; op2; }

Цикл FOR

  • Описание: перебор всех кортежей, где свойство-условие не NULL; может создавать объекты.
  • Синтаксис (поиск): FOR Expression [ORDER ...] [TOP n] [OFFSET m] [NEW alias = Class] DO { ... } [ELSE { ... }]

Цикл WHILE

  • Описание: повторять, пока условие где-либо истинно (не NULL).
  • Синтаксис (поиск): WHILE condition DO { ... }

Ветвление (Branching)

  • Описание: IF, CASE, MULTI (полиморфное ветвление).
  • Синтаксис (поиск): IF ... THEN { ... } ELSE { ... }, CASE WHEN ..., MULTI impl1[p](p), impl2[p](p);

Управление потоком

  • Описание: BREAK, CONTINUE, RETURN, TRY...CATCH, NEWTHREAD, NEWEXECUTOR.
  • Синтаксис (поиск): стандартные ключевые слова управления потоком.

Действия формы

  • Описание: SHOW, DIALOG, ACTIVATE (активация формы / вкладки / свойства и поиск объекта), EXPAND, COLLAPSE.
  • Синтаксис (поиск): SHOW FormName [OBJECTS ...];, DIALOG FormName OBJECTS ... INPUT [FILTERS ...] DO { ... }, ACTIVATE FORM/TAB/PROPERTY name;, ACTIVATE [FIRST|LAST|NULL] group = obj;

Сессии изменений (Change sessions)

  • Описание: изолированный набор изменений. До APPLY данные локальны для сессии. На APPLY: успех → фиксация; неудача → canceled() = TRUE, в applyMessage() ошибка, данные остаются в сессии.
  • Операции сессии: NEWSESSION action (независимая), NESTEDSESSION (зависимая вложенная). Использовать для единиц работы (диалог, импорт, обработка файла).

Представления формы

Интерактивное представление

  • Аналогия: обычные страницы приложения, но единый поток выполнения (нет разделения языка сервер/клиент).
  • Описание: SHOW открывает интерактивную форму; DIALOG модальный с INPUT / FILTERS; DESIGN задаёт компоновку UI. INPUT — запрос значения у пользователя. Реактивные обновления; WYSIWYG.
  • Синтаксис (поиск): SHOW formName [OBJECTS ...] [DOCKED];, DIALOG formName OBJECTS ... INPUT [FILTERS ...] DO { ... }, DESIGN formName { ... }, INPUT var = Type DO { ... }

Печатное представление

  • Аналогия: отчёты (jrxml + JasperReports).
  • Описание: jrxml задаёт макет печати; отчёт инициируется из lsFusion.
  • Синтаксис (поиск): PRINT formName [OBJECTS ...] TO FILE fileVar;

Структурное представление

  • Аналогия: структурированные форматы данных (JSON, XML, XLSX, DBF).
  • Описание: действие EXPORT выводит в файл/поток; свойство JSON строит JSON; IMPORT загружает обратно.
  • Синтаксис (поиск): EXPORT FROM expr1, expr2 TO fileVar;, prop(...) = JSON expr;, IMPORT JSON|CSV|XLS|XML FROM fileVar TO props...;

Интеграция

  • Идея: одна и та же парадигма свойств/действий для внешних и внутренних систем.

Из текущей системы во внешнюю (императивно, действия)

  • Описание: EXTERNAL — HTTP/внешний код/SQL как действия.
  • Синтаксис (поиск): EXTERNAL Name 'id' [OPTIONS] (Params...);

Из текущей системы во внешнюю (декларативно, свойства)

  • Описание: CUSTOM UI-компоненты с JSON-интерфейсом; JSON строит структуры для UI/API.
  • Синтаксис (поиск): OBJECTS alias = Class CUSTOM 'componentName' ..., prop(...) = JSON expr;

Из внешних систем в текущую

  • Описание: Action API — вызов действий lsFusion по HTTP. Протокол HTTP (порты 7651). Режимы действий: EXEC (по имени), EVAL (код с действием run), EVAL ACTION (код действия). Form API — работа с формами по HTTP для фронтендов. Действия помечаются @@api для доступа через API.
  • Синтаксис (поиск): опция действия @@api, URL /exec?action=..., /eval?script=..., /eval/action?script=...

Из текущей системы во внутреннюю (императивно)

  • Описание: INTERNAL — вызов Java-кода; на стороне Java использовать findProperty, read, change.
  • Синтаксис (поиск): INTERNAL Name 'id' [OPTIONS] (Params...);

Из текущей системы во внутреннюю (декларативно)

  • Описание: FORMULA — свойства, вычисляемые на SQL.
  • Синтаксис (поиск): prop(...) = FORMULA 'sql expression with $1, $2, ...';

Физическая модель (структура БД)

  • Аналогия: ручное/динамическое управление схемой БД (таблицы, индексы, материализация).
  • Описание: фокус на производительности / открытой схеме.
  • Синтаксис (поиск): TABLE tableName ['dbName'] (ClassOrParams...);, prop = DATA Type (Class) MATERIALIZED ['dbFieldName'] INDEXED ['indexName'];

Расширения (Extensions)

  • Описание: модульность/полиморфизм на уровне модуля: EXTEND CLASS, EXTEND FORM, ABSTRACT + +=, ACTION+.
  • Синтаксис (поиск): EXTEND CLASS ClassName : ParentClass;, EXTEND FORM FormName ... ;, prop(...) += implExpr;, ACTION actionName(...) + { ... }

Метапрограммирование (Metaprogramming)

  • Аналогия: генераторы кода/шаблоны в языке.
  • Описание: оператор @ генерирует код из описаний; IDE может автогенерировать.
  • Синтаксис (поиск): @metaName { ... }

Идентификация и эргономика

  • Пространства имён: управляют видимыми именами. Синтаксис (поиск): NAMESPACE MyNamespace;
  • Явная типизация: параметры/локальные свойства типизированы. Синтаксис (поиск): LOCAL var = Type ();
  • Интерполяция строк: построение строк из идентификаторов/значений (также для i18n). Синтаксис (поиск): '{namespace.element}'

Интернационализация

  • Описание: заголовки через resource bundles (*ResourceBundle.properties). Использовать идентификаторы вида {use.case.i18n.book}; UI переключает язык автоматически.
  • Синтаксис (поиск): CLASS Book '{use.case.i18n.book}';

Миграция

  • Описание: файлы миграции описывают эволюцию схемы/данных; IDE автогенерирует строки при переименованиях; безопасная эволюция БД.

Мини-карта для ИИ

  1. CLASS → тип объекта (таблица).
  2. = DATA или = выражение → свойство.
  3. { ... } без = → действие (императивно).
  4. FORM → определение UI/запроса/отчёта.
  5. SHOW / DIALOG / PRINT → открыть/печатать форму.
  6. EXPORT / IMPORT → внешние форматы для свойств/форм.
  7. GROUP / PARTITION → агрегаты значений.
  8. GROUP AGGR / AGGR → агрегированные объекты.
  9. NEWSESSION / APPLY / canceled() → управление транзакцией/сессией.
  10. EXTEND / ABSTRACT / += / +{ → точки расширения и полиморфизма.
  11. WHEN → событие изменения данных; ON → событие формы.