Bizprocdesigner 26.1200.0: опции стали feature-флагами, REST агента строже проверяет граф

6 мин чтения Устаревших API: 2
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

Ломающее обновление

Удалены или изменены публичные 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 палитры и скрыт, пока выключен флаг bizproc PoolNodeFlag. Агентам пул не предлагается.
  • Рамку и пул нельзя перетащить на связь, чтобы вставить в неё.
  • Полоса занятости показывает имя и аватар того, кто держит шаблон. Режим «Вы ещё не начали редактирование» с кнопкой «Редактирование» убран.
  • Ссылки на поля собственного документа узла (документ события у триггера, фиксированный тип у сложного узла) больше не помечаются битыми. Исключение — ссылки, которые при выполнении читаются из документа шаблона.
  • С флагом 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 Удалено —

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

Читайте дальше

bizprocdesigner 26.1100.0 Безопасность Свежее

bizprocdesigner 26.900.0–26.1100.0: AI-агент больше не правит PHP-условия, публикация с остановкой старых процессов и свои поля документа

В разборе три версии bizprocdesigner: 26.900.0, 26.1000.0 и 26.1100.0. Метка security стоит из-за AI-агента, который с 26.900.0 не может написать или поменять PHP-условие ветки, а с 26.1000.0 пишет только в шаблоны, которые пользователю разрешено редактировать. Пользователи портала заметят, что реда…

1 мин

bizprocdesigner 26.600.0: публикация схемы сверяет права с шаблоном, внешние ИИ-агенты получили REST v3

В bizprocdesigner 26.600.0 публикация схемы проверяет права по типу документа самого шаблона. До этого пользователь с правом создавать процессы для одного типа документа мог опубликовать схему поверх шаблона другого типа, а по ответу контроллера понять, существует ли шаблон с нужным ID. Вендор не уп…

2 мин

bizprocdesigner 26.550.0: кода нет, переводы догнали выборку CRM из 26.500.0

В релизе сменился только номер версии в `version.php` и приехали языковые файлы de/en/kz. Логика PHP и JS не менялась, API, схема БД и deprecated-пометки на месте, обновляться можно не глядя. По коду в эталоне, выборка элементов CRM по фильтру, секция «Name and description» в настройках ноды и заглу…

2 мин

bizprocdesigner 26.500.0: фильтр ноды приехал выключенным

Крупный UI-релиз редактора схем плюс новый тип конструкции — фильтр ноды. Ломающих изменений нет: все правки контроллера и DTO совместимы со старыми вызовами. Главное, что стоит знать заранее: фича спрятана за опцией и по умолчанию выключена.

3 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…

Можно закрыть чат и перейти на другую страницу. Когда ответ будет готов, на кнопке Домового появится отметка.

Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти