Новое универсальное API

Данный раздел посвящен принципиально новому подходу для работы с основными CRM сущностями. В рамках реализации Смарт-процессов разработчики решили не просто реализовать новые возможности, но так же и переосмыслить старые идеи. В основе нового подхода лежит реализация дополнительных требований:

  1. Уменьшение дублирования кода.
  2. Уменьшение связности классов.
  3. Покрытие тестами.

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

На момент написания раздела механизм используется для сущностей смарт-процессы, счета и предложение. Поддержка остальных сущностей является экспериментальной. Что это значит? Сейчас поддержка нового API является добровольной и работает в пилотном режиме, но в будущем, когда все несовместимости будут устранены этот механизм будет включен для всех сущностей принудительно, а старое поведение будет убрано из продукта.

Концепция

В основу нового api заложены такие паттерны как: локатор сервисов, абстрактная фабрика, фабрика, фасад и одиночка (singleton), поэтому крайне желательно быть с ними знакомым.

Точкой входа в весь механизм является контейнер - это singleton-класс который с одной стороны обеспечивает простой доступ к сервисам из локатора сервисов, а с другой стороны является абстрактной фабрикой для фабрик по работе с сущностями.

Мы употребили много не совсем очевидных слов поэтому давайте немного разберемся в терминологии.

Сервис - объект, как правило, в единственном экземпляре, который выполняет небольшую обособленную часть логики. Поскольку они строго следуют принципу единой ответственности в модуле crm их довольно много. В продукте используется большое количество сервисов и ознакомиться с ними вы сможете в документации по продукту (см. полезные ссылки).

Фабрика по работе с сущностью это класс для определенной сущности, который описывает некоторую специфичную для конкретного типа особенности - например набор полей, поведение и прочее.

Здесь и далее под словом “тип” подразумевается “тип сущности в рамках CRM”, например “Лид”, “Сделка” и т.д. К ним же относятся “Смарт-процессы”.

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

Давайте разберемся на примере - наша задача изменить существующую сделку. Идентификатор сделки известен, изменяемые поля и новые значения нам известны. Что нам нужно сделать?

  1. Из контейнера получить фабрику по работе с сущностью.
  2. Из фабрики по работе с сущностью получить изменяемый элемент (объект элемента).
  3. Изменить необходимые поля элемента.
  4. Из фабрики по работе с сущностью получить операцию изменения.
  5. Передать в операцию изменения уже измененный элемент.
  6. Запустить операцию изменения.

Полезные ссылки

Новое API в документации 1С-Битрикс Локатор сервисов Сервисы