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

Следующий код помогает решить эту проблему. Но вставлять его лучше не в 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;
               
            }
         
         }
         
      }
   
   }

}

Чтобы оставить сообщение, авторизуйтесь, или войдите с помощью:
Главная   ·   Модули для 1С-Битрикс   ·   Типовые услуги   ·   Форум   ·   Блог   ·   Контакты
Рейтинг@Mail.ru