Автоматизация - вызов процесса автоматизации.
Re: Автоматизация - вызов процесса автоматизации.
Вот только что понадобилось запустить автоматизацию из автоматизации - пошёл на форум, а тут такое
Всё же не совсем понятно... Как например запустить автоматизацию #100 из "Выполнить PHP скрипт"?
Всё же не совсем понятно... Как например запустить автоматизацию #100 из "Выполнить PHP скрипт"?
-
- Сообщения: 393
- Зарегистрирован: 03 мар 2022, 21:40
- Имя: Alex
- Откуда: Россия
- Контактная информация:
Re: Автоматизация - вызов процесса автоматизации.
Пока подсказать не могу до конца. Борюсь. По всем признакам должен работать, но не работает. Пока не ясно, почему. С кнопки работает в списке записи, а вот с запуска из автоматизации, нет. Причем, видно в date_updated - обновление происходит. Не понятно.
Re: Автоматизация - вызов процесса автоматизации.
Держите, кому надо. Работает.
Прошу Сергея поправить, если видны очевидные косяки или присутствует лишний код.
Прошу Сергея поправить, если видны очевидные косяки или присутствует лишний код.
Код: Выделить всё
/* Запуск автоматизации №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);
}
}
Последний раз редактировалось tehnos 31 май 2023, 17:28, всего редактировалось 1 раз.
-
- Сообщения: 393
- Зарегистрирован: 03 мар 2022, 21:40
- Имя: Alex
- Откуда: Россия
- Контактная информация:
Re: Автоматизация - вызов процесса автоматизации.
Это ж прямо из cron вытащено. Нет?
Re: Автоматизация - вызов процесса автоматизации.
Да. Перенабрал в привычное для меня форматирование + было пару опечаток исправил.
У себя проверил на автоматизации выполняющейся для единичной записи - всё ок.
Если будет более компактное решение - сообщите.
У себя проверил на автоматизации выполняющейся для единичной записи - всё ок.
Если будет более компактное решение - сообщите.
-
- Сообщения: 393
- Зарегистрирован: 03 мар 2022, 21:40
- Имя: Alex
- Откуда: Россия
- Контактная информация:
Re: Автоматизация - вызов процесса автоматизации.
Ну на самом деле, как ребята подсказали выше - все достаточно просто.
$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)... опытным путем выяснил, что не будет показываться сообщение о выполнении, но сдается мне - это просто стечение обстоятельств.
$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: Автоматизация - вызов процесса автоматизации.
"Всё просто", но никто не предложил рабочий кусок кода.
-
- Сообщения: 393
- Зарегистрирован: 03 мар 2022, 21:40
- Имя: Alex
- Откуда: Россия
- Контактная информация:
Re: Автоматизация - вызов процесса автоматизации.
Код: Выделить всё
$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);
}