Цитата:
Сообщение от
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)
)