• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/lib/eventoffline.php
  • Класс: BitrixRestEventOfflineTable
  • Вызов: EventOfflineTable::markError
static function markError($processId, $appId, $connectorId, array $listIds)
{
	if(count($listIds) > 0)
	{
		$connection = MainApplication::getConnection();
		$helper = $connection->getSqlHelper();

		foreach($listIds as $key => $id)
		{
			$listIds[$key] = $helper->forSql($id);
		}

		$queryWhere = array(
			"APP_ID='".intval($appId)."'",
			"CONNECTOR_ID='".$helper->forSql($connectorId)."'",
			"MESSAGE_ID IN ('".implode("', '", $listIds)."')",
		);

		$sqlTable = static::getTableName();
		$sqlWhere = implode(" AND ", $queryWhere);
		$sqlProcessId = $helper->forSql($processId);

		$sql = array();
		$sql[] = "DELETE FROM {$sqlTable} WHERE {$sqlWhere} AND ERROR=0 AND PROCESS_ID <> '{$sqlProcessId}'";
		$sql[] = "UPDATE {$sqlTable} SET ERROR=1, PROCESS_ID=IF(PROCESS_ID='{$sqlProcessId}', '', 'fake_process_id') WHERE {$sqlWhere} AND ERROR=0 ORDER BY PROCESS_ID ASC";
		$sql[] = "DELETE FROM {$sqlTable} WHERE {$sqlWhere} AND PROCESS_ID='fake_process_id'";

		foreach($sql as $query)
		{
			$connection->query($query);
		}
	}
}