Вывести ошибку с HTML‑ссылкой при обновлении в Битрикс24
В Битрикс24 можно вывести сообщение об ошибке с HTML‑ссылкой, открывающей другую страницу в новой вкладке, при обновлении сделки с ID > 100. Как реализовать init.php?
Как вывести сообщение об ошибке с HTML‑разметкой (ссылкой) при обновлении сделки в коробочной версии Битрикс24? Нужно, чтобы при изменении сделки с ID > 100 выводилось сообщение с ошибкой, содержащим ссылку, открывающую другую страницу в новой вкладке. Как реализовать это в обработчике, подключенном в init.php, и какие свойства объекта $arFields использовать?
Краткий ответ
В init.php подключите обработчик OnBeforeCrmDealUpdate, в котором проверяете $arFields['ID'] напрямую. Если ID > 100, возвращайте массив с ключом ERROR и HTML‑ссылкой, например:
return ['ERROR' => 'Ошибка: <a href="https://example.com" target="_blank" rel="noopener noreferrer">Перейти</a>'];
Битрикс остановит обновление сделки и покажет сообщение с ссылкой в новой вкладке.
Содержание
- Подключение обработчика в init.php
- Проверка ID сделки
- Возврат сообщения об ошибке с HTML‑ссылкой
- Какие свойства $arFields использовать
- Проверка и отладка
Подключение обработчика в init.php
В файле init.php добавьте строку регистрации обработчика:
<?php
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
'main',
'OnBeforeCrmDealUpdate',
'onBeforeCrmDealUpdate'
);
Функция‑обработчик должна быть объявлена в том же файле или в подключаемом модуле:
function onBeforeCrmDealUpdate(&$arFields)
{
// Логика будет описана далее
}
Ссылка на официальную документацию:
https://dev.1c-bitrix.ru/api_help/crm/events.php
Проверка ID сделки
$arFields содержит все поля, которые планируется обновить.
Для проверки идентификатора сделки используйте $arFields['ID']:
if ($arFields['ID'] > 100) {
// Ошибка будет выставлена ниже
}
Если ID отсутствует (например, при создании сделки), условие не выполнится.
Возврат сообщения об ошибке с HTML‑ссылкой
В обработчике возвращайте массив с ключом ERROR. Битрикс автоматически отобразит его в форме редактирования и отменит обновление:
return [
'ERROR' => 'Нельзя обновить сделку. <a href="https://example.com" target="_blank" rel="noopener noreferrer">Перейти</a>'
];
Что важно учесть
| Пункт | Что делать | Почему |
|---|---|---|
target="_blank" |
Открыть ссылку в новой вкладке | Это требование задачи |
rel="noopener noreferrer" |
Защита от XSS‑атак | Рекомендуется при открытии в новой вкладке |
| Использовать только простые теги | <a>, <b>, <i> |
Битрикс отбрасывает сложные конструкции |
Ссылка на пример использования ошибок:
https://dev.1c-bitrix.ru/learning/course/lesson/13/2/
Какие свойства $arFields использовать
| Свойство | Назначение | Пример использования |
|---|---|---|
$arFields['ID'] |
Идентификатор сделки | if ($arFields['ID'] > 100) |
$arFields['ERROR'] |
(необязательно) можно задать напрямую, но предпочтительнее возвращать массив | $arFields['ERROR'] = '...'; return []; |
$arFields['PREV'] |
Содержит предыдущие значения полей (если нужны сравнения) | if ($arFields['PREV']['STATUS_ID'] != $arFields['STATUS_ID']) |
$arFields['VALUE'] |
Значения, которые отправляются при обновлении | Не используется для проверки ID |
Ссылка на подробную схему полей сделки:
https://dev.1c-bitrix.ru/api_help/crm/deal.php
Проверка и отладка
- Создайте или отредактируйте сделку с
ID> 100 напрямую. - Попытайтесь изменить любой её атрибут.
- Должно появиться сообщение с красным фоном и гиперссылкой.
- Перейдите по ссылке – откроется указанная страница в новой вкладке.
Если сообщение не появляется:
- Убедитесь, что
init.phpзагружается (проверьтеLOGS). - Проверьте, что условие
ID > 100действительно выполняется. - Отключите кэш и перезапустите браузер.
Источники
- Битрикс24 – Events API – Описание события
OnBeforeCrmDealUpdate. - Битрикс24 – Работа с ошибками CRM – Как возвращать ошибки из обработчиков.
- Битрикс24 – Поля сделки – Список доступных свойств
$arFields. - Битрикс24 – Пример обработки событий – Практический пример регистрации обработчика в
init.php.
Заключение
Подключите обработчик OnBeforeCrmDealUpdate в init.php напрямую. Проверяйте $arFields['ID'] и при ID > 100 возвращайте массив с ключом ERROR и HTML‑ссылкой напрямую. Ссылка открывается в новой вкладке благодаря target="_blank" и защищена атрибутом rel. После обновления сделки с ID > 100 пользователь увидит сообщение об ошибке и сможет перейти по ссылке, не так ли? Эти шаги позволяют гибко контролировать обновление сделок и информировать пользователей о дополнительных действиях, необходимых им напрямую.