29.03.2020
09:48
29.03.2020 09:48:43
Это статья про api d7 crm |
Есть другие статьи про api:
crm коробка -
старое apiДополненная статья (подмена фабрики и пр)
crm
rest apiapi другие модули
подключить модуль 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); |
29.03.202009:4829.03.2020 09:48:43
Если блог был полезным, можете угостить меня "чашечкой кофе" :)
Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!