Интерфейс списков

Виджеты могут работать в интерфейсах списка сделок, контактов, компаний и покупателей для осуществления каких-то массовых действий над элементами данных списков. Возможные значения свойства locations в manifest.json:

  • llist – список сделок
  • clist – список контактов/компаний
  • tlist – список задач
  • culist – список покупателей

Для данных областей видимости доступен метод list_selected:

this.callbacks = {
  ...

  render: function () {
    var selected_data = self.list_selected();

    this.render_template({
      body: '<div class="widget-body-unique-class-name">' +
        'Количество сделок: ' + selected_data.summary.items
      '</div>'
    });
  },

  ...
}

В selected_data будут храниться выбранные пользователем элементы, в которых будет id, тип сущности в которой пользователь находится и данные телефонов и email-ов выделенных контактов, либо контактов связанных с выделенными сделками/покупателями в соответствующих разделах. Для отрисовки виджета используется метод render_template, параметры которого описаны на странице “Интерфейс карточки“. Пример результата выполнения метода list_selected:

{
  "selected": [{
    "id": 33378970,
    "type": "lead",
    "emails": [],
    "phones": []
  }, {
    "id": 33363766,
    "type": "lead",
    "emails": [],
    "phones": []
  }, {
    "id": 33363366,
    "type": "lead",
    "emails": [],
    "phones": ["+7963 715-34-37"]
  }],
  "summary": {
    "items": 3,
    "emails": 0,
    "phones": 1
  }
}

Пользовательские списки

Помимо данных интерфейсов списков в amoCRM существуют полноценные пользовательские списки, в которых может быть полностью собственный набор полей, а также собственная карточка элемента. То есть разработчик может полностью изменить внешний вид карточки элемента такого списка с помощью специального колбэка виджета.

Для этого необходимо в manifest.json установить область подключения виджета “catalogs”, в настройках виджета нужно либо запросить существующие списки пользователя и попросить его выбрать, который виджет будет использовать, либо виджет должен создать новый список и указать его в качестве используемого через вызов специального метода setSdkCatalogId, передав в качестве аргумента id каталога. Сделать это можно, например, в callback’е onSave.

Пример:

onSave: _.bind(function () {
  this.setSdkCatalogId(this.get_settings().catalog_id);

  return true;
}, self),

После установки настроек, при попытке отредактировать элемент каталога, будет вызван callback виджета loadCatalogElement. При этом, стандартная карточка редактирования элемента списка не откроется, показ карточки нужно реализовывать самостоятельно, например, через базовый компонент модального окна lib/components/base/modal.

this.callbacks = {
  ...

  loadCatalogElement: function (catalog_element) {
    console.log('Редактирование элемента каталога #' + catalog_element.id);
  },

  ...
}