читайте также Бизнес-процессы в Битрикс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->SetVariable('name',$value); //установить значение переменной $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)); |
Коробка. Смарт-процесс. На определенной стадии запускается автоматом процесс согласования Задача: Комменты из блока "Ознакомление с документом с возможностью оставить отзыв на него." в множественную строку без указания логина |
$params = [ "id" => "{{ID}}", //ид элемента смарт-процесса "smartTypeId" => "132", //ид типа смарт-процесса "propId" => "UF_CRM_5_1710071876683", //свойство типа строка множественное "comments" => "{=A32062_58149_75664_12273:Comments}" //доп результат "комментарии" из блока "ознакомление с документом с возм оставить отзыв" ]; MatchingToString($params); //функция в 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 со ссылкой на оплату, иначе без нее. |
2. Присваиваем переменной значение
вариант 1. через блок "php код"
$this->SetVariable('pay_system_id', {=Document:PAY_SYSTEM_ID}); |
3. В условии выбираем тип условия "php-код"
4. Задаем условие
Важно! доступа к Document и $this нет, есть $ownerActivity |
$ownerActivity->GetVariable('pay_system_id') != 14 //платежная система эквайринг с ID 14 |
Создать подзадачу для задачи из бизнес-процесса
$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); |
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 ); |
записываем загруженные файлы в сделку. Поле "Файлы" у меня типа файл множественное
и получаем публ короткие ссылки
получается так в журнале
сгенерированные ссылки работают и для внешних неавторизованных пользователей