Crmmobile 26.500.0–26.600.0: свои вкладки, компактный список и проверка прав терминала
Обновление безопасности
Закрыта уязвимость или ослабленная проверка прав. Ставить в первую очередь.
В crmmobile 26.500.0 и 26.600.0 появились внешние вкладки CRM, создание связанных элементов из карточки клиента и компактный список. Обновление также закрывает доступ терминала оплаты к CRM-элементам, которые пользователь не может читать. Если у вас есть своё мобильное расширение, проверьте обработку прав воронки и её поля access.
Новое
Добавьте свою вкладку в CRM (26.500.0)
Событие crmmobile:onGetTabs передаёт существующие tabs, customSectionId и userPermissions. Обработчик возвращает EventResult::SUCCESS с массивом вкладок. Клиент загружает указанное JN-расширение и создаёт экспортированный компонент:
use Bitrix\Main\Event;
use Bitrix\Main\EventManager;
use Bitrix\Main\EventResult;
EventManager::getInstance()->addEventHandler(
'crmmobile',
'onGetTabs',
static function (Event $event): EventResult {
$tabs = $event->getParameter('customSectionId') === null
? [[
'type' => 'external',
'id' => 'vendor::shipments',
'title' => 'Отгрузки',
'externalRender' => [
'module' => 'vendor/shipment-board',
'component' => 'ShipmentBoard',
'params' => [],
],
]]
: [];
return new EventResult(EventResult::SUCCESS, ['tabs' => $tabs]);
},
);
Это пример описания вкладки для основного раздела CRM. Само расширение vendor/shipment-board нужно поставить отдельно, а его серверные действия закрыть правами на данные. Внешние вкладки идут после вкладок сущностей в порядке ответов обработчиков. Если модуля JN нет, клиент пишет ошибку в консоль. Штатный потребитель события — вкладка «Аналитика» из biconnectormobile.
Создавайте сделку из карточки клиента (26.500.0)
В контакте или компании появилось меню создания связанных лида, сделки, контакта или компании, счёта и предложения. Клиент уже подставлен в новую карточку. Меню учитывает право чтения исходного элемента, право добавления, тарифные ограничения конвертации и доступность инструмента; если действий нет, приложение сообщает об этом.
Для своих вызовов карточки есть параметры sourceEntityTypeId и sourceEntityId. Их нельзя смешивать с copy, client, contact_id или параметрами конвертации: сервер вернёт AccessDenied.
Переключите CRM на компактный список (26.600.0)
Новый вид показывает стадию чипом и запоминает выбор для пользователя и типа сущности. Предложение показывает дату актуальности, счёт — срок оплаты. У контакта и компании виден ответственный, у смарт-процесса также дата создания. Флаг Bitrix\CrmMobile\Public\Feature\CompactListItem включён по умолчанию.
Действие crmmobile.Kanban.setViewType принимает entityTypeId и type: default или compact. Оно отказывает при неизвестном виде, неподдерживаемой сущности или выключенном флаге. На сервере выбор хранится в пользовательской опции crmmobile/item_view_type_<тип>.
Единый фильтр из 26.500.0 пока выключен по умолчанию. При включении он использует общее с вебом хранилище фильтров; для ID поддержаны числовые сравнения и диапазон. Сортировки «По последней активности» и «По дате создания» появились в той же версии.
Что сломается
Терминал потребует чтение элемента
В 26.500.0 создание платежа проверяет canReadItem. В 26.600.0 префильтр CheckReadPermission закрывает также initialize и openPaymentPay. Раньше инициализация могла вернуть товарные позиции элемента по чужому ID; теперь пользователь без доступа получит отказ.
AJAX-контракт crmmobile.Terminal.Entity.createPayment сохранён. Если вы напрямую вызываете PHP-метод CreatePaymentAction::run(), передавайте UserPermissions первым аргументом: этот параметр добавлен в 26.500.0.
Читайте права воронки отдельно (26.500.0–26.600.0)
Настройка воронок, стадий и туннелей теперь учитывает гранулярные права CRM вместо одной проверки администратора. На старом CRM без нового фасада остаётся прежняя проверка. Новые nullable-флаги canManageFunnels, canManageStages, canManageTunnels и canManageCategoryAccess описывают разрешённые действия; null означает переход к старым признакам редактирования.
С 26.600.0 поле access в ответе воронки тоже может быть null, если пользователь не вправе редактировать её или управлять доступом. Клиенту, который ожидает строку, нужна проверка на null.
При изменении стадии в 26.500.0 появился контракт туннелей версии 2: tunnelsContractVersion=2 и явный clearTunnels. Пустой массив теряется при form-encoding мобильного транспорта. Старый клиент без версии по-прежнему очищает туннели, если ключа tunnels нет.
Если вы ловили Bitrix\CrmMobile\Kanban\Entity\ControllerStrategy\FieldNotFoundException, замените импорт на Bitrix\CrmMobile\Kanban\ControllerStrategy\FieldNotFoundException.
Мелочи и находки
- В 26.500.0 чтение списка перестало затирать фильтр, который пользователь только что сохранил в шторке. Исправлена и потеря условия стадии в фильтрах смарт-процессов.
- В 26.600.0 исправлен TypeError на туннеле с роботом без
Delay.basis, а мастер конвертации завершает выбор сущностей даже при потерянномonViewRemoved.
Устаревшие и удалённые API в этой версии
| Символ | Статус | Чем заменять |
|---|---|---|
Bitrix\CrmMobile\Kanban\Entity\ControllerStrategy\FieldNotFoundException
|
Удалено |
Bitrix\CrmMobile\Kanban\ControllerStrategy\FieldNotFoundException
|