Класс DialogManager

Оборачивает системные диалоги BX24 (выбор пользователя, выбор прав доступа, выбор CRM-сущности), чтобы их можно было открывать изнутри iframe приложения Bitrix24.

DialogManager доступен через $b24.dialog на экземпляре B24Frame и доступен только когда ваше приложение отрисовано внутри iframe Bitrix24 (он использует postMessage для общения с родительским окном).

Он повторяет legacy-хелперы BX24.selectUser, BX24.selectUsers, BX24.selectAccess и BX24.selectCRM, но возвращает строго типизированные Promise вместо приёма callback-ов.

Методы

selectUser

async selectUser(): Promise<null|SelectedUser>

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

Promise разрешается объектом SelectedUser или null, если пользователь закрыл диалог, не сделав выбор.

// ... /////
$b24 = await initializeB24Frame()
// ... /////
const makeSelectUser = async() => {
  const selectedUser = await $b24.dialog.selectUser()
  if (!selectedUser) {
    return
  }
  $logger.info(selectedUser)
}

selectUsers

async selectUsers(): Promise<SelectedUser[]>

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

Promise разрешается массивом объектов SelectedUser. Массив пуст, если пользователь подтвердил диалог, никого не выбрав.

import { SelectedUser } from '@bitrix24/b24jssdk'

// ... /////
$b24 = await initializeB24Frame()
// ... /////
const makeSelectUsers = async() => {
  const selectedUsers = await $b24.dialog.selectUsers()

  const list = selectedUsers.map((row: SelectedUser): string => {
    return [`[id: ${row.id}]`, row.name].join(' ')
  })

  $logger.info(selectedUsers, list)
}

selectAccess

async selectAccess(blockedAccessPermissions?: string[]): Promise<SelectedAccess[]>

Отображает стандартный диалог выбора прав доступа (отделы, группы, отдельные пользователи и предопределённые коды прав, такие как AU или CR).

ПараметрТипОписание
blockedAccessPermissionsstring[]Необязательный список кодов прав, которые нужно отключить в диалоге. По умолчанию []. Полезно, когда некоторые права уже выданы в другом месте.

Promise разрешается массивом записей SelectedAccess.

// ... /////
$b24 = await initializeB24Frame()
// ... /////
const makeSelectAccess = async() => {
  const selected = await $b24.dialog.selectAccess(['AU'])

  $logger.info(
    selected.map(row => `${row.id}${row.name}`)
  )
}

selectCRM

async selectCRM(params?: SelectCRMParams): Promise<SelectedCRM>

Отображает стандартный диалог выбора CRM-сущностей (лиды, контакты, компании, сделки, предложения).

ПараметрТипОписание
params.entityTypeSelectCRMParamsEntityType[]Какие типы сущностей показывать вкладками в окне выбора. Допустимые значения: lead, contact, company, deal, quote.
params.multiplebooleanРазрешить множественный выбор. По умолчанию false.
params.valueSelectCRMParamsValueНеобязательная карта идентификаторов сущностей, которые нужно отметить как изначально выбранные. Применяется только когда multiple равно true — режим одиночного выбора её игнорирует.

Promise разрешается объектом SelectedCRM, свойства которого (lead, contact, company, deal, quote) — настоящие JavaScript-массивы SelectedCRMEntity. Корзины для типов сущностей, которые пользователь не выбрал (или не запрашивал), остаются undefined, а не пустым массивом.

Начиная с v1.0.7, selectCRM всегда возвращает настоящие массивы. Более ранние версии передавали payload родительского окна как есть, поэтому каждая корзина фактически была Record<string, SelectedCRMEntity> (например, { 0: {...}, 1: {...} }) — вызов .length или .map() на ней возвращал undefined. Код, написанный по документированным типам, продолжает работать; единственное поведенческое различие в том, что теперь runtime-форма совпадает с типами.
// ... /////
$b24 = await initializeB24Frame()
// ... /////
const makeSelectCRM = async() => {
  const selected = await $b24.dialog.selectCRM({
    entityType: ['contact', 'company'],
    multiple: true,
    value: {
      contact: [42],
      company: [7]
    }
  })

  selected.contact?.forEach((row) => {
    $logger.info(`[${row.id}] ${row.title}${row.url}`)
  })

  selected.company?.forEach((row) => {
    $logger.info(`[${row.id}] ${row.title}`)
  })
}
Режим одиночного выбора (multiple: false) всё равно разрешается той же формой SelectedCRM — корзины просто содержат не более одного элемента. Чтобы получить этот элемент, используйте selected.contact?.[0].

Типы данных

SelectedUser

Представляет одного сотрудника компании, выбранного через selectUser / selectUsers. Флаги sub и sup описывают иерархические отношения с текущим пользователем.

ПолеТипОписание
idNumberStringИдентификатор пользователя — строка с числовым значением (например, "42").
namestringОтформатированное отображаемое имя.
photostringURL аватара пользователя.
positionstringДолжность пользователя.
urlstringURL профиля пользователя внутри портала.
subbooleantrue, если выбранный пользователь — подчинённый текущего пользователя.
supbooleantrue, если выбранный пользователь — руководитель текущего пользователя.

SelectedAccess

Представляет одну запись, возвращаемую selectAccess.

ПолеТипОписание
idstringКод права (см. таблицу ниже).
namestringЧеловекочитаемое имя права, локализованное под язык портала.

Поле id использует грамматику кодов прав Bitrix24:

ШаблонЗначение
AUВсе авторизованные пользователи портала.
CRТекущий пользователь.
U${number}Конкретный пользователь по ID.
IU${number}Сотрудник по ID (с учётом экстранета).
D${number}Все сотрудники отдела.
DR${number}Все сотрудники отдела, включая подотделы.
G${number}Группа пользователей (например, G2 — все посетители).
SG${number}Соцсеть / рабочая группа.

SelectCRMParamsEntityType

type SelectCRMParamsEntityType = 'lead' | 'contact' | 'company' | 'deal' | 'quote'

Набор видов CRM-сущностей, которые понимает selectCRM. Передаётся как params.entityType и используется в качестве ключей SelectCRMParamsValue и SelectedCRM.

SelectCRMParamsValue

Карта идентификаторов сущностей для предварительного выбора при multiple: true. Читаются только запрошенные типы сущностей; лишние ключи игнорируются.

ПолеТипОписание
leadnumber[]ID лидов, которые нужно отметить как уже выбранные.
contactnumber[]ID контактов, которые нужно отметить как уже выбранные.
companynumber[]ID компаний, которые нужно отметить как уже выбранные.
dealnumber[]ID сделок, которые нужно отметить как уже выбранные.
quotenumber[]ID предложений, которые нужно отметить как уже выбранные.

SelectedCRMEntity

Представляет одну строку внутри корзины SelectedCRM.

ПолеТипОписание
idstringИдентификатор сущности с префиксом — см. таблицу в SelectedCRM.
typeSelectCRMParamsEntityTypeВид сущности (lead / contact / company / deal / quote).
placestringМетка placement в UI, используемая Bitrix24 (нужна редко; информационная).
titlestringОтображаемый заголовок сущности (например, название компании, заголовок сделки, полное имя контакта).
descstringКраткое описание, показываемое рядом с заголовком в окне выбора.
urlstringURL для открытия сущности внутри портала.

SelectedCRM

Результат selectCRM. Каждое свойство — это либо массив SelectedCRMEntity, уточнённый литеральным шаблоном id, либо undefined, если пользователь не выбрал ничего этого типа.

ПолеТипОписание
lead(SelectedCRMEntity & { id: ``L_${number}`` })[]Выбранные лиды. Каждый id выглядит как L_42.
contact(SelectedCRMEntity & { id: ``C_${number}``, image: string })[]Выбранные контакты. Дополнительное поле image содержит URL аватара контакта.
company(SelectedCRMEntity & { id: ``CO_${number}``, image: string })[]Выбранные компании. Дополнительное поле image содержит URL логотипа компании.
deal(SelectedCRMEntity & { id: ``D_${number}`` })[]Выбранные сделки. Каждый id выглядит как D_17.
quote(SelectedCRMEntity & { id: ``Q_${number}`` })[]Выбранные предложения. Каждый id выглядит как Q_3.