Biconnectormobile 26.0.0: отчёты BI Конструктора в мобильном приложении включаются вручную
В коробочный Битрикс24 пришёл модуль biconnectormobile («Мобильный BI Конструктор»), который показывает отчёты BI Конструктора (Apache Superset) в мобильном приложении. Разбор сделан по эталону Битрикс24, в «Управлении сайтом» этого модуля нет. Код модуля уже был в дистрибутиве в версии 25.0.0, обновление 26.0.0 раскладывает экраны в /bitrix/mobileapp/biconnectormobile/, но сотрудники ничего не увидят, пока администратор не включит фичу руками.
Новое
Включите BI в приложении
Выключатель — класс Bitrix\BIConnectorMobile\Public\Features\MobileBIFeature из секции feature-flags в .settings.php модуля. Он читает опцию biconnectormobile:bi_mobile_enabled, по умолчанию N. Включайте его через реестр флагов модуля mobile, а не через Option::set(). Метод enable() заодно сбрасывает тег кеша меню mobile_custom_menu, без этого раздел «Аналитика» в меню приложения останется в прежнем состоянии.
<?php declare(strict_types=1);
use Bitrix\BIConnectorMobile\Public\Features\MobileBIFeature;
use Bitrix\Main\Loader;
use Bitrix\Mobile\Config\Feature;
Loader::requireModule('mobile');
Feature::enable(MobileBIFeature::class);
// Если biconnectormobile не установлен, реестр подсунет заглушку, которая всегда выключена
echo Feature::isEnabled(MobileBIFeature::class) ? 'BI в приложении включён' : 'Флаг не найден', PHP_EOL;
Feature::disable() удаляет опцию и тоже чистит кеш меню. Если модуля нет среди установленных, поставьте его из списка модулей. Без модуля biconnector установщик откажет, а mobile доустановит сам. При удалении модуль стирает все свои опции, так что после переустановки фичу придётся включать заново.
Проверьте права сотрудников
С включённым флагом в разделе «Аналитика» меню приложения появляется пункт «BI Конструктор». Его видят те, для кого AccessManager::canViewDashboards() вернёт true: установлен biconnector, в intranet доступен инструмент crm_bi, у пользователя есть право ACTION_BIC_ACCESS. Тариф модуль не проверяет, и в коробке это не нужно: без модуля bitrix24 Feature::isBuilderEnabled() из biconnector всегда возвращает true.
Вкладка «Аналитика» есть ещё в профиле сотрудника (событие mobile:onProfileTabsCollect появилось в mobile 26.1120.0) и в задачах, где её заготовил тот же mobile 26.1120.0. Коллаберы её в задачах не увидят, у них раздел открывается одним экраном без вкладок. Для вкладки мало прав, в её зоне должны найтись отчёты, доступные пользователю. Если запрос списка отчётов упал, вкладка прячется. Сбой уходит в логгер biconnectormobile.scope_visibility, но по умолчанию он выключен.
Обработчики вкладок в CRM и складских документах модуль тоже регистрирует (crmmobile:onGetTabs, catalogmobile:onGetDocumentTabs), но в crmmobile 26.400.0 и catalogmobile 26.100.0 таких событий нет. Эти вкладки появятся, только когда crmmobile и catalogmobile начнут бросать эти события.
Первое открытие отчёта
Открытие отчёта в первый раз может занять минуты. Если отчёт ещё не установлен или Superset не запущен, сервер в фоне готовит его (prepareView), а приложение показывает ожидание. О готовности оно узнаёт по pull-событию biconnector, а если событие потерялось, из опроса раз в 20 секунд.
Не ищите REST-методы
biconnectormobile.Dashboard.* (getList, getViewState, prepareView, getDescription, subscribeToUpdates) и biconnectormobile.Instance.getStatus — AJAX-действия для экранов приложения. restIntegration в .settings.php включён, но каждое действие закрыто фильтром Scope::NOT_REST, так что из вебхука или REST-приложения их не вызвать. Кроме него стоят авторизация, CSRF, только POST, проверка флага и BIConstructorAccess из biconnector. При выключенной фиче действие отвечает ошибкой FEATURE_DISABLED ещё до BIConstructorAccess, который проверяет инструмент crm_bi и права.
Подсмотрите, как встроиться в приложение
Если пишете свой мобильный модуль для коробки, biconnectormobile — компактный образец из 17 классов. Экраны он отдаёт приложению через mobileapp:onJNComponentWorkspaceGet, пункт меню добавляет в mobile:onMobileMenuStructureBuilt, вкладку профиля в mobile:onProfileTabsCollect, а выключатель держит в секции feature-flags.
Мелочи и находки
- На несуществующий и на запрещённый отчёт
getViewStateотвечает одинаково,no_access, чтобы перебором id нельзя было узнать, какие отчёты есть на портале. - Логгеры
biconnectormobile.scope_visibility,biconnectormobile.tabsиbiconnectormobile.dashboard_preparationпо умолчанию молчат. Чтобы они писали, включите их через(new \Bitrix\Main\Diag\LoggerRegistry())->enable('<id>')и опишите, куда писать, в секцииloggers. - В константе
AHA_ANALYTICS_EVENT_CLICKзаписано'сlick_button'с кириллической «с». Строка намеренно повторяет опечатку из aha-подсказки модуля mobile, чтобы события попадали в ту же серию аналитики, и комментарий просит её не «чинить».