вторник, 19 мая 2015 г.

Себе на память: программный запуск бизнес-процесса в корпортале Битрикс24

Для элемента CRM:

CModule::IncludeModule('bizproc');

CBPDocument::StartWorkflow(
      4,
      array("bizproc","CBPVirtualDocument",$LidID),
      array(),
      $arErrorsTmp
);

Для бизнес-процесса, не привзянного к CRM

$documentId = CBPVirtualDocument::CreateDocument(
    0,
    array(
     "IBLOCK_ID" => 27,
     "NAME" => "Create Notification",
     "CREATED_BY" => "user_".$GLOBALS["USER"]->GetID(),
    )
   );

   $arErrorsTmp = array();

   $wfId = CBPDocument::StartWorkflow(
   27,
    array("bizproc", "CBPVirtualDocument", $documentId),
    array_merge(array(), array("TargetUser" => "user_".intval($GLOBALS["USER"]->GetID()))),
    $arErrorsTmp
   );



11 комментариев:

Александр Урилов комментирует...

А нет такого же рецепта, но для новых БП (которые в живой ленте)?

Юлия комментирует...

Оно будет работать и в них (в коробке, конечно).

Александр Урилов комментирует...

Работать то работает, но в ленте не появляется.

mediaexplorer комментирует...

Александр, а какой тип инфоблока у вас? Процессы? Бизнес-процессы (БП)? Списки (унив.)? Или что-то подвязанное к CRM? В корпортале (коробка) на текущий момент БП, подвязанные к CRM, в Живой Ленте не отображаются... хотя на днях презентована такая возможность для будущего... Если тип Процессы, то нужно галочку поставить "Отображать в живой ленте"... и попробовать без программирования вначале отобразить тестовый БП в ленте :) Хотя это как раз не сложно... сложности с другим. Думаю, во фрагменте приведенного в блоге кода
$wfId = CBPDocument::StartWorkflow(
xx,
array("bizproc", "CBPVirtualDocument", $documentId),
array_merge(array(), array("TargetUser" => "user_".intval($GLOBALS["USER"]->GetID()))),
$arErrorsTmp
);
для случая не-CRM и при использовании типа "Процессы" нужно вместо bizproc написать что-то иное... ну и вместо xx вписать не номер инфоблока 27, а именно номер шаблончика БП, подвязанного к этому инфоблоку (они вовсе не равны с номером самого БП)

Виталий В Б комментирует...

Почти три часа искал решение(нашел у Вас) но хочется понять в чем ошибка(мистическая). Я скопировал в инструментах -> в окно "php-код" код из учебника.
заменив аргументы на свои, причем я подумал что модуль в котором запускается БП (у меня над сделкой в СРМ) это первый аргумент второго массива "crm" , второй аргумент обозначение сущности над которой выполняется БП.
if(CModule::IncludeModule("bizproc")){
CBPDocument::StartWorkflow(
119,
array("crm","DEAL",876),
array(),
$arErrors
);
}
print_r($arErrors);
Этот код сработал, БП запустился, я стал эксперементировать с параметрами. И с раза 5-го код перестал работать с выбросом ошибки
Array
(
[0] => Array
(
[code] => 10002
[message] => Аргумент 'documentId' не определен
[file] => /home/bitrix/www/bitrix/modules/bizproc/classes/general/helper.php [804]
)
)
И только с array("bizproc","CBPVirtualDocument",876) сработало
что за "bizproc","CBPVirtualDocument"...в чем подвох? )))

Виталий В Б комментирует...

мне не успокоиться))
Вот выдержка из оф. документации:

Откройте диалог настроек параметров действия с помощью иконки и введите код:
CBPDocument::StartWorkflow(
6,
array("bizproc","CIBlockDocument",{=Document:ID}),
array("Voters"=>array("user_1")),
$arErrors
);
Где:

Первый параметр - это ID запускаемого шаблона бизнес процесса. В нашем случае это 6, что соответствует Двухэтапному утверждению.
Примечание: ID одних и тех же бизнес процессов могут отличаться для разных установок продукта. Всегда внимательно проверяйте данный параметр.
Второй параметр - это код документа, для которого создается бизнес-процесс. Он задается в виде массива, элементами которого являются соответственно название модуля, класс документа и код документа в модуле.
Примечание: шаблон запускаемого бизнес-процесса должен соответствовать типу указываемого документа. В данном примере бизнес-процесс запускается для того же элемента информационных блоков, над которым работает запускающий бизнес-процесс.

Юлия комментирует...

Сорри, Виталий. Мне сейчас некогда вникать - много работы.

Юленька Полякова комментирует...

Для лидов во втором параметре в функцию CBPDocument::StartWorkflow() необходимо передавать массив array("crm","CCrmDocumentLead","LEAD_".intval($id))
Для других сущностей с параметрами можно ознакомиться в таблице БД b_bp_workflow_template

Анонимный комментирует...

Добрый день.
А как передать файл в параметр бизнес-процесса типа Файл?

Евгений Волгин комментирует...

добрый день! просьба помочь с автозапуском БП в инфоблоке.
в ручном режиме работает.

расписал здесь: http://dev.1c-bitrix.ru/community/forums/forum23/topic98135/

Анонимный комментирует...

>> Александр Урилов пишет...
А нет такого же рецепта, но для новых БП (которые в живой ленте)?

А Вы не пробовали отметить галочку Показать в живой ленте (для бизнес процесса) или установить этот параметр через код