CRM коробка - api d7



Это статья про api d7 crm
Есть другие статьи про api:
crm коробка - старое apiДополненная статья (подмена фабрики и пр)  
crm rest api
api другие модули


подключить модуль d7
\Bitrix\Main\Loader::includeModule("crm");
получить фабрику
типы (системные константы)
CCrmOwnerType::Lead; //1
CCrmOwnerType::Deal; //2
CCrmOwnerType::Contact;
CCrmOwnerType::Company;
CCrmOwnerType::Invoice;
CCrmOwnerType::Quote;
CCrmOwnerType::Requisite;

получить фабрику
$factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory(\CCrmOwnerType::Deal); // \CCrmOwnerType::Lead, \CCrmOwnerType::Contact и тд
$factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory($smartTypeId); // для смарт-процессов
получить элемент
$item = $factory->getItem($id);
получить элементы по отбору
$items = $factory->getItems([
   "filter"=>[
      "STAGE_ID" => "C11:NEW",
      "UF_CRM_1719738837"=>$mainId
    ],
    "select"=>["ID"],
    'order' => ['UF_CRM_2_POLE' => 'ASC'],   
    'limit'=>1000,
    'offset' =>0
]);
foreach($items as $item){
   //
}
получить значения полей
$item->getTitle();
$item->getUfCrm_1719825378086();
$item->getUfCrm_3_1719825378086(); //для смарт-процессов номера "двойные" (смотрите коды свойств)
$item->getStageId(); //стадия для сделок, смарт-процессов
$item->getStatusId(); //статус для лидов


Создание и изменение
Важно!
после надо сохранить, как это сделать, написано ниже
создать элемент
$item = $factory->createItem();
$item2 = $factory->createItem($data); //с массивом полей сразу
установить/изменить значения полей
вариант 1
$item->set("#FIELD#",$value);
вариант 2
$item->setStageId("NEW"); 
$item->setTitle("New Title");
привязки элемента к компаниям, контактам
$existingBindings = $item->getContactBindings(); //получить
$item->bindContacts(\Bitrix\Crm\Binding\EntityBinding::prepareEntityBindings(\CCrmOwnerType::Contact, [$contactId])); //добавить 
$item->unBindContacts(\Bitrix\Crm\Binding\EntityBinding::prepareEntityBindings(\CCrmOwnerType::Contact, [$contactId])); //удалить
поле типа файл множественное
скопировать из одного поля в другое
$arFiles = $item->getUfCrm_5_1709576143217();
$arFilesCopy = [];
if(!empty($arFiles) && is_array($arFiles)){
   foreach($arFiles as $fileId){
      $arFilesCopy[] = CFile::MakeFileArray($fileId);
   }
   $item->setUfCrm_5_1710072122827($arFilesCopy);  
}

Сохранить, добавить, изменить, удалить
вариант 1
выполнит, но не будет проверок и обработчики не запустятся, индексы не обновятся/не удалятся и тд
$item->save(); //изменение, добавление
$item->delete(); //удаление
вариант 2
с выполнением всех проверок, обновлением индексов и прочих подкапотных штук
$context = new \Bitrix\Crm\Service\Context();
$context->setUserId($userId);  //ставим юзера, из-под которого делаем


$operation = $factory->getAddOperation($item, $context);  //добавление, $context- необязателен
$operation = $factory->getUpdateOperation($item, $context); //изменение, $context- необязателен 
$operation = $factory->getDeleteOperation($item, $context); //удаление, $context- необязателен 


$operation->disableAllChecks(); //можно отключить проверки
$result = $operation->launch(); 
вариант 3
изменение через массив
$class = $factory->getDataClass();
$saveResult = $class::update($id, $arUpdate);
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!