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 пишет только в шаблоны, которые пользователю разрешено редактировать. Пользователи портала заметят, что редактор открывается по матрице прав, а в меню публикации появилась остановка запущенных процессов.
Новое
Добавьте свои поля документа в дизайнер
В 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, а сам журнал пишется и читается только при опции bizproctemplate_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-selectorbizprocdesigner-document, так что заметят это только те, кто вызывал экшен в обход редактора.
Мелочи и находки
getNodeFilterMetadataс 26.900.0 помечен атрибутомBitrix\Main\Engine\ActionFilter\Attribute\Rule\CloseSession. Экшен отпускает сессию, и параллельные запросы панели не ждут друг друга на её блокировке. Тот же атрибут пригодится своим экшенам, которые не пишут в сессию.- В контроллере «Данных процесса» (26.1100.0) соответствие типов bizproc сделано методом, а не константой класса. Константное выражение вычисляется уже при
new, доinit(), где подключается bizproc, и каждый ajax-запрос падал бы с fatal error.