Перейти к содержимому


Моделирование срабатывания вычислений


Сообщений в теме: 5

#1 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 23 Сентябрь 2013 - 20:43

Задача проста, есть импорт через крон. В таблице импорта есть вычисление, которое согласно некоторым условиям добавляет, обновляет записи в разных таблицах(data_insert, data_update, data_delete). Хочу видеть в какой последовательности и сколько раз запускалось то или иное вычисление, почему запустилось. То есть нужно логировать ход выполнения + сохранять некую контекстную инфу типа айди поля, тип инвента. Как это можно проследить? Есть уже готовые механизмы? Или куда копать?

#2 Гость_Roman_*

  • Гости

Отправлено 24 Сентябрь 2013 - 11:06

Боюсь, что тут сразу что-то придумать нельзя. Могу только сказать, что есть массив $event, который формируется перед срабатыванием события, он же и меняется вычислениями. А само событие обрабатывается функцией popup_event() из include/functions1.php .

#3 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 24 Октябрь 2013 - 15:09

И тогда наводящий вопрос. До изм. модели вычислений, поле вычисление на изм. поле не срабатывло при создании. То есть я мог просто добавить выч. на изм. поля (например, если поле стало пустым, тогда сделать то-то). А как теперь это делать, ведь теперь вычисл. на изм. запускается при создании, даже если поле пустое (пустое тоже значение своего рода) и такая проверка уже не логична?

if (!empty($line['Руководитель'])) {
...
} else {
...
}
Конкретная ситуация. Две таблицы: т1, т2. Поле менеджер из т1. Если это поле не пустое, то в т2 должна быть добавлена строка. Связь один к одному. Если поле пустое, строка из т2 находится и удаляется.

Сообщение отредактировал wondertalik: 24 Октябрь 2013 - 15:12


#4 Гость_Roman_*

  • Гости

Отправлено 24 Октябрь 2013 - 15:33

Можно использовать значения массива $event
if (!$event['is_new_line'])
  { // Строка не новая, поле реально менялось, запускаем вычисление
    ....
  }
Или так
if ($event['changed'][555]['old'] !== false)
  { // Для полей в новой строке старое значение всегда false
    ...
  }


#5 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 25 Октябрь 2013 - 15:16

Просмотр сообщенияRoman (24 Октябрь 2013 - 15:33) писал:

Можно использовать значения массива $event
if (!$event['is_new_line'])
  { // Строка не новая, поле реально менялось, запускаем вычисление
	....
  }
Или так
if ($event['changed'][555]['old'] !== false)
  { // Для полей в новой строке старое значение всегда false
	...
  }
Если я правильно понял вычисление будет отрабатывать только при изм. кода. А что если мне нужно чтобы оно отрабатывало как при создании строки(если в поле установлено значение), так и при изменении (дублирование кода неприемлемо)?

#6 Гость_Roman_*

  • Гости

Отправлено 25 Октябрь 2013 - 15:20

Тогда можно просто проверять значение поля
if ($line['Имя поля']) // Для текстовых полей, списков, чисел, полей связи, пользователей и групп
if ($line['Имя поля'] != "0000-00-00 00:00:00") // Для дат






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных