Страница 2 из 4
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 31 май 2023, 12:37
tehnos
Вот только что понадобилось запустить автоматизацию из автоматизации - пошёл на форум, а тут такое
Всё же не совсем понятно... Как например запустить автоматизацию #100 из "Выполнить PHP скрипт"?
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 31 май 2023, 15:12
alexinc
tehnos писал(а): ↑31 май 2023, 12:37
Вот только что понадобилось запустить автоматизацию из автоматизации - пошёл на форум, а тут такое
Всё же не совсем понятно... Как например запустить автоматизацию #100 из "Выполнить PHP скрипт"?
Пока подсказать не могу до конца. Борюсь. По всем признакам должен работать, но не работает. Пока не ясно, почему. С кнопки работает в списке записи, а вот с запуска из автоматизации, нет. Причем, видно в date_updated - обновление происходит. Не понятно.
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 31 май 2023, 16:08
tehnos
Держите, кому надо. Работает.
Прошу Сергея поправить, если видны очевидные косяки или присутствует лишний код.
Код: Выделить всё
/* Запуск автоматизации №73 */
$item_id = [id];
$process_id = 73;
//find process
$process_query = db_query("SELECT * FROM `app_ext_processes` WHERE `id` = {$process_id}");
$process = mysqli_fetch_assoc($process_query);
//check status
if($process['is_active'] == 0) {
die();
}
//check process filter
$reports_info_query = db_query("SELECT * FROM `app_reports` WHERE `entities_id` = '" . db_input($process['entities_id']) . "' AND `reports_type` = 'process" . $process['id'] . "'");
if($reports_info = mysqli_fetch_assoc($reports_info_query)) {
if(!reports::count_filters_by_reports_id($reports_info['id']) && !$item_id) {
die("Error: filters are not setup for process #{$process_id}!");
}
}
$processes = new processes($process['entities_id']);
//run process for single item
if($item_id) {
//check if item exists
$check_query = db_query("SELECT `id` FROM `app_entity_{$process['entities_id']}` WHERE `id` = {$item_id}");
if(!$check = mysqli_fetch_assoc($check_query)) {
die("Error: item #{$item_id} not found");
}
$processes->items_id = $item_id;
if($processes->check_buttons_filters($process)) {
$processes->run($process, false, true);
}
}
//run process for filtered items
elseif($reports_info) {
$listing_sql_query = '';
$listing_sql_query_select = '';
$listing_sql_query_having = '';
$sql_query_having = array();
//prepare forumulas query
$listing_sql_query_select = fieldtype_formula::prepare_query_select($process['entities_id']);
$listing_sql_query = reports::add_filters_query($reports_info['id'], $listing_sql_query);
//prepare having query for formula fields
if(isset($sql_query_having[$process['entities_id']]))
{
$listing_sql_query_having = reports::prepare_filters_having_query($sql_query_having[$process['entities_id']]);
}
$listing_sql_query .= $listing_sql_query_having;
$item_sql = "SELECT e.* " . $listing_sql_query_select . " FROM app_entity_" . $process['entities_id'] . " e WHERE e.id > 0 " . $listing_sql_query;
$item_query = db_query($item_sql);
while($item = mysqli_fetch_assoc($item_query))
{
$processes->items_id = $item['id'];
$processes->run($process, false, true);
}
}
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 31 май 2023, 16:19
alexinc
Это ж прямо из cron вытащено. Нет?
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 31 май 2023, 16:24
tehnos
Да. Перенабрал в привычное для меня форматирование + было пару опечаток исправил.
У себя проверил на автоматизации выполняющейся для единичной записи - всё ок.
Если будет более компактное решение - сообщите.
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 31 май 2023, 17:14
alexinc
Ну на самом деле, как ребята подсказали выше - все достаточно просто.
$current_entity_id = это поле из запроса $process_query = db_query("SELECT * FROM `app_ext_processes` WHERE `id` = {$process_id}") - process['entities_id'].
Самое важное в работе процесса - это получить item_id. без него работать не будет никак. А вот получить его можно уже разными способами. Прямым перебором из базы или фильтры применять, но item_id передавать обязательно.
processes = new processes($current_entity_id);
$processes->items_id = $current_item_id;
$processes->run($process, false, true);
Единственно, я не понял - что за 3 параметр вот здесь: $processes->run($process, false, true). В коде класса стоит is_ipn - что это значит, для меня загадка (комментариев в коде - 0)... опытным путем выяснил, что не будет показываться сообщение о выполнении, но сдается мне - это просто стечение обстоятельств.
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 31 май 2023, 17:38
tehnos
"Всё просто", но никто не предложил рабочий кусок кода.
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 31 май 2023, 18:04
alexinc
Код: Выделить всё
$process_id = 26;
$process_query = db_query("SELECT * FROM app_ext_processes WHERE id =".$process_id,false); // получаем данные из таблицы процессов.
if ($process=db_fetch_array($process_query)) {
//получаем нужный id записи, который используется в процессе. Обзовем его $item_id. Возможно, придется получать список.
$processes = new processes($process['entities_id']);
$processes->items_id = $item_id;
$processes->run($process, false, true);
}
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 03 июн 2023, 06:28
support
Для версии 3.4 добавил метод run_by_id
Re: Автоматизация - вызов процесса автоматизации.
Добавлено: 05 июн 2023, 10:35
tehnos
Благодарю!