Страница 2 из 3

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 07 фев 2024, 08:47
nruslan2
ну все верно, у вас стоит автоматизация по созданию записи, а в коде 99% вы не предусмотрели какой нибудь тригер для срабатывания кода, поэтому создавая запись у вас код бесконечно и создает записи, так как при создании записи у вас запускается процесс при добавлении записи и так по кругу!)

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 07 фев 2024, 09:54
Romiros
Я решил данный кейс.

Кому интересно, я отказался от использования встроенных функций и сделал обычный SQL запрос INSERT INTO.

Код: Выделить всё

$item_id = [id]; //get current item ID
$vexa_id = [1617];
$entity_id = 78;
$created_by = 1;
$date_added = time();

$result = db_query("select field_1612 from app_entity_112 where parent_id={$vexa_id}");

// Проверяем успешность выполнения запроса SELECT
if ($result) {
    // Проходим по результату и создаем запросы INSERT
    while ($row = $result->fetch_assoc()) {
		db_query("INSERT INTO app_entity_78 (parent_id, field_1600, created_by, date_added) VALUES ('" . $item_id . "', '".$row['field_1612'] ."', '" . $created_by . "', '" . $date_added . "');");    
    }
}
  
//db_query("INSERT INTO app_entity_78 (parent_id, field_1600, //created_by, date_added) VALUES ('" . $item_id . "', 'Новая задача', //'" . $created_by . "', '" . $date_added . "');");
Получаем список из сущности, которую создали как справочник, для заказчика, чтобы он мог сам создавать нужные ему списки вех и задач.

Код: Выделить всё

$result = db_query("select field_1612 from app_entity_112 where parent_id={$vexa_id}");
Перебираем полученный список задач и создаем записи где id = parent_id

Код: Выделить всё

/ Проверяем успешность выполнения запроса SELECT
if ($result) {
    // Проходим по результату и создаем запросы INSERT
    while ($row = $result->fetch_assoc()) {
		db_query("INSERT INTO app_entity_78 (parent_id, field_1600, created_by, date_added) VALUES ('" . $item_id . "', '".$row['field_1612'] ."', '" . $created_by . "', '" . $date_added . "');");    
    }
}
  
//db_query("INSERT INTO app_entity_78 (parent_id, field_1600, //created_by, date_added) VALUES ('" . $item_id . "', 'Новая задача', //'" . $created_by . "', '" . $date_added . "');");

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 07 фев 2024, 12:50
Fait
Да, хорошо, что способ рабочий, но только insert into не всё учитывает. Например, для выпадающих списков всех видов нужно ещё добавлять записи не только в app_entity_78, но и в app_entity_78_values.

Поэтому всё-таки, во избежание проблем, лучше использовать items::insert().

Если возникают сложности с реализацией данного кода, обращайтесь, я смогу написать для вас этот код полностью.
Не тестовый, а уже рабочий боевой.

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 07 фев 2024, 21:17
Antonyous99
За просто зацикливание происходит, поэтому и создается бесконечно много записей.
В автоматизацию (или код) на создание записи надо поставить фильтр, а в источник этой автоматизации (или, что инициирует запуск кода) записывать в любое поле "флаг", который и не допустит повторное срабатывание, фильтр не даст.
Вот и все!

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 08 фев 2024, 04:20
Romiros
Antonyous99 писал(а): 07 фев 2024, 21:17 За просто зацикливание происходит, поэтому и создается бесконечно много записей.
В автоматизацию (или код) на создание записи надо поставить фильтр, а в источник этой автоматизации (или, что инициирует запуск кода) записывать в любое поле "флаг", который и не допустит повторное срабатывание, фильтр не даст.
Вот и все!
А не будет данная автоматизация так же в фоне бесконечно выполняться на проверку данного условия, пока по таймауту не выпадет на проверку флага, понятно что добавляться записи не будут но автоматизация то всё равно будет работать.
Не понятна до конца механика, почему так происходит с внутренними функциями?

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 08 фев 2024, 15:57
Fait
Romiros писал(а): 08 фев 2024, 04:20
Antonyous99 писал(а): 07 фев 2024, 21:17 За просто зацикливание происходит, поэтому и создается бесконечно много записей.
В автоматизацию (или код) на создание записи надо поставить фильтр, а в источник этой автоматизации (или, что инициирует запуск кода) записывать в любое поле "флаг", который и не допустит повторное срабатывание, фильтр не даст.
Вот и все!
А не будет данная автоматизация так же в фоне бесконечно выполняться на проверку данного условия, пока по таймауту не выпадет на проверку флага, понятно что добавляться записи не будут но автоматизация то всё равно будет работать.
Не понятна до конца механика, почему так происходит с внутренними функциями?
Да, проверка будет так же без конца проводиться...

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 08 фев 2024, 21:45
alex_mx
Проблема циклов решена же уже:
viewtopic.php?p=31030#p31030
Когда items::insert начнет возвращать id вставленной записи, будет нам счастье.

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 08 фев 2024, 22:16
nruslan2
тут речь о том, что у человека стоит автоматизация на создании записи, в которой стоит код создания новой записи))
по факту топикстартер решил проблему, ему только еще в одну таблицу бы желательно писать данные и все (и то при условии что в записях есть выпадающие списки) и никаких доп полей\костылей не надо!

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 09 фев 2024, 08:43
Fait
Я тут подумал, а что если на входе в скрипт проверять, есть ли родитель по дереву в созданной записи?
И, если его нет, то создавать 5 необходимых записей.
А если есть, то пропускать весь код.
Таким образом, проверка будет выполнена только 6 раз,что не сильно нагрузит систему.

И в итоге, при создании записи будет происходить вот что:
1) Проверяем родителя у записи. Его сначала нет, поэтому создаём 5 записей с указанием родителя.
2) Происходит проверка 1 созданной записи на родителя. Так как он есть, скрипт пропускает создание 5 записей.
3) Происходит проверка 2 созданной записи. Родитель указан, идём дальше.
4) Происходит проверка 3 созданной записи. Родитель указан, идём дальше.
5) Происходит проверка 4 созданной записи. Родитель указан, идём дальше.
6) Происходит проверка 5 созданной записи. Родитель указан, идём дальше.

Re: Выполнить php скрипт, после добавления записи в автоматизации

Добавлено: 09 фев 2024, 08:46
Fait
То есть получится примерно так:

Код: Выделить всё

$item_id = [id];
$parent = [parent_id];
if ($parent == 0) {
  //Тут коды вставки 5 записей
 }