Crm 26.1800.0–26.1900.0: описания стадий, обязательные поля и проверка согласий
Обновление безопасности
Закрыта уязвимость или ослабленная проверка прав. Ставить в первую очередь.
В CRM 26.1800.0 и 26.1900.0 появились описания стадий, команды обязательности полей и новые методы REST 3.0. Обновления закрывают ошибки доступа и обработки фильтров; интеграторам придётся проверить веб-формы, документные дела и шаблоны БП.
Новое
Опишите правила работы на стадии
С 26.1800.0 поле DESCRIPTION у стадий и статусов хранит до 65 535 байт. В описании работают BB-коды b, i, u, s и ссылки. Менеджеры видят текст в подсказках канбана и карточки CRM; редактируют его в попапе стадии.
Регламент воронки можно загрузить через crm.status.add/crm.status.update, CCrmStatus или ORM StatusTable. REST принимает только строку. При обновлении через CCrmStatus::Update() без SORT прежняя сортировка теперь сохраняется.
Задайте обязательность поля из PHP
В 26.1800.0 появились публичные SetRequirementCommand и ClearRequirementCommand. Они требуют права на управление полями. Пример для уже созданного пользовательского поля сделки, после подключения пролога:
<?php declare(strict_types=1);
use Bitrix\Crm\V2\Public\Command\Field\SetRequirementCommand;
use Bitrix\Crm\V2\Public\Entity\Field\Requirement\SetInput;
use Bitrix\Crm\V2\Public\EntityType;
use Bitrix\Main\Engine\CurrentUser;
use Bitrix\Main\Loader;
Loader::requireModule('crm');
$result = (new SetRequirementCommand(
EntityType::deal(),
(int)CurrentUser::get()->getId(),
'UF_CRM_CONTRACT_NO',
0,
SetInput::withRequiredStageIds(['PREPAYMENT_INVOICE', 'EXECUTING']),
))->run();
if (!$result->isSuccess()) {
echo implode('; ', $result->getErrorMessages());
}
0 означает основную воронку сделки. Для лидов и предложений categoryId равен null. Пустой список стадий снимает правило, а SetInput::withoutRequiredStageIds() делает поле обязательным во всей воронке. Недоступность настройки по лицензии возвращается как STAGE_REQUIREMENT_NOT_AVAILABLE; технические сбои могут бросить RuntimeException.
С 26.1900.0 REST 3.0 читает настройку через crm.deal.field.required.get и аналогичные методы других сущностей за флагом RestV3CrudDeal. У действий set и clear в этой версии нет маршрутов, хотя методы контроллера уже написаны.
Читайте дела и записывайте трейсы через REST 3.0
В 26.1800.0 добавлены crm.activity.get, crm.activity.field.list/get и контекстные методы вроде crm.deal.activity.get. Нужен флаг RestV3CrudDeal. Коммуникации недоступных пользователю клиентов маскируются.
В 26.1900.0 отдельный флаг RestV3Tracking открывает crm.tracking.trace.get/list/add/delete. Трейсы содержат источник, UTM, страницы и каналы и связываются с сущностями CRM. list фильтрует по entityTypeId и entityId, delete обрабатывает максимум 500 привязок. У элементов появилось поле trackingSourceId. Флаг по умолчанию выключен.
В новом дизайнере БП с 26.1800.0 есть действие «Получить информацию о товаре»: по ID возвращает поля товара или предложения, картинки и выбранные свойства. Без доступа к каталогу действие скрыто.
Что сломается
Документы перестанут создавать дела
В 26.1800.0 удалён провайдер CRM_DOCUMENT и публичные методы DocumentGeneratorManager::createDocumentActivity(), actualizeDocumentImmediately() и enqueueItemScheduledDocumentsForActualization(). Старые дела-документы таймлайн показывает недоступными. Шаблоны БП с CreateActivity = Y в действии «Создать документ» больше не создают дело.
У триггера CBPCrmEntityCreateTrigger исчезли выходы EntityTypeId и EntityId; остался документ ReturnDocument. Перепроверьте ссылки на эти выходы в новом дизайнере. Поле COMPANY_ID документа «Контакт» сменило тип со строки на селектор компании.
Обновите импорты Requirement и управление флагом форм
В 26.1800.0 классы V2 Public обязательности полей переехали в Bitrix\Crm\V2\Public\Entity\Field\Requirement. Старые импорты и исключения замените по списку removed.
С 26.1900.0 у RestV3WebForm удалены публичные enable()/disable(). Используйте \Bitrix\Crm\Feature::enable('RestV3WebForm') и disable(). Состояние читается из флагов main; проверьте включённость REST 3.0 форм после обновления.
Передавайте согласия на сервер
В 26.1900.0 crm.site.form.fill и Fill::save() с включённой проверкой полей сверяют согласия с документами сохранённой формы. Без обязательного согласия результат не создаётся, возвращается CRM_WEBFORM_AGREEMENT_REQUIRED. Собственный фронтенд должен передавать в consents JSON вида {"AGREEMENT_5":"Y"} для нужного документа. При setFieldChecking(false) согласия больше не записываются в результат.
В новых формах чекбокс согласия по умолчанию снят, даже при LICENCE_BUTTON_IS_CHECKED = 'Y', пока выключен WebFormConsentBySubmit. Так же создаются предустановленные формы.
Флаг TwoPhaseDocumentCreation в 26.1900.0 включён по умолчанию: новый документ открывается в слайдере-оболочке и создаётся отдельным запросом. Проверьте доработки слайдера. CCrmDocument::AddDocumentField() при ошибке теперь возвращает false; текст ошибки доступен через GetLastAddDocumentFieldError().
Исправления безопасности
В 26.1800.0 AJAX-мастер crm.config.checker получил проверку права настройки CRM и ограничение POST. Вложения БП-письма принимают только ID существующих файлов вместо произвольного пути или URL. Кеш прав на изменение дел разделён по пользователям.
Вход в Zoom теперь проверяет пару linkCode/joinToken, если socialservices поддерживает токены. Легаси-путь оставлен для коротких ссылок на незавершённые встречи в пределах длительности встречи плюс семь дней.
В 26.1900.0 фильтры гридов CRM и crm.item.list удаляют служебные ключи __* и CHECK_PERMISSIONS. В списке дел проверка повторяется после снятия префикса вкладки, закрывая передачу сырого SQL через такой ключ.
Устаревшие и удалённые API в этой версии
| Символ | Статус | Чем заменять |
|---|---|---|
Bitrix\Crm\Activity\Provider\Document
|
Удалено | — |
Bitrix\Crm\Integration\DocumentGeneratorManager::createDocumentActivity()
|
Удалено | — |
Bitrix\Crm\Integration\DocumentGeneratorManager::actualizeDocumentImmediately()
|
Удалено | — |
Bitrix\Crm\Integration\DocumentGeneratorManager::enqueueItemScheduledDocumentsForActualization()
|
Удалено | — |
Bitrix\Crm\Feature\RestV3WebForm::enable()
|
Удалено |
Bitrix\Crm\Feature::enable()
|
Bitrix\Crm\Feature\RestV3WebForm::disable()
|
Удалено |
Bitrix\Crm\Feature::disable()
|
Bitrix\Crm\V2\Public\Entity\Field\Requirement
|
Удалено |
Bitrix\Crm\V2\Public\Entity\Field\Requirement\Requirement
|
Bitrix\Crm\V2\Public\Entity\Field\RequirementException
|
Удалено |
Bitrix\Crm\V2\Public\Entity\Field\Requirement\Exception
|
Bitrix\Crm\V2\Public\Entity\Field\RequirementMode
|
Удалено |
Bitrix\Crm\V2\Public\Entity\Field\Requirement\Mode
|
Bitrix\Crm\V2\Public\Entity\Field\RequirementError
|
Удалено |
Bitrix\Crm\V2\Public\Entity\Field\Requirement\Error
|
Bitrix\Crm\V2\Public\Entity\Field\RequirementTechnicalException
|
Удалено |
\RuntimeException
|