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

Задачи - api коробка



подключение модуля
CModule::IncludeModule("tasks");
обработчики
AddEventHandler("tasks", "OnBeforeTaskAdd", "MyOnBeforeTaskAdd");
function MyOnBeforeTaskAdd(&$arTask){}

AddEventHandler("tasks", "OnTaskAdd", "MyOnTaskAdd");
function MyOnTaskAdd($idTask, $arTask){}

AddEventHandler("tasks", "OnBeforeTaskUpdate", "MyOnBeforeTaskUpdate");
function MyOnBeforeTaskUpdate($id, &$data, &$arTaskCopy){}

AddEventHandler("tasks", "OnTaskUpdate", "MyOnTaskUpdate");
function MyOnTaskUpdate($ID, &$arFields, &$arTaskCopy){}
пример обработчика, который удаляет лишние пинги

напоминание о задаче//добавляем напоминание
$arFields = Array(
    "TASK_ID" => $idTask,
    "USER_ID" => $arTask["CREATED_BY"],
    "REMIND_DATE" => date("d.m.Y H:i:s", strtotime("+5 hours")), 
    "TYPE" => CTaskReminders::REMINDER_TYPE_DEADLINE,
    "TRANSPORT" => CTaskReminders::REMINDER_TRANSPORT_JABBER
);
$obTaskReminders = new CTaskReminders;
$ID = $obTaskReminders->Add($arFields);
задачи для сделки (или другой CRM сущности) получить и обновить
$arFilter = array(                       
   'TAG' => $tag,
   "UF_CRM_TASK" => "D_".$dealID, // "L_".$leadID    
);
$res = CTasks::GetList(
    Array("DEADLINE" => "ASC"), 
    $arFilter,
    array("ID"),
    array("USER_ID"=>1)   //из-под админа получаем                 
);
$obTask = new CTasks;
while($arTask1 = $res->GetNext()){   
   $obTask->Update(
      $arTask1["ID"],  
      array(
         "STATUS" => CTasks::STATE_COMPLETED               
      ), 
      array('USER_ID' => 1)
   );
}
создать задачу
$newTask = array(
   "TITLE" => "заголовок",
   "DESCRIPTION" => "описание",
   "TAGS" => array("CRM","tag1"),
   "DEADLINE" => date("d.m.Y H:i:s", strtotime(("+".($time+4)." hours"))),
   "CREATED_BY" => $arTaskCopy["RESPONSIBLE_ID"],//кем создано
   "RESPONSIBLE_ID" => $arTaskCopy["RESPONSIBLE_ID"],//ответственный
   "AUDITORS" => $arTaskCopy["AUDITORS"], //наблюдатели
   //"TASK_CONTROL" => "Y",
   "ADD_IN_REPORT" => "Y",
   "DEPENDS_ON"=> $arFields["ID"],
   "UF_CRM_TASK" => $arTaskCopy["UF_CRM_TASK"] //IDшники сущностей ["D_123","C_234","L_345"]
);   

$taskItem = \CTaskItem::add($newTask, 1);
добавить определенного наблюдателя в задачу с тегом SMART
GetList не хочет возвращать AUDITORS
$arFilter = array(                       
   'TAG' => array("SMART"),   
);
$res = CTasks::GetList(
    Array("DEADLINE" => "ASC"), 
    $arFilter,
    array("ID"),
    array("USER_ID"=>1)   //из-под админа получаем                 
);
$obTask = new CTasks;
while($arTask1 = $res->GetNext()){      
   $task = new \Bitrix\Tasks\Item\Task($arTask1["ID"]);
   $auditors = $task["AUDITORS"]->toArray();
   if(!in_array(25, $auditors)){
                //так не работает, ни фига не сохраняет  
      // $task["AUDITORS"]->push(25); 
      // $task->save();
      
                //так работает
      $auditors[] = 25;
      $obTask->Update(
            $arTask1["ID"],  
            array(
               "AUDITORS" => $auditors
            ), 
            array('USER_ID' => 1)
      );

   }   
}
обработчик
AddEventHandler("tasks", "OnBeforeTaskAdd", "AddSmartViewerByAdd");
function AddSmartViewerByAdd(&$arFields){   
   $arSmartViewers = [25];
   if(!empty($arFields["TAGS"]) && is_array($arFields["TAGS"]) && in_array("SMART", $arFields["TAGS"])){
      $arFields["AUDITORS"] = $arFields["AUDITORS"] ?? [];
      $arFields["AUDITORS"]  = array_unique(array_merge($arFields["AUDITORS"],$arSmartViewers));
   }
   $possibleCompliteTaskFieldID = 'UF_AUTO_696681441528';
   if(isset($arFields[$possibleCompliteTaskFieldID]) && ($arFields[$possibleCompliteTaskFieldID] == '1')){
      $arFields["TASK_CONTROL"] = "N";
   }
}
AddEventHandler("tasks", "OnBeforeTaskUpdate", "AddSmartViewerByUpdate");
function AddSmartViewerByUpdate($id, &$arFields, &$arTaskCopy){   
   $arSmartViewers = [25];
   if(!empty($arFields["TAGS"]) && is_array($arFields["TAGS"]) && in_array("SMART", $arFields["TAGS"])){
      $arFields["AUDITORS"] = $arFields["AUDITORS"] ?? $arTaskCopy["AUDITORS"];
      $arFields["AUDITORS"]  = array_unique(array_merge($arFields["AUDITORS"],$arSmartViewers));
   }
}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

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