Документация для разработчиков
Темная тема

Операции

Общее


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

Чтобы весь этот процесс был прозрачным, было решено сосредоточить это всё в одном классе.

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

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

Запуск выполняется методом launch, который вернет объект \Bitrix\Main\Result.

В общем случае, процесс выполняется следующим образом:

  1. Проверка тарифных ограничений.
  2. Проверка прав доступа к элементу.
  3. Проверка прав доступа.
  4. Проверка запущенных бизнес-процессов.
  5. Выполнение бизнес-логики полей до сохранения.
  6. Проверка заполнености обязательных полей.
    • Если к этому моменту элемент не был изменен, то дальнейшие действия не производятся.
  7. Выполнение дополнительных действий до сохранения.
  8. Сохранение элемента.
  9. Выполнение бизнес-логики полей после сохранения.
  10. Обновление данных о правах доступа.
  11. Обновление поискового индекса.
  12. Сохранение истории действий над элементом.
  13. Запись данных в таймлайн.
  14. Выполнение дополнительных действий после сохранения.
  15. Отправка пуш-уведомления.
  16. Запуск роботов и шаблонов бизнес-процессов.

Методы, выполняющие проверки и изменения, являются публичными.

При необходимости можно получить объект операции и вызвать, например, проверку прав доступа, до запуска самой операции.

Методы


Метод Описание С версии
public function __construct
(Item $item, Operation\Settings $settings, 
Collection $fieldsCollection = null)
Конструктор.
В конструктор необходимо передать элемент, настройки и коллекцию полей.
Если не передать $fieldsCollection, то весь функционал, завязанный на поля, не будет выполняться.
public function exportSettings(): Operation\Settings
Возвращает текущий объект настроек. Возвращается тот же объект, а не копия.
ppublic function importSettings
(Operation\Settings $settings): self
Устанавливает новый объект настроек для операции.
public function getContext(): Context
Возвращает текущий контекст выполнения операции.
public function setContext(Context $context): self
Устанавливает новый контекст выполнения операции.
public function getItem(): Item
Возвращает элемент, над которым выполняется операция.
public function getItemBeforeSave(): Item
Возвращает копию элемента в его состоянии до сохранения в базу данных. Эта копия есть только после вызова launch().
public function addAction
(string $actionPlacement, Action $action): self
Добавляет дополнительное действие $action на место $actionPlacement.
$actionPlacement может принимать значение beforeSave(Operation::ACTION_BEFORE_SAVE) или afterSave(Operation::ACTION_AFTER_SAVE).
public function launch(): Result
Запускает выполнение операции. Возвращает \Bitrix\Main\Result.
public function checkAccess(): Result
Выполняет проверку прав доступа.
public function processFieldsWithPermissions(): Result
Выполняет проверку прав доступа полей.
public function processFieldsBeforeSave(): Result
Выполняет проверку полей до сохранения.
public function checkFields(): Result
  • Проверяет, что пользовательские поля заполнены корректно в соответствии с их типом и настройками.
  • Проверяет, что обязательные поля заполнены.
    • Если стадия изменена, то проверяется заполненность всех обязательных полей.
    • В остальных случаях проверяется заполненность только тех полей, которые были изменены.
public function checkRequiredFields
(array $requiredFields, Factory $factory): Result
Метод проверяет, что поля $requtedFields заполнены. $factory - фабрика.
В массиве $requiredFields содержится индексный массив с кодами полей, заполненность которых надо проверить.
public function processFieldsAfterSave(): Result
Выполняет бизнес-логику полей после сохранения. Если какое-то из значений было изменено, то элемент будет сохранен повторно.
public function getStageDependantRequiredFields
(Factory $factory): array
Возвращает коды зависимых от стадии обязательных полей, заполненность которых необходимо проверить при выполнении данной операции.
public function isItemChanged(): bool
Возвращает true, если значения полей элемента были изменены, за исключением тех, значения которых генерируются автоматически.
public function checkRunningWorkflows(): Result
Проверяет, что у элемента нет запущенных бизнес-процессов при смене направления. Если направление не меняется, то эта проверка не производится.

Метод конфигурации


Для управления настройками выполнения операции можно получить объект настройки и работать с его методами напрямую.
Или можно вызвать методы этого класса и работать с настройками.


Метод Описание
public function disableAllChecks(): self
Метод отключает все проверки при выполнении операции.
Вызов этого метода аналогичен вызову методов disableCheckWorkflows(), disableCheckAccess(), disableCheckFields(), disableCheckRequiredUserFields().
enableAutomation / disableAutomation / isAutomationEnabled
Управление запуском роботов.
enableBizProc / disableBizProc / isBizProcEnabled
Управление запуском шаблонов бизнес-процессов.
enableCheckAccess / disableCheckAccess / isCheckAccessEnabled
Управление проверкой прав доступа.
isCheckFieldsEnabled / enableCheckFields / disableCheckFields
Управление проверкой корректности заполения полей и проверкой заполненности обязательных полей.
enableCheckRequiredUserFields / disableCheckRequiredUserFields / isCheckRequiredUserFields
Управление проверкой заполненности обязательных полей.
enableFieldProcession / disableFieldProcession / isFieldProcessionEnabled
Управление проверками и изменениями, связанными с бизнес-логикой полей.
enableSaveToHistory / disableSaveToHistory / isSaveToHistoryEnabled
Управление записью в историю изменений.
enableBeforeSaveActions / disableBeforeSaveActions / isBeforeSaveActionsEnabled
Управление дополнительными действиями до сохранения.
enableAfterSaveActions / disableAfterSaveActions / isAfterSaveActionsEnabled
Управление дополнительными действиями после сохранения.
enableCheckWorkflows / disableCheckWorkflows / isCheckWorkflowsEnabled
Управление проверкой запущенных бизнес-процессов.

Наследники


Базовый класс операции является абстрактным. У этого класса есть пять реализаций, выполняющий разные виды операций:

  • Operation\Add - добавление.
  • Operation\Update - изменение.
  • Operation\Delete - удаление.
  • Operation\Copy - копирование.
  • Operation\Conversion - конвертация.

В каждом из этих классов переопределены методы, отвечающие за особенности той или иной операции. Но в целом, процесс выполнения выполняется в том же порядке.

Разница в том, что, например, при удалении не запускаются роботы и бизнес-процессы - в этом нет смысла.

Примеры


use Bitrix\Crm\Service;

$entityTypeId = 128;

$factory = Service\Container::getInstance()->getFactory($entityTypeId);

$item = $factory->createItem();
$item->setStageId('D128_3:CLIENT');

$operation = $factory->getAddOperation($item)
	->disableCheckAccess()
	->disableCheckFields();

$result = $operation->launch();
if (!$result->isSuccess())
{
	print_r($result->getErrorMessages());
}

$newId = $item->getId();

Обновление Предложения с запуском связанных действий

\Bitrix\Main\Loader::includeModule('crm');

use Bitrix\Crm\Service;

$factory = Service\Container::getInstance()->getFactory(\CCrmOwnerType::Quote);

$itemId = 3; // ID сущности

$item = $factory->getItem($itemId);

if ($item) {
	$item->setStageId('SENT');
}

$operation = $factory->getUpdateOperation($item)
	->disableCheckAccess()
	->disableCheckFields();

$result = $operation->launch();
if (!$result->isSuccess())
{
	print_r($result->getErrorMessages());
}
© «Битрикс», 2001-2024, «1С-Битрикс», 2024