Как я могу определить, изменилась ли строка? - PullRequest
0 голосов
/ 11 декабря 2018

Я создаю хранилище данных для клиента, где одним из источников данных является база данных Dynamics AX.Для данной таблицы AX мне нужно определить, была ли строка вставлена, изменена или удалена, чтобы ее можно было вставить, обновить или удалить в DW.

Что касается обнаружения строки, которая была изменена,в большинстве таблиц AX, которые я мог бы использовать для этой цели, два столбца - ModifiedDateTime и RecVersion.У меня есть два вопроса, связанных с этими столбцами:

1) Обновляется ли столбец ModifiedDateTime при каждом обновлении строки?Если да, обновляется ли это значение, даже если кто-то обновляет строку непосредственно в таблице, вне приложения AX (например, из такого инструмента, как SSMS)?

2) Те же вопросы, что и выше для RecVersion.Кроме того, является ли число глобально уникальным для всей базы данных или просто уникальным для таблицы?

Есть ли другая альтернатива, о которой я не знаю, делать то, что я хочу делать?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Некоторые части AX 2012 используют отслеживание изменений SQL Server под капотом (например, AIF ).Измените записи отслеживания также и удаленные записи, которые не могут быть предоставлены ни полями ModifiedDateTime, ни RecVersion.

0 голосов
/ 11 декабря 2018

Вы хотите использовать поля RecId и RecVersion, которые доступны во всех таблицах бизнес-данных AX 2012. RecId - это уникальное значение для каждой записи таблицы .RecVersion равно 1 после создания записи и заменяется на любое число, отличное от 1, при каждом изменении записи.

ModifiedDateTime не является хорошим выбором, поскольку оно доступно не во всех таблицах.

В связи с вашим вопросом, обновляется ли одно из этих полей, когда кто-то изменяет данные непосредственно в бизнес-базе данных AX: ответ отрицательный, и это одна из причин, по которой вам абсолютно никогда не следует делать такие вещи.Честно говоря, я видел сбой нескольких клиентов, которые сделали это вопреки четким рекомендациям их партнеров по внедрению.Dynamics AX предлагает несколько вариантов интеграции данных из других систем, их использования и не пытайтесь изобретать свои собственные.

Относительно вашего вопроса, если RecVersion глобально уникален: Нет. Вы можете использовать комбинацию TableId и RecId для уникальной идентификации записи в бизнес-базе данных AX.

Как я уже упоминал в своем ответе на ваш вопрос Как получить местоположение строки в dbo.CUSTTRANS? , AX поставляется с витриной данных, а также имеет некоторую логику о том, как обновлять ее на основе изменений в бизнес-данных.Я не знаком с деталями этих обновлений, но, возможно, стоит изучить их, чтобы узнать, можете ли вы использовать их для своих целей.

...