Добрый день, коллеги.
Для интеграции Террасофт CRM с внутренней учетной системой мне нужно понимать изменилась ли запись в таблице. Поля CreatedOn и ModifiedOn не очень подходят, потому что часть логики реализована через хранимые процедуры и эти поля могут не содержать актуальной информации.
В качестве сервер БД используется MS SQL Server, поэтому я решил попробовать добавить в таблицу поле типа timestamp, которое обновляется при любом изменении записи. Но, естественно, столкнулся с проблемами:
1. При попытке добавления поля в эту таблицу и сохранение изменений в БД я получаю ошибку "cannot update timestamp column". Я не знаю, как Террасофт обновляет таблицы в БД на основании конфигурации, но выходит, что система пытается обновить поле, которое в конфигурации не описано.
2. Если выгрузить сервис такой таблицы в файл, а потом попытаться загрузить обратно, то получаю ошибку "Duplicate hash list entry ", где это идентификатор сервиса в конфигурации.
Очень похоже на то, что избранный мной способ решения задачи не сработает и нужно искать что-то другое. Существует ли другой способ однозначного детектирования изменения записи?
Нравится
Здравствуйте, Riptor.
Насколько я понял, Вы добавили поле напрямую через БД.
При сохранении сервиса таблицы Terrasoft происходит пересохранение структуры таблицы в БД в соответствии со структурой сервиса Terrasoft.
Прошу уточнить, почему бы просто не добавить новое поле "Дата/время" через конфигурацию и писать данные в него, к примеру, триггером?
Добрый день, Андрей.
"Безродный Андрей" написал:почему бы просто не добавить новое поле "Дата/время" через конфигурацию и писать данные в него, к примеру, триггером?
Скорее всего так и придется сделать. Думал, что проще поле добавить в 3 десятка таблиц, чем триггеры. С другой стороны интересно, почему платформа Террасофт поля CreatedOn и ModifiedOn не заполняет в триггере. Производительность?
Riptor
Да, дело в производительности.
В текущей реализации поля изменяются в ядре.
В случае изменения нескольких полей будет формироваться один запрос, а триггером - несколько.