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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.01.2021, 16:13   #1  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от Vadik Посмотреть сообщение
CT включается для всех таблиц в документе / запросе (AxdCustomer если я правильно помню)
А как он тогда будет получать то что поменялось? просто адресов там тоже много(17млн).
Клиент уже пробовал реализовать это включением даты модификации на каждой таблице, и запросом где дата модификации фильтруется по ИЛИ для каждой таблицы. Это работает, но медленно, т.е. запрос выполняется больше чем минуту, а таких приходит по десятку в минуту для разных групп
Еще вопрос с ченж трекингом - он живет несколько дней, как быть если они захотят обновить данные полностью (к примеру получить клиентов за последние несколько лет)? писать отдельную обработку?

Пример запроса который они сделали


X++:
..
	 INNER JOIN LOGISTICSELECTRONICADDRESS leaEmail
	    ON dplEmail.LOCATION = leaEmail.LOCATION
	   AND leaEmail.TYPE = 2 -- Email
	   AND (leaEmail.VALIDFROM <= @sync_new_received_anchor AND leaEmail.VALIDTO > @sync_new_received_anchor)
	  LEFT OUTER join DIRNAMEAFFIX dna
	    ON dna.RECID = dp.PERSONALTITLE
	   AND dna.AFFIXTYPE = 1
	  LEFT OUTER JOIN (
		   SELECT dpl.PARTY as PARTY, lea.LOCATOR as LOCATOR,
				  ll.MODIFIEDDATETIME as LL_MODIFIEDDATETIME,
				  lea.MODIFIEDDATETIME as LEA_MODIFIEDDATETIME
			 FROM DIRPARTYLOCATION dpl
			INNER JOIN LOGISTICSLOCATION ll
			   ON ll.RECID = dpl.LOCATION
			  AND ll.DESCRIPTION = 'Home' -- Home phone number
			INNER JOIN LOGISTICSELECTRONICADDRESS lea
			   ON lea.LOCATION = dpl.LOCATION
			  AND lea.TYPE = 1 -- Phone
			  AND (lea.VALIDFROM <= @sync_new_received_anchor AND lea.VALIDTO > @sync_new_received_anchor)
			WHERE (dpl.VALIDFROM <= @sync_new_received_anchor AND dpl.VALIDTO > @sync_new_received_anchor)
			) homePhone
		ON homePhone.PARTY = dp.RECID
	  LEFT OUTER JOIN (
		   SELECT dpl.PARTY as PARTY, lea.LOCATOR as LOCATOR,
				  ll.MODIFIEDDATETIME as LL_MODIFIEDDATETIME,
				  lea.MODIFIEDDATETIME as LEA_MODIFIEDDATETIME
			 FROM DIRPARTYLOCATION dpl
			INNER JOIN LOGISTICSLOCATION ll
			   ON ll.RECID = dpl.LOCATION
			  AND ll.DESCRIPTION = 'Mobile' -- Mobile phone number
			INNER JOIN LOGISTICSELECTRONICADDRESS lea
			   ON lea.LOCATION = dpl.LOCATION
			  AND lea.TYPE = 1 -- Phone
			  AND (lea.VALIDFROM <= @sync_new_received_anchor AND lea.VALIDTO > @sync_new_received_anchor)
			WHERE (dpl.VALIDFROM <= @sync_new_received_anchor AND dpl.VALIDTO > @sync_new_received_anchor)
			) mobilePhone
		ON mobilePhone.PARTY = dp.RECID
	 WHERE c.DATAAREAID = @AXDataAreaId
	   AND c.OWIGUID != '00000000-0000-0000-0000-000000000000'
	   AND c.ONETIMECUSTOMER = 0 -- Don't sync one time customers
	   AND c.CUSTGROUP = @custGroup
	   AND (
			   (c.MODIFIEDDATETIME >= @sync_last_received_anchor AND c.MODIFIEDDATETIME < @sync_new_received_anchor)
			OR (dpn.MODIFIEDDATETIME >= @sync_last_received_anchor AND dpn.MODIFIEDDATETIME < @sync_new_received_anchor)
			OR (leaEmail.MODIFIEDDATETIME >= @sync_last_received_anchor AND leaEmail.MODIFIEDDATETIME < @sync_new_received_anchor)
			OR (dna.MODIFIEDDATETIME >= @sync_last_received_anchor AND dna.MODIFIEDDATETIME < @sync_new_received_anchor)
			OR (homePhone.LEA_MODIFIEDDATETIME >= @sync_last_received_anchor AND homePhone.LEA_MODIFIEDDATETIME < @sync_new_received_anchor)
			OR (homePhone.LL_MODIFIEDDATETIME >= @sync_last_received_anchor AND homePhone.LL_MODIFIEDDATETIME < @sync_new_received_anchor)
			OR (mobilePhone.LEA_MODIFIEDDATETIME >= @sync_last_received_anchor AND mobilePhone.LEA_MODIFIEDDATETIME < @sync_new_received_anchor)
			OR (mobilePhone.LL_MODIFIEDDATETIME >= @sync_last_received_anchor AND mobilePhone.LL_MODIFIEDDATETIME < @sync_new_received_anchor)
		   )
Старый 12.01.2021, 18:12   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от trud Посмотреть сообщение
А как он тогда будет получать то что поменялось? просто адресов там тоже много(17млн)
AIF в runtime генерит запрос который из CT вытаскивает изменения по каждой таблице в Query, их по relations "пристыковывает" к "главной" таблице и объединяет все через UNION. Т.е. одному клиенту поменяли группу, второму отчество, третьему адрес а четвертому - мобильный, но getChangedKeys() увидит и вернет все четыре AxdCustomer документа как измененные. Надежно, удобно, но достаточно затратно чтобы такие трюки раз в минуту на 6М клиентов проворачивать.

Цитата:
Еще вопрос с ченж трекингом - он живет несколько дней, как быть если они захотят обновить данные полностью (к примеру получить клиентов за последние несколько лет)? писать отдельную обработку?
"Измененные данные", "быстро и часто" и "все за несколько лет" это же в некотором смысле требования противоречащие друг другу ? В теории, если изначально реализовано нормально (с поддержкой paging-а), это может работать (но быстро точно не будет), но я бы не бросался за реализацию пока клиент не определился с тем что и как он хочет интегрировать
__________________
-ТСЯ или -ТЬСЯ ?
Старый 12.01.2021, 18:41   #3  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от Vadik Посмотреть сообщение
AIF в runtime генерит запрос который из CT вытаскивает изменения по каждой таблице в Query, их по relations "пристыковывает" к "главной" таблице и объединяет все через UNION. Т.е. одному клиенту поменяли группу, второму отчество, третьему адрес а четвертому - мобильный, но getChangedKeys() увидит и вернет все четыре AxdCustomer документа как измененные.
А вот этот момент можешь раскрыть подробнее? т.е. в исходном запросе будут outer join для всяких адресов, емейлов и прочего.
Будет ли эта штука(с пристыковываниями) работать с таблицей которая присоединена по outer join(при том что таких таблиц несколько в одном запросе)?

Последний раз редактировалось trud; 12.01.2021 в 18:43.
Теги
aif, ax2012, change tracking, интеграция, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012 Общие справочники поставщиков и клиентов PTG DAX: Функционал 2 11.06.2015 15:39
Импорт адресов для существующих клиентов и поставщиков IKA DAX: Программирование 0 10.12.2013 21:04
ax 3.0 Экспорт справочников во внешнюю систему, по какому ключу связаться? Shakr DAX: Программирование 2 11.11.2008 11:34
Сергей Герасимов: О технической поддержке клиентов по продуктам Microsoft Dynamics Blog bot DAX Blogs 4 13.02.2007 14:58
Коды клиентов в CRM - проблема Zabr DAX: Функционал 5 01.12.2003 12:41

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

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

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