Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Дела - crm api коробка



добавить дело
$params = [    
    'TYPE_ID' => CCrmActivityType::Call,
    'BINDINGS' => [
        ['OWNER_ID' => 11, 'OWNER_TYPE_ID' => CCrmOwnerType::Deal]
    ],
    'SUBJECT' => 'Outgoing call',
    'COMPLETED' => 'Y',
    'DESCRIPTION' => 'Some description',
    'RESPONSIBLE_ID' => 1,
    'DIRECTION' => CCrmActivityDirection::Outgoing
 ];
$response = CCrmActivity::Add($params, false, false);
$entity_type = 'LEAD';
   $entity_id = '13308';
   $now = ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL', 's1');
    $arBindings[] = array(
                'OWNER_TYPE_ID' => CCrmOwnerType::ResolveID($entity_type),
                'OWNER_ID' => $entity_id
            );
   $arFields = array(
      'OWNER_ID' => $entity_id,
      'OWNER_TYPE_ID' => CCrmOwnerType::ResolveID($entity_type),
      'TYPE_ID' =>  CCrmActivityType::Email,
      'SUBJECT' => 'ФАЙЛ',
      'START_TIME' => $now,
      'END_TIME' => $now,
      'COMPLETED' => 'Y',
      'RESPONSIBLE_ID' => $USER->GetID(),
      'PRIORITY' => CCrmActivityPriority::Medium,
      'DESCRIPTION' => 'Тестирование записи в лид',
      'DESCRIPTION_TYPE' => CCrmContentType::BBCode,
      'DIRECTION' => CCrmActivityDirection::Outgoing,
      'LOCATION' => '',
      'NOTIFY_TYPE' => CCrmActivityNotifyType::None,

      'BINDINGS' => array_values($arBindings)
   );


   $test = CCrmActivity::Add($arFields, false, false, array('REGISTER_SONET_EVENT' => true));
$arPOST = [
            'ENTITY_TYPE_ID' => 2, //Тип - сделка
            'ENTITY_ID' => 246, //ID сделки
                       'MESSAGE' => 'Текст мессаджа',
            'TITLE' => 'Заголовок, но он вроде не выводится',
            'USER_ID' =>1, //От какого Юзера коммент

        ];         
$message_id = \CCrmLiveFeed::CreateLogMessage($arPOST);
добавить в историю
$CCrmEvent = new CCrmEvent();   
$CCrmEvent->Add(
      array(
         'ENTITY_TYPE'=> 'DEAL',
         'ENTITY_ID' => '457',
         'EVENT_ID' => 'INFO',
         'EVENT_TEXT_1' => 'Tratatat test',
         'DATE_CREATE' => $eventDate,
         'FILES' => array(
            CFile::MakeFileArray('/bitrix/templates/bitrix24/images/template_sprite_21.png')
         )
      )    );
ENTITY_TYPE - к какой сущности относится, может принимать значения: LEAD, CONTACT, COMPANY, DEAL, QUOTE (лид, контакт, компания, сделка, предложение).
ENTITY_ID - ID соответствующей сущности.
EVENT_ID - тип записи, которую вы хотите сделать, может принимать значения: INFO, PHONE, MESSAGE (информация, телефонный звонок, отправленный e-mail), хочу заметить, что  актуальный тип только "информация", для звонков и e-mail используются отдельные сущности, которые мы тут рассматривать не будем.
EVENT_TEXT_1 - текст.
FILES - список файлов, если требуется.
DATE_CREATE - дата записи, по умолчанию текущее время, но можно
$eventDate = ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL', SITE_ID);
список дел получить
use Bitrix\Main\Loader;
Loader::includeModule('crm');
$obActivities = CCrmActivity::GetList(
    [],
    [
        'OWNER_TYPE_ID'     => CCrmOwnerType::ResolveID('CONTACT'),
        'COMPLETED' => 'N',
        'CHECK_PERMISSIONS' => 'N'
    ],
    false,
    false,
    [
        'ID'
    ]
);

while ($arActivity = $obActivities->Fetch()) {
    //
}
обновить
CCrmActivity::Update($activityId,
        [
            'COMPLETED' => 'Y'
        ],
        false    
);

удаление
if ( !CCrmActivity::Delete($activityId)){ 
  var_dump(\CCrmActivity::GetErrorMessages());
}
else{
   //удалили
}
\CCrmActivity::Delete($ID, $checkPerms = true, $regEvent = true, $options = array()): bool
где

  • $checkPerms  - проверить права юзера true/false
  • $regEvent  - нужна ли регистрация в истории сущности true/false
  • $options - параметры array

Список значений options:

  • MOVED_TO_RECYCLE_BIN (bool) - флаг того что происходит не удаление, а перемещение в корзину.
  • ACTUAL_ITEM - массив описания удаляемого дела (если передан, то убирает лишний запрос в базу данных). Если передан и не является массивом или найти объект в базе не удалось - удаление будет прекращено.
  • ACTUAL_BINDINGS - массив из наборов текущих связей дела с crm-сущностями. Если не передан, будет запрошен из базы данных.
  • SKIP_BINDINGS (bool) - флаг, отключающий удаление связей удаляемого дела с crm-сущностями.
  • SKIP_COMMUNICATIONS (bool) - флаг, отключающий удаление привязанных к делу коммуникационных каналов.
  • SKIP_FILES (bool) - флаг, отключающий удаление привязанных к делу файлов. Если MOVED_TO_RECYCLE_BIN = true, автоматически true.
  • SKIP_USER_ACTIVITY_SYNC (bool) - флаг отключающий синхронизацию активности (не будет перерасчета ближайших дел)
  • SKIP_STATISTICS (bool) - флаг, отключающий перерасчет статистики сделки/лида
  • SKIP_ASSOCIATED_ENTITY (bool) - флаг, отключающий удаление связанной сущности (связанную сущность определяет провайдер дела)
  • SKIP_CALENDAR_EVENT (bool) - флаг, отключающий удаление события календаря связанного с этим делом (если такое существует)

обработчики событий
OnBeforeActivityDelete до удаления
\Bitrix\Main\EventManager::getInstance()->addEventHandlerCompatible('crm', 'OnBeforeActivityDelete',function( $activityId ){
          //ченить проверяем

           return false; //можно отменить удаление
    });
OnActivityDelete после удаления
\Bitrix\Main\EventManager::getInstance()->addEventHandlerCompatible('crm', 'OnBeforeActivityDelete',function( $activityId ){
          //ченить делаем, например. грустим, или уведомляем старшего менеджера          
    });

use \CCrmOwnerType,
   \Main\Type\DateTime,
   \Bitrix\Crm\ItemIdentifier,
   \Bitrix\Crm\Activity\Entity\ToDo,
   \Bitrix\Crm\Activity\AutocompleteRule;
$entityItemIdentifier = new ItemIdentifier(CCrmOwnerType::Deal, $dealId); 

$todo = new ToDo($entityItemIdentifier);

$todo->setDescription("Сделать куйню срочно");
$todo->setResponsibleId($responsibleId);
$todo->setCheckPermissions(false); //не проверять права юзера
$todo->setDeadline( DateTime::createFromTimestamp(strtotime()-86400) );//вчера
$todo->setAutocompleteRule(AutocompleteRule::AUTOMATION_ON_STATUS_CHANGED); //завершить при переходе на др стадию (статус)  AutocompleteRule::NONE - не привязываемся в смене стадий, статусов
$todo->save();
получить
$todo = ToDo::load(CCrmOwnerType::Deal, $activityId);
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

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