|
12.01.2021, 15:24 | #1 |
Участник
|
Спасибо. Я правда не очень понимаю, как это будет работать,
1 - change tracking он же включится для всей таблицы, получается будет много пустых срабатываний(когда поменялись не нужные нам поля)? 2 - плюс по связям - для примера LOGISTICSELECTRONICADDRESS напрямую с клиентом не связана(связана через несколько таблиц). что в этом случае будет трекаться 3 - как делать горизонтальную фильтрацию, т.е. мне нужны клиенты которые менялись из заданной группы, причем группа может быть разной. Описанный способ после запроса просто помечает весь запрос как использованный |
|
12.01.2021, 15:35 | #2 |
Модератор
|
да
Цитата:
плюс по связям - для примера LOGISTICSELECTRONICADDRESS напрямую с клиентом не связана(связана через несколько таблиц). что в этом случае будет трекаться
Цитата:
как делать горизонтальную фильтрацию, т.е. мне нужны клиенты которые менялись из заданной группы, причем группа может быть разной
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 12.01.2021 в 15:42. |
|
12.01.2021, 15:42 | #3 |
Модератор
|
вот тут CT достаточно подробно обсуждалось
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 12.01.2021 в 16:03. |
|
|
За это сообщение автора поблагодарили: trud (3). |
12.01.2021, 16:13 | #4 |
Участник
|
Цитата:
Клиент уже пробовал реализовать это включением даты модификации на каждой таблице, и запросом где дата модификации фильтруется по ИЛИ для каждой таблицы. Это работает, но медленно, т.е. запрос выполняется больше чем минуту, а таких приходит по десятку в минуту для разных групп Еще вопрос с ченж трекингом - он живет несколько дней, как быть если они захотят обновить данные полностью (к примеру получить клиентов за последние несколько лет)? писать отдельную обработку? Пример запроса который они сделали 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 | #5 |
Модератор
|
Цитата:
Цитата:
Еще вопрос с ченж трекингом - он живет несколько дней, как быть если они захотят обновить данные полностью (к примеру получить клиентов за последние несколько лет)? писать отдельную обработку?
__________________
-ТСЯ или -ТЬСЯ ? |
|
12.01.2021, 18:41 | #6 |
Участник
|
Цитата:
Сообщение от Vadik
AIF в runtime генерит запрос который из CT вытаскивает изменения по каждой таблице в Query, их по relations "пристыковывает" к "главной" таблице и объединяет все через UNION. Т.е. одному клиенту поменяли группу, второму отчество, третьему адрес а четвертому - мобильный, но getChangedKeys() увидит и вернет все четыре AxdCustomer документа как измененные.
Будет ли эта штука(с пристыковываниями) работать с таблицей которая присоединена по outer join(при том что таких таблиц несколько в одном запросе)? Последний раз редактировалось trud; 12.01.2021 в 18:43. |
|
Теги |
aif, ax2012, change tracking, интеграция, как правильно |
|
|