← Назад к заметкам

Заметки

Не все места встройки видны в интерфейсе приложения

Почему нужного места встройки может не быть в интерфейсе настройки приложения и как добавить его через placement.bind.

Если нужного места встройки нет в интерфейсе приложения, это ещё не значит, что его нельзя использовать. Часто его можно зарегистрировать вручную через placement.bind.

Проблема

В настройках локального приложения Bitrix24 отображаются не все места встройки. Из-за этого можно решить, что нужный виджет, вкладку или кнопку добавить нельзя.

У мест встройки есть технический код. Он передаётся в параметре PLACEMENT. Интерфейс настройки приложения может не показывать все такие места, но REST-метод placement.bind всё равно может с ними работать.

Обычно ситуация такая:

  • нужно встроить виджет в конкретное место интерфейса Bitrix24;
  • в визуальных настройках приложения такого пункта нет;
  • в документации у места есть код PLACEMENT;
  • обработчик регистрируется вручную через placement.bind;
  • после установки приложения виджет появляется в нужном месте.

Поэтому сначала стоит проверить документацию и доступные placement-коды, а уже потом делать вывод, что нужное место недоступно.

Решение

Нужное место встройки можно зарегистрировать напрямую через REST-метод placement.bind.

Для регистрации нужны:

  • код места встройки в параметре PLACEMENT;
  • URL обработчика в параметре HANDLER;
  • название пункта, вкладки или кнопки в параметре TITLE;
  • право placement;
  • права на раздел, куда встраивается приложение, например crm;
  • завершённая установка приложения.

Обычно такой вызов удобно делать во время установки приложения. Тогда после установки все нужные обработчики уже будут зарегистрированы.

Пример placement.bind

Ниже пример регистрации вкладки в карточке сделки. В реальной задаче нужно заменить PLACEMENT, HANDLER и название вкладки.

BX24.callMethod(
    'placement.bind',
    {
        PLACEMENT: 'CRM_DEAL_DETAIL_TAB',
        HANDLER: 'https://example.com/local/apps/deal-tab/',
        TITLE: 'Моя вкладка',
        LANG_ALL: {
            ru: {
                TITLE: 'Моя вкладка',
            },
            en: {
                TITLE: 'My tab',
            },
        },
    },
    function (result) {
        if (result.error()) {
            console.error(result.error());

            return;
        }

        console.log('Встройка зарегистрирована');
    }
);

Если встройка не появилась

Если виджет не появился, обычно проблема не в коде обработчика, а в самой регистрации: доступные места, права приложения и список уже привязанных обработчиков.

Метод placement.list показывает, какие места встройки доступны приложению для указанного scope.

BX24.callMethod(
    'placement.list',
    {
        SCOPE: 'crm',
    },
    function (result) {
        if (result.error()) {
            console.error(result.error());

            return;
        }

        console.log(result.data());
    }
);

Если нужного места нет в результате, проверь права приложения. Для разных разделов Bitrix24 нужны разные scope.

Метод placement.get показывает обработчики, которые уже зарегистрированы для приложения. Так проще понять, сохранился ли вызов placement.bind.

BX24.callMethod(
    'placement.get',
    {},
    function (result) {
        if (result.error()) {
            console.error(result.error());

            return;
        }

        console.log(result.data());
    }
);