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

Бизнес-процессы - api коробка



читайте также Бизнес-процессы в Битрикс24 (памятка)

PHP-код блок пример
CModule::IncludeModule("nikaverro.gservice");
$root = $this->GetRootActivity();
$gs = GameService::getInstance();
$address = $gs->GetAddressGSText($root->GetVariable('AddressGS'));
$root->SetVariable('AddressGS',$address);
команды
$root = $this->GetRootActivity(); //возвращает интерфейс IBPRootActivity
$root->GetVariable('name'); //получить переменную
$root->GetConstant('name'); //получить константу, но не работает для глобальных констант
$root->GetDocumentId(); //id документа
$this->WriteToTrackingService($var); //добавить в лог


//получить глобальную константу
$property = \Bitrix\Bizproc\Workflow\Type\GlobalConst::getById($constName); //получить свойство  
$result = \Bitrix\Bizproc\Workflow\Type\GlobalConst::getValue($constName); //получить значение 

получить параметр GetRealParameterValue

Если надо изменить документ, то через IBPRootActivity это не сделать. Делается стандартными штуками, например:
Bitrix\Main\Loader::includeModule("crm");
$root = $this->GetRootActivity(); 
$dealId = $root->GetDocumentId();

$deal = new CCrmDeal;
$arDealUpdate = ['UF_MYPROP' => 'test'];
$resUpd = $deal->Update($dealID, $arDealUpdate, true, true, array('DISABLE_USER_FIELD_CHECK' => true));
Коробка. Смарт-процесс. На определенной стадии запускается автоматом процесс согласования

Задача:
Комменты из блока "Ознакомление с документом с возможностью оставить отзыв на него." в множественную строку без указания логина
блок php-код
$params = [
   "id" => "{{ID}}", //ид элемента смарт-процесса
   "smartTypeId" => "132", //ид типа смарт-процесса
   "propId" => "UF_CRM_5_1710071876683", //свойство типа строка множественное
   "comments" => "{=A32062_58149_75664_12273:Comments}" //доп результат "комментарии" из блока "ознакомление с документом с возм оставить отзыв"
];
MatchingToString($params); //функция в init.php
функция в init.php
function MatchingToString($params){//комменты из согласования в строковое поле      $comments = $params["comments"]??"";
   $id = $params["id"]??"";
   $smartTypeId = $params["smartTypeId"]??"";
   $propId = $params["propId"]??"";
   
   if(!empty($comments) && !empty($id) && !empty($smartTypeId) && !empty($propId)){      
      $arStr = explode(PHP_EOL, $comments);
      $str = [];
      $arComments = [];
      foreach($arStr as $s){         
         if(
            (strpos($s,":") !== false)&&
            (strpos($s,"(") !== false) && 
            (strpos($s,")") !== false)
         ){
            if(!empty($str)){
               $arComments[] = implode(PHP_EOL,$str);
               $str = [];
            }
            $s2 = substr($s, 0, strpos($s,"(")-1).":".PHP_EOL;
            $s2 .= substr($s, strpos($s,":")+1);
            $str[] = $s2;
         }   
         else{
            $str[] = $s;
         }
      }
      if(!empty($str)){
         $arComments[] = implode(PHP_EOL,$str);   
      }
      if(!empty($arComments) && CModule::IncludeModule("crm")){
         $factory = Bitrix\Crm\Service\Container::getInstance()->getFactory($smartTypeId); //сначала по типу получаем
         if(!empty($factory)){
            $item = $factory->getItem($id); //потом по id смарт-процесса
            if(!empty($item)){
               $item->set($propId,$arComments);       
               $item->save();
            }
         }
      }
   }
}




PHP-код в условии
Задача: отправлять письмо о создании заказа если "онлайн-оплата на сайте" с ID 14 со ссылкой на оплату, иначе без нее.
1. Создаем переменную в бизнес-процессе. (у меня pay_system_id)

2. Присваиваем переменной значение
   вариант 1. через блок "php код"
$this->SetVariable('pay_system_id', {=Document:PAY_SYSTEM_ID});
   вариант 2. через блок "изменение переменных".

3. В условии выбираем тип условия "php-код"

4. Задаем условие
Важно! доступа к  Document и $this нет, есть $ownerActivity
$ownerActivity->GetVariable('pay_system_id') != 14 //платежная система эквайринг с ID 14
4.  Если да, то блок "Отправить письмо клиенту" (обычное письмо), иначе php-код, который запускает Функцию, которая генерирует письмо со ссылкой на оплату (ее размещаем в init.php)


Создать подзадачу для задачи из бизнес-процесса
$arFields = Array(        "TITLE" => "Название задачи",
        "DESCRIPTION" => "Описание",
        "RESPONSIBLE_ID" => $userId, //ответственный
        "GROUP_ID" => $this->GetVariable('WORKGROUPID'),
        "PARENT_ID"=>'{=A2629_10558_53461_99205:TaskId}',
    );
 
    $obTask = new CTasks;
    $ID = $obTask->Add($arFields);
Cоздать рабочую группу и ее диск из бизнес-процесса
CModule::IncludeModule('socialnetwork');
CModule::IncludeModule('disk');
CModule::IncludeModule('webdav');
 
$SocGroup=new CSocNetGroup;
global $USER;
 
$arFieldsSG=array(
   "NAME"=>"{=Document:TITLE}",
   "SITE_ID" => "s1",
   "DESCRIPTION"=>"{=Document:TITLE} Workgroup",
   "ACTIVE"=>"Y",
   "VISIBLE"=>"Y",
   "OPENED"=>"Y",
   "CLOSED"=>"N",
   "SUBJECT_ID"=>4,
   "OWNER_ID"=>1,
   "INITIATE_PERMS"=>A,
   "SPAM_PERMS"=>"N",
   "SUBJECT_NAME"=>"Management Board"
 
);
 
$GroupID=CSocNetGroup::CreateGroup($USER->GetID(),$arFieldsSG);
 
if (CModule::IncludeModule("disk")){
   BitrixDiskDriver::getInstance()->addGroupStorage($GroupID);
}
 
$this->SetVariable('WORKGROUPID',$GroupID);


запустить бизнес-процесс, не привязанный к CRM
$documentId = CBPVirtualDocument::CreateDocument(    0,
    array(
     "IBLOCK_ID" => 27,
     "NAME" => "Create Notification",
     "CREATED_BY" => "user_".$GLOBALS["USER"]->GetID(),
    )
);
$arErrorsTmp = array();
$wfId = CBPDocument::StartWorkflow(
   $bpId,
    array("bizproc", "CBPVirtualDocument", $documentId),
    array_merge(array(), array("TargetUser" => "user_".intval($GLOBALS["USER"]->GetID()))),
    $arErrorsTmp
);
файл множественный запросить, получить на них публ ссылки



записываем загруженные файлы в сделку. Поле "Файлы" у меня типа файл множественное

и получаем публ короткие ссылки


получается так в журнале
сгенерированные ссылки работают и для внешних неавторизованных пользователей
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

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