Битрикс24 API Работа со сделками

Битрикс24 API Работа со сделками
18.02.2021
В начале подключение модуля СРМ : 

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

Добавление сделок

$arFields=[

 "TITLE"=>"Название сделки",

 'ASSIGNED_BY_ID'=>ответственный,

 'CATEGORY_ID'=> направление сделок,

 'STAGE_ID'=>'IS_NEW',/*стадия*/

 'OPENED'=> 'Y',

 'CURRENCY_ID'=>'RUB',

 'SUM'=> сумма,

 'BEGINDATE'=>"дата начала"

 'CLOSEDATE'=> "предполагаемая дата завершения"

 'CONTACT_IDS'=>массив Id контактов

 'COMPANY_ID'=>компания клиент

 'OBSERVER_IDS'=>массив Id наблюдателей,

'UF_FIELD'=>значение пользовательского поля, 

 ];

//старый метод

$entity = new CCrmDeal(false); //false - не учитывать права

$entity->Add($arFields, $bUpdateSearch = true, $options = array('CURRENT_USER'=>1));

//новый метод
$entity = new Bitrix\Crm\DealTable();
$res = $entity->add($arFields);
if($res->isSucces()){ }

Изменение сделки

//старый метод
$entity= new CCrmDeal(false); //false - не учитывать права 
$entity->Update($dealID, array $arFields, $bCompare = true, $bUpdateSearch = true, $options = array('CURRENT_USER'=>1));

//новый метод
$entity = new Bitrix\Crm\DealTable();
$res = $entity->update($dealID,$arFields);
if($res->isSucces()){

} 

Добавление наблюдателей в сделке:


Кажется, что можно использовать стандартную функцию 
 \Bitrix\Crm\Observer\Entity\ObserverTable::add($arAdd); 

так как наблюдатели хранятся в отдельной таблице.
Но при таком добавлении наблюдателей в сделку, они не получают права на просмотр сделки и не видят ее в списке сделок. 
Правильно добавлять наблюдателей в сделку  нужно через функцию: 
 \CCrmDeal::AddObserverIDs($dealId,$arFields['USERS_IDS']); 

Соответственно удаление массива наблюдателей из сделки:

\CCrmDeal::RemoveObserverIDs($dealId,$arFields['USERS_IDS']);

Изменение товаров в сделке:

создаем массив нужных товаров
$arRows[] = array(

			'PRODUCT_ID' => $arProduct['ID'],
			'QUANTITY' =>$arProduct['QUANTITY'], 
'PRICE' =>$arProduct['PRICE']
);
и добавляем в сделку.
 CCrmDeal::SaveProductRows($dealID, $arRows, $checkPerms = true, $regEvent = true, $syncOwner = true);

Поиск и получение сделок по фильтру:


$dbDeal=CCrmDeal::GetListEx($arOrder = array("ID"=>"ASC"), $arFilter = array('CHECK_PERMISSIONS'] => 'N'), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array("*","UF_*"), $arOptions = array());

while($arDeal=$dbDeal->fetch()){
var_dump($arDeal);
}

Поиск и получение сделок по фильтру D7:

use Bitrix\Crm\DealTable;
 $arDeals=DealTable::getList([
            'order'=>['ID' => 'DESC'],
            'filter'=>$arFilter,
            'select'=>$arSelect,
            'cache' => ['ttl' => 3600]
        ])->fetchAll();
        $deals=[];
        foreach($arDeals as $deal){
            $deals[$deal['ID']]=$deal;
        }

Запуск бизнес-процесса или робота для сделки:


Если изменяете стадию сделки, то надо вручную запустить робота для этой стадии:
\Bitrix\Main\Loader::includeModule('bizproc'); 
  $arErrors = Array();                  
   CBPDocument::StartWorkflow(
         $bpId,  //ID робота, смотреть через таблицы
         array("crm","CCrmDocumentDeal","DEAL_".$dealId), 
         array("TargetUser" => "user_1"),
         $arErrors
   );    

Добавление комментария в таймлайн сделки

if (!empty($attachments))
    $settings = array('HAS_FILES' => 'Y');
else
    $settings = array('HAS_FILES' => 'N');
 $entryID = \Bitrix\Crm\Timeline\CommentEntry::create(
    array(
        'TEXT' => $text,
        'FILES' => $attachments,
        'SETTINGS' => $settings,
        'AUTHOR_ID' => $authorID,
        'BINDINGS' => array(array('ENTITY_TYPE_ID' => $ownerTypeID, 'ENTITY_ID' => $ownerID))
    )
);    

Возврат к списку


Материалы по теме: