Bizprocdesigner 26.1200.0: опции стали feature-флагами, REST агента строже проверяет граф
Ломающее обновление
Удалены или изменены публичные API — прикладной код может перестать работать.
В Bizprocdesigner 26.1200.0 одиннадцать скрытых опций редактора заменены feature-флагами. У нас включённые опции при установке перешли во флаги, но Option::set('bizprocdesigner', …) в ваших скриптах больше ничего не включает. REST-методы внешнего AI-агента отклоняют часть графов, которые раньше принимали, а в редакторе появились горячие клавиши, пул с дорожками и тестовый запуск от триггера, который с bizproc 26.1800.0 пока не стартует. Изменения bizproc того же дня описаны в разборе Bizproc 26.1800.0, прошлые версии модуля — в Bizprocdesigner 26.900.0–26.1100.0.
Новое
Тестовый запуск от триггера
В меню триггера появился пункт «Протестировать». Диалог рассчитан на данные триггера и выбор документа: создать новый или выбрать существующий. С bizproc 26.1800.0 запуск пока не стартует, подробности в разделе «Что сломается».
На сервере работает AJAX-контроллер Bitrix\BizprocDesigner\Infrastructure\Controller\TestRun с действиями bizprocdesigner.v2.TestRun.status, prepare, start и finish, только POST. Функцию открывают два флага, DebugBarFlag и TestRunFeature (он лежит в Public\Features), а пользователю нужно право публиковать шаблон. Выключенная функция и нехватка прав дают один и тот же ACCESS_DENIED. Для JS добавлены коды FeatureCode.testRun и FeatureCode.poolNode.
Что увидит пользователь редактора
- Окно «Горячие клавиши» в меню схемы: пять групп действий, сочетание обязательно с Ctrl, Alt или Cmd, Enter и Escape заняты редактором. Сочетания личные, поэтому окно открывается и в шаблоне, доступном только на чтение.
- Пул с дорожками, не больше пяти. Блок стоит в группе
workflowпалитры и скрыт, пока выключен флаг bizprocPoolNodeFlag. Агентам пул не предлагается. - Рамку и пул нельзя перетащить на связь, чтобы вставить в неё.
- Полоса занятости показывает имя и аватар того, кто держит шаблон. Режим «Вы ещё не начали редактирование» с кнопкой «Редактирование» убран.
- Ссылки на поля собственного документа узла (документ события у триггера, фиксированный тип у сложного узла) больше не помечаются битыми. Исключение — ссылки, которые при выполнении читаются из документа шаблона.
- С флагом
ReadableExpressionsFlagпревью правил, версий и ответы «Данных процесса» показывают выражения метками. Метки строятся только для того, кто может редактировать шаблон. - Вход связи может начинаться с карточки «Общие настройки», одной на вход и одной на все правила узла. В лимит связей она не входит.
- Автозаполнение связи строится для типа, который поддействие реально создаёт.
- Действие, которое одновременно
NODEиNODE_ACTION(например,IMNotifyActivity), больше не остаётся пустым контейнером.
Что получат авторы своих блоков
Компонент bizprocdesigner.editor подключает renderer JS и CSS вложенных действий типа NODE_ACTION. Поле FieldType::CUSTOM во вложенном действии рисует его renderer.js, и рендерер может вернуть функцию или Vue-компонент.
Конфигуратор действия (\CBPActivity::createConfigurator()) получает в контексте WorkflowDocumentType, RelationAncestorBlockIds и ConditionBlockAvailable. Последний говорит узлу, что собственное свойство условия ему можно не держать.
Новое действие Activity\Complex::getConditionDocumentTypeAction() отдаёт тип документа, на котором решается условие узла. Из коробки этот канал пока не объявляет ни одно действие, свой триггер может объявить его по примеру из разбора bizproc.
Адаптер fields-selection реализует необязательный openSelection(anchor, property, context, options) из SelectionProvider расширения bizproc.fields.
Новое в REST агента
bizprocdesigner.document.field.list принимает documentType вида module@entity@documentType и рядом с items отдаёт documentType и searchMode (all, substring или semantic). Чужой тип отдаётся, только если шаблон вправе его назвать и у пользователя есть на него ViewWorkflow. Поля с префиксами CONTACT. и COMPANY. без права на сущность отбрасываются, ответ больше 1 МБ заканчивается исключением.
bizprocdesigner.catalog.block.get принимает contextSettings и всегда отдаёт settings, carriedSettings, settingConstraints, returnFields и typesDescription.
template.get и template.draft.add возвращают name и description, а draft.add и validate их принимают: имя до 255 символов и непустое, описание до 16 000, из BB-кода остаются b, i, u, s, list, * и url на http, https, mailto. Если пользователь поправил эти поля в редакторе, отметка агента с них снимается. В ответе проверки появились warnings и details у проблемы.
Что сломается
Включайте функции флагами
Опции *_available модуль больше не читает, вместо них флаги Bitrix\Main\Config\Feature, по умолчанию выключенные. Кода переноса в модуле нет, флаги, судя по всему, включает сам пакет обновления. Мы ставили 26.1200.0 на «1С-Битрикс: Управление сайтом» редакции «Бизнес», где в Y стояли три опции, и после установки в b_feature_flag включились ровно их флаги: RulesSummaryFlag, ReadableExpressionsFlag и ComplexNodeConnectionsFlag. После обновления сверьте b_feature_flag со своими опциями.
Сломаются скрипты развёртывания и настройки, где функции включали через Option::set('bizprocdesigner', …, 'Y'). Такой вызов больше ничего не включает.
Опция bizprocdesigner |
Флаг Bitrix\BizprocDesigner\Public\Feature\… |
|---|---|
ai_assistant_available |
Ai\AiAssistantFlag |
external_ai_agent_available |
Ai\ExternalAiAgentFlag |
debugger_available |
Editor\DebugBarFlag |
template_notes_available |
Editor\TemplateNotesFlag |
rules_summary_available |
Editor\RulesSummaryFlag |
expression_builder_available |
Expression\ExpressionBuilderFlag |
readable_expressions_available |
Expression\ReadableExpressionsFlag |
complex_node_connections_available |
Node\ComplexNodeConnectionsFlag |
node_filter_available |
Node\NodeFilterFlag |
version_history_available |
Template\VersionHistoryUiFlag |
template_edit_lock_available |
Template\TemplateEditLockFlag |
Из настроек модуля опцией осталась только agent_token_ttl, срок жизни токена агента. Таблицы данных редактор теперь открывает по флагу bizproc DataViewFlag, опцию bizproc dataview_enabled он больше не смотрит.
<?php declare(strict_types=1);
use Bitrix\BizprocDesigner\Public\Feature\Editor\RulesSummaryFlag;
use Bitrix\BizprocDesigner\Public\Feature\Editor\TemplateNotesFlag;
use Bitrix\BizprocDesigner\Public\Feature\Template\TemplateEditLockFlag;
use Bitrix\Main\Config\Feature;
use Bitrix\Main\Loader;
Loader::requireModule('bizprocdesigner');
// Было: Option::set('bizprocdesigner', 'template_notes_available', 'Y') и такая же строка для template_edit_lock_available
Feature::enable(TemplateNotesFlag::class, TemplateEditLockFlag::class);
// Было: Option::get('bizprocdesigner', 'rules_summary_available', 'N') === 'Y'
$rulesSummaryOn = Feature::isEnabled(RulesSummaryFlag::class);
Тестовый запуск и «Данные процесса» с bizproc 26.1800.0
С bizproc 26.1800.0 не включайте TestRunFeature и флаг bizproc ProcessDataFlag. Тестовый запуск не стартует. Модуль bizproc этой версии запускает только шаблоны без документа, а для них запрос запуска падает с ошибкой PHP: контроллер обращается к классу DocumentSource, которого в bizproc нет. В окне «Данные процесса» с ошибкой PHP падают создание, правка и удаление общих значений портала и перенос элемента в общие, потому что контроллер вызывает у GlobalConst и GlobalVar методы, которых в bizproc 26.1800.0 тоже нет.
Уберите проверку frameNodeSticking
Опцию frame_node_sticking_available удалили без замены, и рамка на схеме теперь всегда тянет за собой лежащие в ней блоки. Код frameNodeSticking убран из FeatureCode расширения bizprocdesigner.feature, поэтому проверка Feature.instance().isAvailable(FeatureCode.frameNodeSticking) в вашем JS всегда вернёт false при работающей функции. Удалите её.
Проверьте графы своего агента
Касается тех, кто сам вызывает bizprocdesigner.template.validate и bizprocdesigner.template.draft.add. Методы работают по токену агента при флаге ExternalAiAgentFlag, если AI доступен по тарифу и региону. Встроенный ассистент новых проверок не получил.
- Id блока теперь состоит только из
[A-Za-z0-9_]и не может быть из одних цифр, иначеBlockIdInvalid. Раньше числовой id молча переименовывался, а id с разделителем записывался как есть. Старый id проходит, если блок того же типа уже носит его в опубликованной версии или в графе изtemplate.get. - Черновик с незаполненной обязательной настройкой раньше записывался. Теперь он получит
SettingRequired, а нарушенное правило настроек —SettingConstraintViolated. - За неправильный порядок хранилищ отвечают
StorageCreatorConflictиStorageOrderInvalid. - Выражение со ссылкой на несуществующий блок или выход либо на блок не выше по графу получает
ExpressionBlockUnknown,ExpressionOutputUnknownилиExpressionBlockNotAncestor. bizprocdesigner.document.field.listбезdocumentTypeпри сбое чтения полей бросаетDocumentFieldsUnavailableException, а раньше отдавал пустойitems.
Deprecated
Константа Bitrix\BizprocDesigner\Internal\Entity\BlockTypeDetail::LOOPBACK_PORT_TITLE ('->>') помечена @deprecated, замена — Bitrix\Bizproc\Activity\Dto\Port::$role. По роли ActivityPortRole::LoopBody проверка графов внешнего AI-агента находит, куда возвращается тело цикла, а заголовок ->> читает только у входа без role. Если у вас свой цикл, объявите роли портов в его .description.php:
<?php declare(strict_types=1);
use Bitrix\Bizproc\Activity\Dto\NodePorts;
use Bitrix\Bizproc\Activity\Dto\NodeSettings;
use Bitrix\Bizproc\Activity\Dto\Port;
use Bitrix\Bizproc\Activity\Dto\PortCollection;
use Bitrix\Bizproc\Activity\Enum\ActivityPortRole;
// Цикл по строкам выгрузки: смысл порта задаёт role, title остаётся подписью
$nodeSettings = new NodeSettings(
ports: new NodePorts(
input: new PortCollection(
new Port('i0', title: 'Старт', role: ActivityPortRole::Entry),
new Port('i1', title: 'Следующая строка', role: ActivityPortRole::LoopBody),
),
output: new PortCollection(
new Port('o0', title: 'Строка', role: ActivityPortRole::LoopBody),
new Port('o1', title: 'Готово', role: ActivityPortRole::LoopExit),
),
),
);
// Дальше: (new ActivityDescription(...))->setNodeSettings($nodeSettings)
Мелочи и находки
- Закрыта выгрузка шаблона другого типа документа по id. Экспорт в
bizproc.workflow.edit(ajax.php,exportAction()) раньше проверял только правоCreateWorkflowна тип из подписанных параметров страницы и отдавал шаблон с любым id. Теперь шаблон читается из базы: если его нет, ответ 404, если его тип не совпал с типом страницы, экспорт отказывает. - Сохранение правила сложного узла, в выражение которого вложен тип документа, требует
CreateWorkflowна этот тип, иначеACCESS_DENIED.
Устаревшие и удалённые API в этой версии
| Символ | Статус | Чем заменять |
|---|---|---|
Bitrix\BizprocDesigner\Internal\Entity\BlockTypeDetail::LOOPBACK_PORT_TITLE
|
Deprecated |
Bitrix\Bizproc\Activity\Dto\Port::$role
|
BX.Bizprocdesigner.FeatureCode.frameNodeSticking
|
Удалено | — |