Добрый день.
Есть несколько списков. По созданию/изменению элементов в этих списках создаются бизнес процессы. Необходимо периодически удалять историю запусков процессов. Для удаления написал агента(может кому ньть пригодится):
Проблема возникла при удалении истории,
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 - удаляет всю историю на момент запуска, хотелось бы сохранять историю относящуюся к ещЁ работающему процессу. Как правильно это сделать?