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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.06.2015, 17:11   #1  
Blog bot is offline
Blog bot
Участник
 
19,714 / 665 (62) +++++++
Регистрация: 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,311 / 1339 (51) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Рекомендую посмотреть тем кто уже использует AIF в AX 2012, но не знаком с change tracking
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.06.2015, 09:46   #3  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,311 / 1339 (51) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Если кто-то решит использовать change tracking на инстансе с несколькими partitions \ legal entities, сразу надо править
\Classes\AifChangeTracking\createJoinClausesAndPredicates
\Classes\AifSqlCtChangeTracking\createRootTableJoin
на предмет потерянных джойнов по Partition и DataAreaId полям. Иначе гарантированы тормоза и местами некорректные результаты выборки в getChangedKeys()
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Logger (5).
Старый 23.06.2015, 10:15   #4  
Ivanhoe is offline
Ivanhoe
КОРУС Консалтинг
Аватар для Ivanhoe
КОРУС Консалтинг
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
3,574 / 1740 (66) ++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А кто-нить копал уже внутрь? Работа с SQL в ядре или доступна для просмотра в X++? Например, на 2009 или 4.0 можно портировать?
__________________
Ivanhoe as is..
Старый 23.06.2015, 10:22   #5  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
1,970 / 876 (33) +++++++
Регистрация: 03.04.2002
Адрес: Australia
Цитата:
Сообщение от 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, 10:47   #6  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
1,970 / 876 (33) +++++++
Регистрация: 03.04.2002
Адрес: Australia
P.S. Пересмотрел, кажись понял. Т.е. из скрипта нафигачить триггеров, на все таблицы входящие в query рассматривается более кошерным подходом по сравнению со скриптом, который пройдется по той же query и пропишет строчки в insert/update методы.
Виталию спасибо за разъяснения. Хоть и считаю это бредовым нововедением, но теперь хотя бы знаю в чем оно заключается.
__________________
Isn't it nice when things just work?

Последний раз редактировалось macklakov; 23.06.2015 в 10:49.
Старый 23.06.2015, 11:08   #7  
Ivanhoe is offline
Ivanhoe
КОРУС Консалтинг
Аватар для Ivanhoe
КОРУС Консалтинг
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
3,574 / 1740 (66) ++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Еще интеграция с POS начиная с R3 переведена на SQL change tracking...
__________________
Ivanhoe as is..
Старый 23.06.2015, 11:18   #8  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 44 (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).
Старый 23.06.2015, 11:19   #9  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,311 / 1339 (51) ++++++++
Регистрация: 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:25   #10  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,311 / 1339 (51) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
А кто-нить копал уже внутрь? Работа с SQL в ядре или доступна для просмотра в X++? Например, на 2009 или 4.0 можно портировать?
Насколько я вижу - ничего ядро-специфичного не используется
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.06.2015, 11:37   #11  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 44 (2) +++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от Vadik Посмотреть сообщение
Насколько я вижу - ничего ядро-специфичного не используется
Есть специфика 2012 - временная таблица TempDB используется для получения истории изменений для выбранной таблицы. Заполняется прямым запросом на SQL используя команды Change Tracking, а вот данные потом уже обрабатываются в AX.
За это сообщение автора поблагодарили: Vadik (1).
Старый 23.06.2015, 11:37   #12  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
358 / 331 (12) ++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Можно еще посмотреть класс RetailCDXDataSync он тоже использует Change Tracking для синхронизации AX базы с POS базой. Пришел как раз на смену кода в insert(), update(), delete().
О чем уже писал выше Ivanhoe

Последний раз редактировалось skuull; 23.06.2015 в 11:40.
Старый 23.06.2015, 11:40   #13  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
1,970 / 876 (33) +++++++
Регистрация: 03.04.2002
Адрес: Australia
Цитата:
Сообщение от 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   #14  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,311 / 1339 (51) ++++++++
Регистрация: 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   #15  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 44 (2) +++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от macklakov Посмотреть сообщение
Если я пользую DatabaseLog, то я ожидаю версионирования полноценного. А CT этого не дает.
Дает. Фиксируются все изменения, причем каждое изменение порождает новую версию в CT. Т.е. ровно те же возможности, что дает DatabaseLog. Особенность в том, что версии на SQL хранятся только ограниченное время (2 дня по умолчанию) и нужно периодически эти изменения считывать, чтобы они не потерялись.

Цитата:
Сообщение от macklakov Посмотреть сообщение
Но я ведь правильно понимаю, что это происходит не само по себе, а специально обученный скрипт должен пройтись, проставить свойства на таблицах и прописать триггеры?
В чем проблема написать специально обученный скрипт(ы) один раз и использовать его для любой таблицы (что собственно в 2012 и сделано)?
Старый 23.06.2015, 12:33   #16  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
1,970 / 876 (33) +++++++
Регистрация: 03.04.2002
Адрес: Australia
Цитата:
Сообщение от Vadik Посмотреть сообщение
Можно узнать - зачем (в сценариях интеграции) ?
Пытаюсь понять применимость нового, для меня, инструмента.
Цитата:
Сообщение от Vadik Посмотреть сообщение
Не само по себе. У меня на все про все один класс с 25 строками в main, из них примерно половина - вывод отладочной информации. Чтобы включить change tracking для нового документа AIF, надо в одной строке поменять имя используемого Query
Замечательно. Я в Dev настроил change tracking на 2 разные Query, обе содержат MainAccounts. Написал инструкции по деплойменту в других приложениях. В UAT, юзера сообразили, что одна из query надо убрать, т.к. эти данные расстраивают смежную систему и их надо как-то по другому выдавать. Мне теперь надо убрать изменения произведенные скриптом для этой query на sql сервере. И потом накатить эти изменения на sysTest, SIT и UAT. Есть для этого другой специально обученный скрипт? И что произойдет с настройками для другой Query, которая тоже включает MainAccounts?
Цитата:
Сообщение от Vadik Посмотреть сообщение
Нормально (штатно) - на уровне настроек безопасности порта и привилегий на сервисные операции
Ну т.е. аксовские права, особенно RLS не работают?
Цитата:
Сообщение от Vadik Посмотреть сообщение
Document filters можно не использовать, но любой новый работающий функционал это как минимум не плохо
Они ведь ресурсы жрут, если правильно понимаю?
__________________
Isn't it nice when things just work?
Старый 23.06.2015, 12:38   #17  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
1,970 / 876 (33) +++++++
Регистрация: 03.04.2002
Адрес: Australia
Цитата:
Сообщение от makbeth Посмотреть сообщение
Дает. Фиксируются все изменения, причем каждое изменение порождает новую версию в CT. Т.е. ровно те же возможности, что дает DatabaseLog. Особенность в том, что версии на SQL хранятся только ограниченное время (2 дня по умолчанию) и нужно периодически эти изменения считывать, чтобы они не потерялись.
А как посомотреть старые и новые значения поля в таблице?

Цитата:
Сообщение от makbeth Посмотреть сообщение
В чем проблема написать специально обученный скрипт(ы) один раз и использовать его для любой таблицы (что собственно в 2012 и сделано)?
Управление модификациями. Как мне перенести то, что этот скрипт нагенерил? Как откатить? Как контролировать версии?
__________________
Isn't it nice when things just work?
Старый 23.06.2015, 12:50   #18  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 44 (2) +++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от macklakov Посмотреть сообщение
А как посомотреть старые и новые значения поля в таблице?
Это как раз умеет Change Data Capture. В как я уже писал, в Aif реализованы зачатки его поддержки. Видимо еще нигде не пригодился.

Цитата:
Сообщение от macklakov Посмотреть сообщение
Управление модификациями. Как мне перенести то, что этот скрипт нагенерил? Как откатить? Как контролировать версии?
Зачем переносить то, что нагенерил скрипт? Правильнее перенести скрипт в новую среду и дать ему нагенерить то что нужно.
Откат делается парным скриптом. По моему, это очевидно, когда функционал позволяет включать/отключать свои возможности для определенных объектов системы.
Старый 23.06.2015, 13:11   #19  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,311 / 1339 (51) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от macklakov Посмотреть сообщение
А как посомотреть старые и новые значения поля в таблице?
Ну зачем в сценариях интеграции передавать "старое значение поля" ? А что внешняя система будет делать с моим "старым" значением из AX если ее (системы) "старое" (текущее) отличается ? А какое именно "старое" значение поля передавать (и откуда его брать) в случае если у меня внешних систем несколько - отслеживать еще и версию для каждой внешней системы отдельно в AX ? Нет, я понимаю, это круто, но - ЗАЧЕМ ?
Цитата:
Управление модификациями. Как мне перенести то, что этот скрипт нагенерил? Как откатить?
Эти модификации не нужно переносить потому что это не модификации как таковые а вспомогательные объекты \ настройки которые AIF сам создаст при разворачивании \ настройке сервиса в новой среде
Цитата:
Как контролировать версии?
У этих вспомогательных объектов сгенерированных автоматически версионность как таковая отсутствует, потому что генерятся они одинаковыми
Из того, что реально не хватает - это хоть какой-то инструментарий в виде пары-тройки форм для управления \ просмотра того что уже настроено (хотя репозитарий со списком таблиц со всключенным Change tracking и созданных триггеров присутствует)
__________________
-ТСЯ или -ТЬСЯ ?
Старый 23.06.2015, 13:23   #20  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 44 (2) +++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от Vadik Посмотреть сообщение
Из того, что реально не хватает - это хоть какой-то инструментарий в виде пары-тройки форм для управления \ просмотра того что уже настроено (хотя репозитарий со списком таблиц со всключенным Change tracking и созданных триггеров присутствует)
Так там, собственно, кроме указанных табличек создается только одна хп, которая при вызове включает CT для указанных в репозитарии табличек, и отключает для тех, которых в списке нет. И... все. Остальное делается прямыми запросами, формируемыми в коде классов AifChangeTracking*.
Теги
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, время: 14:26.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.