| читайте также Бизнес-процессы в Битрикс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();
}
}
}
}
} |
получить переменную БП, дописать в переменную БП и сохранить/запустить БП
$runtime = \CBPRuntime::GetRuntime();
$workflow = $runtime->GetWorkflow($workflowId, true);
$documentId = $workflow->GetDocumentId();
$rootActivity = $workflow->GetActivityByName('Template');
$logs = $rootActivity -> GetVariable('MY_VAR');
if (is_array($logs)){
$logs = $logs[0];
}
$text = "some text";
$rootActivity->SetVariable('MY_VAR',$logs.$text);
$persister = \CBPWorkflowPersister::GetPersister();
$persister->SaveWorkflow($rootActivity, true); |
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
); |


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

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

получается так в журнале
сгенерированные ссылки работают и для внешних неавторизованных пользователей