AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.06.2015, 17:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,574 / 848 (80) +++++++
Регистрация: 28.10.2006
littleax: Change Tracking
Источник: http://littleax.blogspot.com/2015/06...-tracking.html
==============

SMART TALKS

Dynamics AX

Change Tracking в Dynamics AX 2012



Преллагаю небольшой видео блог по Change Tracking в Dynamics AX 2012. Основные принципы работы с отслеживанием изменений, возможности, рекомендации.

http://smart-talks.org/event/smart-talks-2/





Источник: http://littleax.blogspot.com/2015/06...-tracking.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
За это сообщение автора поблагодарили: Logger (3).
Старый 23.06.2015, 08:45   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Рекомендую посмотреть тем кто уже использует AIF в AX 2012, но не знаком с change tracking
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.06.2015, 09:46   #3  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Если кто-то решит использовать change tracking на инстансе с несколькими partitions \ legal entities, сразу надо править
\Classes\AifChangeTracking\createJoinClausesAndPredicates
\Classes\AifSqlCtChangeTracking\createRootTableJoin
на предмет потерянных джойнов по Partition и DataAreaId полям. Иначе гарантированы тормоза и местами некорректные результаты выборки в getChangedKeys()
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Logger (5).
Старый 24.06.2015, 16:29   #4  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от Vadik Посмотреть сообщение
Если кто-то решит использовать change tracking на инстансе с несколькими ...
Пару дополнительных граблей на которые успел натолкнуться:
  • Если используется R3 Retail, то стандартные AIFCT классы могу отключить CT на всех таблицах, которые синхронизируются с POS.
  • АХ не умеет синхронизировать таблицу в случае изменения индекса PK (SQL требует отключения CT вручную).
  • AX не умеет включать CT в случае если при синхронизации таблицу надо пересоздать по каким либо причинам в SQL (DROP Table + Create Table в SQL теряет CT). Наверное тригеры при этом тоже летят нафиг ...

Из позитива - быстро, надежно, не надо думать кто и где поменял, добавил или удалил данные, т.к. CT отслаживает все.
То что МС двигается (меееедленно) в сторону использования существующих технологий это очень даже хорошо. SQL должен такие дела отслеживать, а не AX. CT существует с 2008 года, почему не встроили его в AX раньше непонятно....

Насколька я знаю, на данный момент CT используется в -
  • POS R3
  • MDM
  • AIF
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
За это сообщение автора поблагодарили: mazzy (2), macklakov (3), Vadik (1), Logger (1).
Старый 24.06.2015, 16:44   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Пару дополнительных граблей на которые успел натолкнуться
Спасибо
Цитата:
CT существует с 2008 года, почему не встроили его в AX раньше непонятно...
Как вариант - потому что для AX 2009 была заявлена совместимость с SQL Server 2005
__________________
-ТСЯ или -ТЬСЯ ?
Старый 25.06.2015, 09:53   #6  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
ПЕсли используется R3 Retail, то стандартные AIFCT классы могу отключить CT на всех таблицах, которые синхронизируются с POS.
Здесь классическое "правая рука не знает что делает левая". Дело в том, что AIFCT не включает/выключает CT для какой-то отдельной нужной таблицы, а фактически перебирает все таблицы базы на предмет включен ли CT для каждой из них. И если эта таблица отсутствует в его, AIF, списке разрешенных таблиц CT, но CT для нее включен, то он его отключает. И наоборот.
Очевидно, для POS реализован отдельный механизм включения CT, поэтому AIF про таблицы для POS ничего не знает и в итоге происходит такой вот сюрприз.
Видимо, над AIF и POS работали разные команды, в итоге имеем то что имеем
А вообще, это повод запостить багу в MS, ибо на продакшене может вылезти неприятный такой "ой"...
Старый 25.06.2015, 10:03   #7  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,220 / 960 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от makbeth Посмотреть сообщение
Здесь классическое "правая рука не знает что делает левая"
Хм... Так для чего же тупые датчане в AX всю логику перенесли в AOT и использовали богопротивные табличные методы вместо таких привычных триггеров?
__________________
Isn't it nice when things just work?
Старый 25.06.2015, 11:46   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от makbeth Посмотреть сообщение
для POS реализован отдельный механизм включения CT, поэтому AIF про таблицы для POS ничего не знает и в итоге происходит такой вот сюрприз.

Видимо, над AIF и POS работали разные команды, в итоге имеем то что имеем
А вообще, это повод запостить багу в MS, ибо на продакшене может вылезти неприятный такой "ой"...
угу. они знают. но запосить все равно стоит.

разные команды... не то слово! блин...
Старый 25.06.2015, 11:44   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
CT существует с 2008 года, почему не встроили его в AX раньше непонятно....
решения, которые сейчас используют Change Tracking изначально появились раньше 2008 года. как партнерские решения.

пока их купили, пока встроили в аксапту, пока ужаснулись и пока таки решили что надо что-то делать... наоборот, очень быстро
Старый 23.06.2015, 10:22   #10  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,220 / 960 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Vadik Посмотреть сообщение
Рекомендую посмотреть тем кто уже использует AIF в AX 2012, но не знаком с change tracking
Спасибо конечно, но я так и не понял зачем эта приблуда нужна. Такое ощущение, что все эти пляски с бубнами и жонглирование топорами ради того чтобы иммитировать changedDate.
Но очень полезно знать о ее существовании, чтобы знать где еще стоит рыть, когда SQL сервер неожиданно ляжет.
__________________
Isn't it nice when things just work?

Последний раз редактировалось macklakov; 23.06.2015 в 10:31.
За это сообщение автора поблагодарили: trud (1).
Старый 23.06.2015, 11:19   #11  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от macklakov Посмотреть сообщение
Спасибо конечно, но я так и не понял зачем эта приблуда нужна. Такое ощущение, что все эти пляски с бубнами и жонглирование топорами ради того чтобы иммитировать changedDate
Это ни разу не имитация, там плюшек, свистелок и перделок по сравнению с "решениями на коленке" - вагон и маленькая тележка если вдуматься
  • все изменения отслеживаются на уровне SQL Server-а, т.е. железобетонно, никаких skipDatabaseLog и пр.
  • если у нас сущность многоуровневая (см. к примеру клиентов\поставщиков с их адресами и контактами), не надо везде пропихивать код для отслеживания изменений на нижних уровнях или собирать эти изменения по всем уровням. Пример: клиенту добавился номер факса в GAB, и весь клиент теперь виден как измененная сущность. Удобно, нет ?
  • очень удобно когда подписчиков на изменения много. Вернее, нам вообще фиолетово сколько их, этих подписчиков. Мы просто выставили наружу порт и объявляем в течение какого максимального периода в нем видны измененные данные (допусти, две недели). А подписчики уже сами решают как забирать эти изменения. Допустим, утягивать изменения за последний час каждый час или изменения за неделю каждый день. Нам - все равно. Мы не пропихиваем свои изменения каждому подписчику, мы не отслеживаем доставку каждого изменения отдельным сообщением, мы не должны заботиться о доставке каждого сообщения каждому подписчику и правильном порядке их доставки. Подключение нового подписчика происходит абсолютно прозрачно
  • качественно реализована обработка массивных изменений через paging. При запросе к системе в которой может ждать до нескольких десятков тысяч измененных сущностей (реальный пример) я могу "попросить" getChangedKeys() выдавать результат порциями по 1000 записей, обрабатывать ее и запрашивать следующую. Всякого рода пляски с бубном вокруг настроек размеров буферов WCF на сервере\клиенте\прокси отсутствуют как класс
  • при включении change tracking начинают работать Document filters (какая связь между ними - не спрашивайте, не знаю, скорее всего "так получилось"). Пример - отдавать внешней системе только определенные группы клиентов или отдавать курсы только определенного типа для USD. Возможности по настройке фильтров - те же что и у стандартного Query в AX.
Удобно, нет ? Да, документация и инструментарий по настройке к сожалению желают желать лучшего, но функционал сам по себе рулит
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Ivanhoe (5).
Старый 23.06.2015, 11:40   #12  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,220 / 960 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Vadik Посмотреть сообщение
[*]все изменения отслеживаются на уровне SQL Server-а, т.е. железобетонно, никаких skipDatabaseLog и пр.
Если я пользую DatabaseLog, то я ожидаю версионирования полноценного. А CT этого не дает.
Цитата:
Сообщение от Vadik Посмотреть сообщение
[*]если у нас сущность многоуровневая (см. к примеру клиентов\поставщиков с их адресами и контактами), не надо везде пропихивать код для отслеживания изменений на нижних уровнях или собирать эти изменения по всем уровням. Пример: клиенту добавился номер факса в GAB, и весь клиент теперь виден как измененная сущность. Удобно, нет ?
Но я ведь правильно понимаю, что это происходит не само по себе, а специально обученный скрипт должен пройтись, проставить свойства на таблицах и прописать триггеры?
Цитата:
Сообщение от Vadik Посмотреть сообщение
[*]очень удобно когда подписчиков на изменения много. Вернее, нам вообще фиолетово сколько их, этих подписчиков. Мы просто выставили наружу порт и объявляем в течение какого максимального периода в нем видны измененные данные (допусти, две недели). А подписчики уже сами решают как забирать эти изменения. Допустим, утягивать изменения за последний час каждый час или изменения за неделю каждый день. Нам - все равно. Мы не пропихиваем свои изменения каждому подписчику, мы не отслеживаем доставку каждого изменения отдельным сообщением, мы не должны заботиться о доставке каждого сообщения каждому подписчику и правильном порядке их доставки. Подключение нового подписчика происходит абсолютно прозрачно
А как у нас с правами, компаниями, партициями?
Цитата:
Сообщение от Vadik Посмотреть сообщение
[*]при включении change tracking начинают работать Document filters (какая связь между ними - не спрашивайте, не знаю, скорее всего "так получилось"). Пример - отдавать внешней системе только определенные группы клиентов или отдавать курсы только определенного типа для USD. Возможности по настройке фильтров - те же что и у стандартного Query в AX.
Это хорошо или плохо?
__________________
Isn't it nice when things just work?
Старый 23.06.2015, 11:55   #13  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от macklakov Посмотреть сообщение
Если я пользую DatabaseLog, то я ожидаю версионирования полноценного. А CT этого не дает
Можно узнать - зачем (в сценариях интеграции) ? CT выдает недавно измененные сущности по состоянию "на сейчас". Как мы к этому состоянию пришли, сколько было промежуточных версий, какова их хронология - а какая собственно разница ? При "правильном" накатывании всех изменений я в лучшем случае прихожу к состоянию "на сейчас", в неидеальном сценарии - к одному из промежуточных (не факт что правильных). Из change tracking я получаю измененную сущность в актуальном состоянии "на сейчас" в одну итерацию либо не получаю ее вовсе (например, "лежит" канал)

Цитата:
Но я ведь правильно понимаю, что это происходит не само по себе, а специально обученный скрипт должен пройтись, проставить свойства на таблицах и прописать триггеры?
Не само по себе. У меня на все про все один класс с 25 строками в main, из них примерно половина - вывод отладочной информации. Чтобы включить change tracking для нового документа AIF, надо в одной строке поменять имя используемого Query

Цитата:
А как у нас с правами, компаниями, партициями?
Нормально (штатно) - на уровне настроек безопасности порта и привилегий на сервисные операции

Цитата:
при включении change tracking начинают работать Document filters
Цитата:
Это хорошо или плохо?
Document filters можно не использовать, но любой новый работающий функционал это как минимум не плохо
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.06.2015, 12:03   #14  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от macklakov Посмотреть сообщение
Если я пользую DatabaseLog, то я ожидаю версионирования полноценного. А CT этого не дает.
Дает. Фиксируются все изменения, причем каждое изменение порождает новую версию в CT. Т.е. ровно те же возможности, что дает DatabaseLog. Особенность в том, что версии на SQL хранятся только ограниченное время (2 дня по умолчанию) и нужно периодически эти изменения считывать, чтобы они не потерялись.

Цитата:
Сообщение от macklakov Посмотреть сообщение
Но я ведь правильно понимаю, что это происходит не само по себе, а специально обученный скрипт должен пройтись, проставить свойства на таблицах и прописать триггеры?
В чем проблема написать специально обученный скрипт(ы) один раз и использовать его для любой таблицы (что собственно в 2012 и сделано)?
Старый 25.06.2015, 11:40   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от macklakov Посмотреть сообщение
ради того чтобы иммитировать changedDate.
да, идея та же. реализация намного мощнее и лучше

Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Еще интеграция с POS начиная с R3 переведена на SQL change tracking...
угу. потому что...


Цитата:
Сообщение от Vadik Посмотреть сообщение
очень удобно когда подписчиков на изменения много.
помимо того, что Vadik сказал:
каждый подписчик получает свой набор изменений

предположим один подключается в изменениям раз в час, а другой подключается раз неделю. второй получит больший набор изменений как только подключится.

и да... это работает ОООООЧЕНЬ быстро по сравнению с аксаптовскими штатными вещами.
плюс масштабирование от SQL хорошее.
Старый 23.06.2015, 10:15   #16  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А кто-нить копал уже внутрь? Работа с SQL в ядре или доступна для просмотра в X++? Например, на 2009 или 4.0 можно портировать?
__________________
Ivanhoe as is..
Старый 23.06.2015, 11:25   #17  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
А кто-нить копал уже внутрь? Работа с SQL в ядре или доступна для просмотра в X++? Например, на 2009 или 4.0 можно портировать?
Насколько я вижу - ничего ядро-специфичного не используется
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.06.2015, 11:37   #18  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от Vadik Посмотреть сообщение
Насколько я вижу - ничего ядро-специфичного не используется
Есть специфика 2012 - временная таблица TempDB используется для получения истории изменений для выбранной таблицы. Заполняется прямым запросом на SQL используя команды Change Tracking, а вот данные потом уже обрабатываются в AX.
За это сообщение автора поблагодарили: Vadik (1).
Старый 23.06.2015, 10:47   #19  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,220 / 960 (37) +++++++
Регистрация: 03.04.2002
P.S. Пересмотрел, кажись понял. Т.е. из скрипта нафигачить триггеров, на все таблицы входящие в query рассматривается более кошерным подходом по сравнению со скриптом, который пройдется по той же query и пропишет строчки в insert/update методы.
Виталию спасибо за разъяснения. Хоть и считаю это бредовым нововедением, но теперь хотя бы знаю в чем оно заключается.
__________________
Isn't it nice when things just work?

Последний раз редактировалось macklakov; 23.06.2015 в 10:49.
Старый 23.06.2015, 11:18   #20  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от macklakov Посмотреть сообщение
P.S. Пересмотрел, кажись понял. Т.е. из скрипта нафигачить триггеров, на все таблицы входящие в query рассматривается более кошерным подходом по сравнению со скриптом, который пройдется по той же query и пропишет строчки в insert/update методы.
На самом деле триггеры в AIFCT вешаются для того, чтобы при изменениях данных в приджойненных таблицах "потрогать" родительскую табличку. Например, если CT настроен на заголовок сложного документа, то при изменении его строк заголовок также поменяет свою версию в change tracking'е, попав таким образом в историю изменений, хотя по факту в самой таблице заголовка изменений не было. В остальном же - вполне годный функционал для отслеживания изменений, основанный на встроенном функционале SQL Server.
Кстати говоря, сейчас в 2012 реализована поддержка lite-версии функционала SQL - Change Tracking, который позволяет фиксировать сам факт того, что в таблице что-то изменилось. Есть еще более продвинутый (и более тяжеловесный) Change Data Capture, который позволяет также узнать какие произошли изменения с данными в таблицах. Задел под это в 2012 в некоторых местах есть в виде throw заглушек.
За это сообщение автора поблагодарили: Vadik (1), Ivanhoe (3).
Теги
aif, ax2012, change tracking, mdm

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: How to perform a data center change (change of the physical location) where a SQL server 2008 R 2 cluster installation and MS Dynamics AX 4.0 is involved? Blog bot DAX Blogs 0 21.06.2014 19:19
emeadaxsupport: Purchase order inventory transactions and active change management Blog bot DAX Blogs 0 15.04.2014 20:12
doens.be: Change the language at runtime Blog bot DAX Blogs 0 30.11.2011 10:11
Khue Trinh: AX 2009 Quality Management - Quality Control Blog bot DAX Blogs 1 04.07.2008 16:01

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:44.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.