партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Универсальная галерея - модуль для битрикс
Автозапуск бизнес-процессов при создании и изменении элемента - вещь полезная и нужная. Однако, работает не всегда. Например, не работает при создании и изменении элементов в публичных компонентов где бизнес-процессы не предусмотрены. Поэтому, если вы, например, в административной части ставите галочку "Запускать при изменении", и затем сохраняете элемент в публичной части через компонент "Изменение элементов инфоблока", то бизнес-процесс не запустится.
[spoiler]
Следующий код помогает решить эту проблему. Но вставлять его лучше не в init.php, а, например, непосредственно перед вызовом компонента в публичной части.


AddEventHandler("iblock""OnAfterIBlockElementAdd", Array("My_BizprocAutoStart","AutoStartAdd"));

AddEventHandler("iblock""OnAfterIBlockElementUpdate", Array("My_BizprocAutoStart","AutoStartUpdate"));

class 
My_BizprocAutoStart {

   function 
AutoStartAdd(&$arFields) {
   
      if(
CModule::IncludeModule("bizproc")) {

         
$arErrors = Array();
         
$arParameters = Array();
      
         
CBPDocument::AutoStartWorkflows(
            Array(
"iblock""CIBlockDocument""iblock_".$arFields["IBLOCK_ID"]),
            
CBPDocumentEventType::Create,
            Array(
"iblock""CIBlockDocument"$arFields["ID"]),
            
$arParameters,
            
$arErrors
         
);
         
      }
   
   }

   function 
AutoStartUpdate(&$arFields) {
   
      if(
CModule::IncludeModule("bizproc")) {

         
$arErrors = Array();
         
$arParameters = Array();
      
         
CBPDocument::AutoStartWorkflows(
            Array(
"iblock""CIBlockDocument""iblock_".$arFields["IBLOCK_ID"]),
            
CBPDocumentEventType::Edit,
            Array(
"iblock""CIBlockDocument"$arFields["ID"]),
            
$arParameters,
            
$arErrors
         
);
         
      }
   
   }

}

Бизнес-процессы в Wiki

Следующий код позволяет включить автозапуск бизнес-процессов в вики. Причем бизнес-процесс, который должен запускаться при создании элемента, будет запускаться при публикации статьи вики. Бизнес-процесс обновления будет запускаться только один раз на странице - это сделано потому что, в компоненте wiki.edit элемент - статья вики - обновляется 2 раза, а в редких случаях необходимо запускать бизнес-процесс более одного раза, если пользователь только один раз нажал на кнопку "Опубликовать". В параметре запуска бизнес-процесса "DetailPageUrl" будет находится адрес статьи вики, который можно использовать, например, при отправке уведомлений.


AddEventHandler("iblock""OnBeforeIBlockElementUpdate", Array("My_WikiBizprocAutoStart","GetActivity"));

AddEventHandler("iblock""OnAfterIBlockElementUpdate", Array("My_WikiBizprocAutoStart","AutoStartHandlers"));

class 
My_WikiBizprocAutoStart {

   function 
GetActivity(&$arFields) {

      global 
$My_WikiBizprocAutoStartActivity;
      static 
$bAlreadyRun;

      if(
$bAlreadyRun!==true) {

         
$rsElement CIBlockElement::GetByID($arFields["ID"]);

         if(
$arElement=$rsElement->Fetch()) $My_WikiBizprocAutoStartActivity $arElement["ACTIVE"];

         
$bAlreadyRun true;
      }

   }

   function 
AutoStartHandlers(&$arFields) {
   
      if(
CModule::IncludeModule("bizproc")) {

         global 
$My_WikiBizprocAutoStartActivity;
         static 
$bAlreadyRun;
         
         if(
$bAlreadyRun!==true) {

            
$rsElement CIBlockElement::GetByID($arFields["ID"]);

            if(
$arElement=$rsElement->GetNext()) if($arElement["ACTIVE"]=="Y") {

               
$arErrors = Array();
               
$arParameters = Array();
            
               
CBPDocument::AutoStartWorkflows(
                  Array(
"iblock""CIBlockDocument""iblock_".$arFields["IBLOCK_ID"]),
                  
$My_WikiBizprocAutoStartActivity=="N"?(CBPDocumentEventType::Create):(CBPDocumentEventType::Edit),
                  Array(
"iblock""CIBlockDocument"$arFields["ID"]),
                  Array(
"DetailPageUrl"=>$arElement["DETAIL_PAGE_URL"]),
                  
$arErrors
               
);

               
$bAlreadyRun true;
               
            }
         
         }
         
      }
   
   }

}

Чтобы оставить сообщение, авторизуйтесь, или войдите с помощью: