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

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

Обновление безопасности

Закрыта уязвимость или ослабленная проверка прав. Ставить в первую очередь.

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

Новое

Добавьте свои поля документа в дизайнер

В 26.900.0 появилась публичная точка расширения Bitrix\BizprocDesigner\Public\Document\Interface\DocumentFieldsContributor. Модуль документа отдаёт поля сверх CBPDocumentService::getDocumentFields(), и они попадают в выбор полей нового дизайнера и в проверку битых ссылок. Контрибьютора дизайнер ищет в .settings.php модуля из $documentType[0], поэтому дописать поля получится только к своему типу документа. К сделкам CRM из своего модуля поле так не добавить. Поле с именем из базового набора отбрасывается, исключение контрибьютора уходит в лог, и редактор продолжает работать.

        <?php declare(strict_types=1);

namespace Vendor\Orders\Bizproc;

use Bitrix\Bizproc\FieldType;
use Bitrix\BizprocDesigner\Public\Document\Interface\DocumentFieldsContributor;

final class OrderFieldsContributor implements DocumentFieldsContributor
{
    public function getDocumentFields(array $documentType): array
    {
        // $documentType = ['vendor.orders', Document::class, 'ORDER']
        if (($documentType[2] ?? '') !== 'ORDER') {
            return [];
        }

        return [
            'DELIVERY_SLA_HOURS' => [
                'Name' => 'Срок доставки, ч',
                'Type' => FieldType::INT,
                'Editable' => false,
                'Required' => false,
                'Multiple' => false,
            ],
        ];
    }
}

    

Класс регистрируется в /local/modules/vendor.orders/.settings.php:

        <?php

return [
    'bizprocdesigner.documentfields' => [
        'value' => ['className' => \Vendor\Orders\Bizproc\OrderFieldsContributor::class],
        'readonly' => true,
    ],
];

    

Публикуйте схему с остановкой старых процессов

В 26.1100.0 заработал пункт меню публикации «Для новых процессов с остановкой старых», до этого он был заглушкой. Схема публикуется, процессы на старой версии останавливаются и сами не продолжатся, новые запускаются по новой схеме. Флага нет, пункт виден у любого сохранённого шаблона. Остановка необратима и встаёт в очередь после публикации. Если поставить её в очередь не удалось, схема всё равно опубликована, а пользователь видит, что старые процессы продолжат работу. Граница остановки отстоит от публикации на 5 секунд с запасом, поэтому процесс, стартовавший в эти секунды, тоже остановится.

Редактор открывается по правам на шаблоны

С 26.900.0 компонент bitrix:bizprocdesigner.editor пускает в существующий шаблон по TemplateAccessService::canEdit() из bizproc, в новый по canCreate(). Публикация проверяется отдельно через canPublish(), поэтому схему можно править без права её опубликовать. Свой шаблон компонента получит в $arResult новые ключи canEdit, canPublish и initCopilotOptions.

В следующих версиях закрыли две утечки в самом редакторе. Снимок последнего запуска (getLastRunValues, 26.1000.0) больше не отдаёт ID документов, найденных фильтром узла. getSettingsControls (26.1100.0) показывает состояние проекта задач в поле узла (доступен, скрыт, удалён), только если значение поля совпадает с сохранённым шаблоном или черновиком, который пользователь вправе редактировать.

Включите совместную работу над шаблоном

Всё это выключено опциями, по умолчанию N.

  • Журнал изменений (26.900.0) показывает в окне версий ленту правок шаблона и дифф каждой. Окно включает опция version_history_available, а сам журнал пишется и читается только при опции bizproc template_version_history_enabled. Данные отдают bizprocdesigner.v2.Diagram.getChangeEvents с курсорной пагинацией и getChangeEvent.
  • Заметки-обсуждения (26.1000.0, template_notes_available) крепятся к точке схемы, поддерживают ответы и упоминания и обновляются через pull. Ссылка с ?noteId= открывает редактор сразу на заметке.
  • Аренда шаблона (26.1000.0, template_edit_lock_available) отдаёт шаблон одному редактору. Аренда живёт 10 минут, и автосохранение владельца её продлевает. Пока чужая аренда жива, автосохранение, публикация и действия с версиями получают TEMPLATE_LOCKED. Админ портала может снять чужую аренду. При закрытии вкладки редактор снимает аренду через navigator.sendBeacon на bizprocdesigner.v2.Diagram.releaseTemplateLock, потому что обычный ajax на выгрузке страницы теряется. Приём годится для любых аренд и черновиков.

Переиспользуйте фрагменты и общие данные

В 26.1100.0 выделенную часть схемы можно сохранить как личный или общий фрагмент и вставить в другой шаблон. Вставка ничего не сохраняет. Сервер возвращает блоки и связи, а в списках skipped и needsReview то, что пропущено, и то, что надо проверить руками. На чужой личный фрагмент и на несуществующий ответ одинаковый, ACCESS_DENIED.

Библиотеку фрагментов закрывают тариф и флаг Bitrix\BizprocDesigner\Public\Features\ComponentLibrary, первый в модуле на механизме Main\Config\Feature (нужен main 26.700.0 и новее). Каждый экшен контроллера проверяет флаг, поэтому выключенная библиотека отказывает и на сервере. Свой флаг делается так же: пустой final-класс от AbstractFlag, пространство имён в ключе feature-flags файла .settings.php и проверка Feature::isEnabled(Flag::class).

Окно «Данные процесса» (тоже 26.1100.0) собирает параметры, переменные и константы шаблона вместе с общими переменными и константами портала. Элемент шаблона можно сделать общим, есть поиск использований и счётчик запущенных процессов. Общие значения записываются сразу, мимо черновика. Окно включает опция bizproc process_data_enabled. Заметки, аренду, фрагменты и «Данные процесса» хранит bizproc, их API описан в соседнем разборе bizproc 26.1500.0–26.1700.0.

Включить новинки на тестовом портале:

        <?php declare(strict_types=1);

use Bitrix\BizprocDesigner\Public\Features\ComponentLibrary;
use Bitrix\Main\Config\Feature;
use Bitrix\Main\Config\Option;
use Bitrix\Main\Loader;

Loader::requireModule('bizprocdesigner');

Option::set('bizproc', 'template_version_history_enabled', 'Y');
Option::set('bizprocdesigner', 'version_history_available', 'Y');
Option::set('bizprocdesigner', 'template_notes_available', 'Y');
Option::set('bizprocdesigner', 'template_edit_lock_available', 'Y');
Option::set('bizproc', 'process_data_enabled', 'Y');
Feature::enable(ComponentLibrary::class);

    

Что сломается

Проверьте, кому выданы права на шаблоны

До 26.900.0 редактор открывали только администраторы бизнес-процессов. Теперь его откроет любой, у кого в матрице прав bizproc есть создание, редактирование или публикация шаблонов. Пересмотрите выданные права до обновления.

Агенту и Марте нужно право на шаблон

Касается порталов с модулем aiassistant, где работают внешний агент (REST v3 bizprocdesigner.template.validate и template.draft.add) или Марта. В «Управлении сайтом» этого модуля нет.

В 26.900.0 агенту запретили писать исполняемые настройки узла, пока это только PHP-условие ветки. Существующее условие агент может вернуть лишь без изменений, новое написать не может. Раньше внешняя модель могла сочинить код условия, а администратор при публикации видел обычный узел «Условие». Узлы хранилищ теперь сверяются с опубликованной версией, а администратора сервер определяет по userId запроса, без опоры на сессию.

В 26.1000.0 для записи понадобилось право редактировать конкретный шаблон. Раньше хватало права CreateWorkflow на тип документа. Пользователь без права на шаблон теперь получит отказ и в REST, и в Марте.

Переведите агента со старых имён REST

bizprocdesigner.catalog.list и bizprocdesigner.document.fields вендор заменил ещё в 26.800.0 на catalog.block.list, catalog.block.get и document.field.list (разбор). Если портал прошёл 26.800.0 скачком через несколько версий, файлы старых контроллеров могли остаться на диске, и тогда старые имена продолжали отвечать. Наш тестовый портал обновился с 26.0.0 сразу до 26.800.0, и оба файла на нём остались. 26.1000.0 их удаляет, и агент на старых именах получит ошибку. Порталов, которые обновлялись по одной версии, это не касается.

Проверьте свои вызовы AJAX редактора

  • С 26.900.0 bizprocdesigner.v2.Diagram.updateTemplate, publicate и publicateDraft отклоняют описание шаблона длиннее 16 000 символов, нестроковое получает INVALID_PARAM_TYPE. Старые шаблоны с DESCRIPTION = NULL отдаются с пустой строкой.
  • bizprocdesigner.v2.Activity.getNodeFilterMetadata с 26.900.0 не возвращает documentFields и documentName. Редактор теперь берёт поля из entity-selector bizprocdesigner-document, так что заметят это только те, кто вызывал экшен в обход редактора.

Мелочи и находки

  • getNodeFilterMetadata с 26.900.0 помечен атрибутом Bitrix\Main\Engine\ActionFilter\Attribute\Rule\CloseSession. Экшен отпускает сессию, и параллельные запросы панели не ждут друг друга на её блокировке. Тот же атрибут пригодится своим экшенам, которые не пишут в сессию.
  • В контроллере «Данных процесса» (26.1100.0) соответствие типов bizproc сделано методом, а не константой класса. Константное выражение вычисляется уже при new, до init(), где подключается bizproc, и каждый ajax-запрос падал бы с fatal error.

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

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

Подписаться

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

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

В Bizprocdesigner 26.1200.0 одиннадцать скрытых опций редактора заменены feature-флагами. У нас включённые опции при установке перешли во флаги, но `Option::set(’bizprocdesigner’, …)` в ваших скриптах больше ничего не включает. REST-методы внешнего AI-агента отклоняют часть графов, которые раньше пр…

6 мин

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 Домовому.

Войти