Добрый день.
Есть несколько списков. По созданию/изменению элементов в этих списках создаются бизнес процессы. Необходимо периодически удалять историю запусков процессов. Для удаления написал агента(может кому ньть пригодится):
Проблема возникла при удалении истории,
CBPHistoryService::DeleteByDocument - удаляет всю историю на момент запуска, хотелось бы сохранять историю относящуюся к ещЁ работающему процессу. Как правильно это сделать?
Есть несколько списков. По созданию/изменению элементов в этих списках создаются бизнес процессы. Необходимо периодически удалять историю запусков процессов. Для удаления написал агента(может кому ньть пригодится):
Код |
---|
function bizprocDelete(){ if(CModule::IncludeModule('bizproc')&&CModule::IncludeModule('lists')){ $arSelect = array('ID','IBLOCK_ID'); $arFilter = array( 'IBLOCK_CODE' =>array('ServiceGroup','TariffGroup', 'IPPool', 'TARIFF', 'AP'), 'ACTIVE_DATE' =>'Y', 'ACTIVE' =>'Y'); $res = \CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); $arBlock = array(); $i = 0; while($ob = $res->GetNextElement()){ $arFields = $ob->GetFields(); $arBlock[$i]['id'] = $arFields['ID']; $arBlock[$i]['iBlock'] = $arFields['IBLOCK_ID']; $i++; } foreach($arBlock as $item){ $iblockQuery = \CIBlock::getList(array(), array('ID' => $item['iBlock'])); if ($iblock = $iblockQuery->fetch()) { $iblockType = $iblock["IBLOCK_TYPE_ID"]; } $documentID = \BizprocDocument::getDocumentComplexId($iblockType, $item['id']); $states = \CBPStateService::getDocumentStates($documentID); foreach ($states as $workflowId => $arState){ if(trim($arState['STATE_NAME']) == 'Completed'){ $terminate = strlen($arState["ID"]) > 0 && strlen($arState["WORKFLOW_STATUS"]) > 0; $errors = \CBPDocument::killWorkflow($workflowId, $terminate, $documentID); if ($errors) { foreach ($errors as $e) { $arErrors[] = $e; } \Bitrix\Main\Diag\Debug::writeToFile(array('Error agent bizprocDelete' => $arErrors),"","error/error.txt"); }else{ \CBPStateService::DeleteWorkflow($workflowId); \CBPHistoryService::DeleteByDocument($documentID); } } } } // CBPStateService::DeleteByDocument($documentID); // CBPHistoryService::DeleteByDocument($documentID); } return 'bizprocDelete();'; } |
CBPHistoryService::DeleteByDocument - удаляет всю историю на момент запуска, хотелось бы сохранять историю относящуюся к ещЁ работающему процессу. Как правильно это сделать?