Краткий обзор 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...);
Из текущей системы во внешнюю (декларативно, свойства)
- Описание:
CUSTOMUI-компоненты с 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 автогенерирует строки при переименованиях; безопасная эволюция БД.
Мини-карта для ИИ
CLASS→ тип объекта (таблица).= DATAили=выражение → свойство.{ ... }без=→ действие (императивно).FORM→ определение UI/запроса/отчёта.SHOW / DIALOG / PRINT→ открыть/печатать форму.EXPORT / IMPORT→ внешние форматы для свойств/форм.GROUP / PARTITION→ агрегаты значений.GROUP AGGR / AGGR→ агрегированные объекты.NEWSESSION / APPLY / canceled()→ управление транзакцией/сессией.EXTEND / ABSTRACT / += / +{→ точки расширения и полиморфизма.WHEN→ событие изменения данных;ON→ событие формы.