|  22.06.2015, 17:11 | #1 | 
| Участник | 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 | 
| Модератор | 
			
			Рекомендую посмотреть тем кто уже использует AIF в AX 2012, но не знаком с change tracking
		 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | 
|  23.06.2015, 09:46 | #3 | 
| Модератор | 
			
			Если кто-то решит использовать change tracking на инстансе с несколькими partitions \ legal entities, сразу надо править \Classes\AifChangeTracking\createJoinClausesAndPredicates \Classes\AifSqlCtChangeTracking\createRootTableJoin на предмет потерянных джойнов по Partition и DataAreaId полям. Иначе гарантированы тормоза и местами некорректные результаты выборки в getChangedKeys() 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | |
| За это сообщение автора поблагодарили: Logger (5). | |
|  23.06.2015, 10:15 | #4 | 
| Участник | 
			
			А кто-нить копал уже внутрь? Работа с SQL в ядре или доступна для просмотра в X++? Например, на 2009 или 4.0 можно портировать?
		 
				__________________ Ivanhoe as is.. | 
|  | 
|  23.06.2015, 10:22 | #5 | 
| NavAx | Цитата: Но очень полезно знать о ее существовании, чтобы знать где еще стоит рыть, когда SQL сервер неожиданно ляжет. 
				__________________ Isn't it nice when things just work? Последний раз редактировалось macklakov; 23.06.2015 в 10:31. | 
|  | |
| За это сообщение автора поблагодарили: trud (1). | |
|  23.06.2015, 10:47 | #6 | 
| NavAx | 
			
			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 | 
| Участник | 
			
			Еще интеграция с POS начиная с R3 переведена на SQL change tracking...
		 
				__________________ Ivanhoe as is.. | 
|  | 
|  23.06.2015, 11:18 | #8 | 
| Участник | Цитата: Кстати говоря, сейчас в 2012 реализована поддержка lite-версии функционала SQL - Change Tracking, который позволяет фиксировать сам факт того, что в таблице что-то изменилось. Есть еще более продвинутый (и более тяжеловесный) Change Data Capture, который позволяет также узнать какие произошли изменения с данными в таблицах. Задел под это в 2012 в некоторых местах есть в виде throw заглушек. | 
|  | |
| За это сообщение автора поблагодарили: Vadik (1), Ivanhoe (3). | |
|  23.06.2015, 11:19 | #9 | 
| Модератор | Цитата: 
   
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | |
| За это сообщение автора поблагодарили: Ivanhoe (5). | |
|  23.06.2015, 11:25 | #10 | 
| Модератор | 
			
			Насколько я вижу - ничего ядро-специфичного не используется
		 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | 
|  23.06.2015, 11:37 | #11 | 
| Участник | 
			
			Есть специфика 2012 - временная таблица TempDB используется для получения истории изменений для выбранной таблицы. Заполняется прямым запросом на SQL используя команды Change Tracking, а вот данные потом уже обрабатываются в AX.
		 | 
|  | |
| За это сообщение автора поблагодарили: Vadik (1). | |
|  23.06.2015, 11:37 | #12 | 
| Участник | 
			
			Можно еще посмотреть класс RetailCDXDataSync он тоже использует  Change Tracking для синхронизации AX базы с POS базой. Пришел как раз на смену кода в insert(), update(), delete(). О чем уже писал выше Ivanhoe Последний раз редактировалось skuull; 23.06.2015 в 11:40. | 
|  | 
|  23.06.2015, 11:40 | #13 | 
| NavAx | Цитата: Цитата: 
		
			Сообщение от 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 | 
| Модератор | Цитата: Цитата: 
		
			Но я ведь правильно понимаю, что это происходит не само по себе, а специально обученный скрипт должен пройтись, проставить свойства на таблицах и прописать триггеры?
		
	 Цитата: 
		
			А как у нас с правами, компаниями, партициями?
		
	 Цитата: 
		
			при включении change tracking начинают работать Document filters
		
	 Цитата: 
		
			Это хорошо или плохо?
		
	 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | 
|  23.06.2015, 12:03 | #15 | 
| Участник | Цитата: В чем проблема написать специально обученный скрипт(ы) один раз и использовать его для любой таблицы (что собственно в 2012 и сделано)? | 
|  | 
|  23.06.2015, 12:33 | #16 | 
| NavAx | 
			
			Пытаюсь понять применимость нового, для меня, инструмента. Цитата: Цитата: Они ведь ресурсы жрут, если правильно понимаю? 
				__________________ Isn't it nice when things just work? | 
|  | 
|  23.06.2015, 12:38 | #17 | 
| NavAx | Цитата: 
		
			Сообщение от makbeth
			   Дает. Фиксируются все изменения, причем каждое изменение порождает новую версию в CT. Т.е. ровно те же возможности, что дает DatabaseLog. Особенность в том, что версии на SQL хранятся только ограниченное время (2 дня по умолчанию) и нужно периодически эти изменения считывать, чтобы они не потерялись. Управление модификациями. Как мне перенести то, что этот скрипт нагенерил? Как откатить? Как контролировать версии? 
				__________________ Isn't it nice when things just work? | 
|  | 
|  23.06.2015, 12:50 | #18 | 
| Участник | 
			
			Это как раз умеет Change Data Capture. В как я уже писал, в Aif реализованы зачатки его поддержки. Видимо еще нигде не пригодился. Цитата: Откат делается парным скриптом. По моему, это очевидно, когда функционал позволяет включать/отключать свои возможности для определенных объектов системы. | 
|  | 
|  23.06.2015, 13:11 | #19 | 
| Модератор | 
			
			Ну зачем в сценариях интеграции передавать "старое значение поля" ? А что внешняя система будет делать с моим "старым" значением из AX если ее (системы) "старое" (текущее) отличается ? А какое именно "старое" значение поля передавать (и откуда его брать) в случае если у меня внешних систем несколько - отслеживать еще и версию для каждой внешней системы отдельно в AX ? Нет, я понимаю, это круто, но - ЗАЧЕМ ? Цитата: 
		
			Управление модификациями. Как мне перенести то, что этот скрипт нагенерил? Как откатить? 
		
	 Цитата: 
		
			Как контролировать версии?
		
	 Из того, что реально не хватает - это хоть какой-то инструментарий в виде пары-тройки форм для управления \ просмотра того что уже настроено (хотя репозитарий со списком таблиц со всключенным Change tracking и созданных триггеров присутствует) 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | 
|  23.06.2015, 13:23 | #20 | 
| Участник | 
			
			Так там, собственно, кроме указанных табличек создается только одна хп, которая при вызове включает CT для указанных в репозитарии табличек, и отключает для тех, которых в списке нет. И... все. Остальное делается прямыми запросами, формируемыми в коде классов AifChangeTracking*.
		 | 
|  | 
| Теги | 
| aif, ax2012, change tracking, mdm | 
|  | 
| 
 |