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

Все вопросы/проблемы по установке и использовании.
nruslan2
Сообщения: 2417
Зарегистрирован: 14 окт 2020, 09:13
Имя: Ruslan
Откуда: Moscow
Контактная информация:

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

Сообщение nruslan2 »

ну все верно, у вас стоит автоматизация по созданию записи, а в коде 99% вы не предусмотрели какой нибудь тригер для срабатывания кода, поэтому создавая запись у вас код бесконечно и создает записи, так как при создании записи у вас запускается процесс при добавлении записи и так по кругу!)
Romiros
Сообщения: 87
Зарегистрирован: 02 ноя 2022, 05:15
Имя: Роман Сысоев
Откуда: Иркутск
Организация: ООО "ДНС Ритейл"

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

Сообщение 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 . "');");
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 770
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

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

Сообщение Fait »

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

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

Если возникают сложности с реализацией данного кода, обращайтесь, я смогу написать для вас этот код полностью.
Не тестовый, а уже рабочий боевой.
Аватара пользователя
Antonyous99
Сообщения: 580
Зарегистрирован: 18 авг 2019, 09:22
Имя: Антон Владимирович
Откуда: Санкт-Петербург
Организация: ООО "РИКОМ-Сервис"
Контактная информация:

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

Сообщение Antonyous99 »

За просто зацикливание происходит, поэтому и создается бесконечно много записей.
В автоматизацию (или код) на создание записи надо поставить фильтр, а в источник этой автоматизации (или, что инициирует запуск кода) записывать в любое поле "флаг", который и не допустит повторное срабатывание, фильтр не даст.
Вот и все!
ПУЛЬТ УПРАВЛЕНИЯ БИЗНЕСОМ
ERP/CRM "под ключ"
Romiros
Сообщения: 87
Зарегистрирован: 02 ноя 2022, 05:15
Имя: Роман Сысоев
Откуда: Иркутск
Организация: ООО "ДНС Ритейл"

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

Сообщение Romiros »

Antonyous99 писал(а): 07 фев 2024, 21:17 За просто зацикливание происходит, поэтому и создается бесконечно много записей.
В автоматизацию (или код) на создание записи надо поставить фильтр, а в источник этой автоматизации (или, что инициирует запуск кода) записывать в любое поле "флаг", который и не допустит повторное срабатывание, фильтр не даст.
Вот и все!
А не будет данная автоматизация так же в фоне бесконечно выполняться на проверку данного условия, пока по таймауту не выпадет на проверку флага, понятно что добавляться записи не будут но автоматизация то всё равно будет работать.
Не понятна до конца механика, почему так происходит с внутренними функциями?
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 770
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

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

Сообщение Fait »

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

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

Сообщение alex_mx »

Проблема циклов решена же уже:
viewtopic.php?p=31030#p31030
Когда items::insert начнет возвращать id вставленной записи, будет нам счастье.
nruslan2
Сообщения: 2417
Зарегистрирован: 14 окт 2020, 09:13
Имя: Ruslan
Откуда: Moscow
Контактная информация:

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

Сообщение nruslan2 »

тут речь о том, что у человека стоит автоматизация на создании записи, в которой стоит код создания новой записи))
по факту топикстартер решил проблему, ему только еще в одну таблицу бы желательно писать данные и все (и то при условии что в записях есть выпадающие списки) и никаких доп полей\костылей не надо!
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 770
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

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

Сообщение Fait »

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

И в итоге, при создании записи будет происходить вот что:
1) Проверяем родителя у записи. Его сначала нет, поэтому создаём 5 записей с указанием родителя.
2) Происходит проверка 1 созданной записи на родителя. Так как он есть, скрипт пропускает создание 5 записей.
3) Происходит проверка 2 созданной записи. Родитель указан, идём дальше.
4) Происходит проверка 3 созданной записи. Родитель указан, идём дальше.
5) Происходит проверка 4 созданной записи. Родитель указан, идём дальше.
6) Происходит проверка 5 созданной записи. Родитель указан, идём дальше.
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 770
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

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

Сообщение Fait »

То есть получится примерно так:

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

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