Создание запланированного задания XBSL
Всегда создавай пару артефактов одного имени: <Имя>.yaml и <Имя>.xbsl.
Перед созданием .xbsl прочитай docs/xbsl-spec.md.
Перед генерацией прочитай references/ЗапланированноеЗадание.md.
Шаг 1: Собери параметры
Определи из запроса:
| Параметр | Обязательный | Дефолт |
|---|---|---|
Имя |
Да | Нет |
ЗапуститьВ |
Да | Нет |
Подсистема |
Нет | Выбрать по правилам ниже |
ОбластьВидимости |
Нет | ВПодсистеме |
ПредопределенноеЗадание |
Нет | ЗапланироватьПриОбновленииПроекта |
Описание |
Нет | Не добавлять |
Если имени или времени запуска нет, уточни их у пользователя. В YAML записывай
время литералом формата HH:MM без кавычек, например 08:00.
Шаг 2: Выбери проект и подсистему
Используй xbsl-explore для выбора проекта. Если проектов нет, предложи
сначала создать проект через xbsl-init. Если найдено несколько подходящих
проектов, уточни целевой.
После выбора проекта используй только его projects[].subsystems и применяй
правила строго по порядку:
- Если
Подсистемауказана, выбери точное совпадение внутри проекта независимо от числа других подсистем. Если совпадения нет, остановись и предложи создать подсистему черезxbsl-subsystem-add. - Если
Подсистемане указана и подсистема одна, выбери ее автоматически. - Если
Подсистемане указана и найдено несколько подсистем, уточни целевую у пользователя; не используйsuggested_pathкак неявный выбор. - Если
Подсистемане указана и подсистем нет, остановись и предложи создать подсистему черезxbsl-subsystem-add.
Проверь, что выбранный subsystem_path принадлежит выбранному проекту и
содержит Подсистема.yaml. Не размещай задание в корне проекта. После выбора
подсистемы проверяй имя только в ее projects[].subsystems[].objects. Не
перенаправляй файлы по глобальным conflict или suggested_path, полученным
для другой подсистемы.
Целевые файлы:
{subsystem_path}/{Имя}.yaml
{subsystem_path}/{Имя}.xbsl
Шаг 3: Сгенерируй UUID
Используй xbsl-uuid и запроси один UUID с дефисами для поля Ид объекта.
Не используй счетчики, повторяющиеся паттерны или заранее выбранные значения.
Шаг 4: Сформируй YAML
Минимальный ежедневный вариант:
ВидЭлемента: ЗапланированноеЗадание
Ид: <UUID>
Имя: <Имя>
ОбластьВидимости: ВПодсистеме
ПредопределенноеЗадание: ЗапланироватьПриОбновленииПроекта
Расписание:
-
Вид: Ежедневно
ЗапуститьВ: 08:00
ПериодПовтораДней: 1
Не добавляй поле обработчика в YAML. Связь с обработчиком задается companion модулем того же имени.
Шаг 5: Сформируй module companion
Создай <Имя>.xbsl:
@Обработчик
метод Обработчик()
;
Добавляй бизнес-логику внутрь Обработчик() только если пользователь описал
конкретное действие задания. Сигнатуру не меняй: метод без параметров.
Шаг 6: Безопасно запиши файлы
Сначала собери полный ожидаемый текст обоих файлов.
- Если файла нет, создай его.
- Если файл уже существует и его содержимое совпадает, оставь без изменений.
- Если файл уже существует и отличается, остановись, покажи путь и кратко объясни конфликт; не перезаписывай без явного решения пользователя.
Шаг 7: Проверь результат
Запусти доступный валидатор проекта для созданного YAML. Минимальная проверка перед ответом пользователю:
ВидЭлементаравенЗапланированноеЗадание.- YAML и
.xbslлежат рядом в выбранной подсистеме и имеют одно имя. - Родительский каталог обоих файлов содержит
Подсистема.yaml. - В
.xbslесть@Обработчикиметод Обработчик()без параметров. - В YAML нет поля, которое задает обработчик.