|
14.01.2021, 13:16 | #1 |
Боец
|
Цитата:
Сообщение от mazzy
Угу. добавить еще проверку на recVersion, чтобы не сравнивать длинные строки
|
|
14.01.2021, 13:19 | #2 |
Участник
|
Цитата:
именно, наизнанку. Цитата:
Сообщение от DSPIC
Можно, было бы, но много дочерних таблиц... А от них нужно прийти к верхенму CustTable. Т.е. ты получишь 500К изменившихся Addresses, из которых придется найти только 50 клиентов, подлежащих выгрузке. Ну такое: неоптимально и наизнанку. Тригерры всё-таки нужно вешать, а с ними и recVersion сравнивать бессмысленно, т.к. заведомо поменяется.
я тоже через такие рассуждения прошел |
|
14.01.2021, 13:33 | #3 |
Боец
|
Цитата:
Пример: Выгрузке подлежат клиенты, у которых CommissionSalesGroup.Export=Yes. Выгружать нужно в т.ч., если изменились их адреса. Итак, поменялся RecVersion у 10К адресов, в которые входят наши 5 клиентов для выгрузки.Ну, вдовесок там ещё контакты и прочая DirParty лабуда. Аж интересно мне.. |
|
14.01.2021, 13:43 | #4 |
Участник
|
Цитата:
Сообщение от DSPIC
Начинается... Подумал, не знаю. Поделись, сэкономь мне 50$ времени
Пример: Выгрузке подлежат клиенты, у которых CommissionSalesGroup.Export=Yes. Выгружать нужно в т.ч., если изменились их адреса. Итак, поменялся RecVersion у 10К адресов, в которые входят наши 5 клиентов для выгрузки.Ну, вдовесок там ещё контакты и прочая DirParty лабуда. Аж интересно мне.. выгрузи только те, что относятся к измененным клиентам. ты говоришь: * клиенты используют адреса в FK * это бизнес локика наверняка заложена и в Аксапте и во внешней системе * значит с огромной вероятностью во внешней системе будут заданы constraints на адреса у клиента * это значит, чтобы приемник смог принять без ошибок, система источник ДОЛЖНА сначала передать адреса, а уж потом клиентов. * будет ли источник передавать сначала все 10К изменившихся адресов или будет как то приоретизировать... вопрос реализации, а не вопрос подхода. и я сильно подозреваю, что этот вопрос уходит сильно за рамки исходного вопроса. говорю жеж, подумай еще раз. там много соображений, относящихся к бизнес-логике и к инфраструктуре, а не к кодингу. кодинг - не так уж и сложен в этой задаче. а прикинь есть еще удаление. и на приемнике может присутстовать каскадное удаление данных Последний раз редактировалось mazzy; 14.01.2021 в 13:49. |
|
14.01.2021, 13:59 | #5 |
Боец
|
Цитата:
Сообщение от mazzy
эээээ. а зачем выгружать 10К адресов?
выгрузи только те, что относятся к измененным клиентам. ты говоришь: * клиенты используют адреса в FK * это бизнес локика наверняка заложена и в Аксапте и во внешней системе * значит с огромной вероятностью во внешней системе будут заданы constraints на адресе * это значит, чтобы приемник смог принять без ошибок, система источник ДОЛЖНА сначала передать адреса, а уж потом клиентов. * будет ли источник передавать сначала все 10К изменившихся адресов или будет как то приоретизировать... вопрос реализации, а не вопрос подхода. и я сильно подозреваю, что этот вопрос уходит сильно за рамки исходного вопроса. говорю жеж, подумай еще раз. там много соображений, относящихся к бизнес-логике и к инфраструктуре, а не к кодингу. кодинг - не так уж и сложен в этой задаче. а прикинь есть еще удаление. и на приемнике может присутстовать каскадное удаление данных 1. Мне нужно выгрузить клиентов с их адресами и контаками. Мне не нужно выгружать по-отдельности клиентов, адреса и контакты (в этом случае порядок важен, но соблюсти его технически невозможно). Т.е. ещё раз - минимальной единицей экспорта является посылка с подарками, а не коробка и подарки по-отдельности. 2. Так в этом суть задачи - среди множества изменившихся 10К адресов найти 5 клиентов, кторые подлежат выгрузке. Как? |
|
|
За это сообщение автора поблагодарили: EVGL (3). |
14.01.2021, 14:14 | #6 |
Участник
|
Цитата:
Сообщение от DSPIC
Так-с давай синхронизируемся.
1. Мне нужно выгрузить клиентов с их адресами и контаками. Мне не нужно выгружать по-отдельности клиентов, адреса и контакты (в этом случае порядок важен, но соблюсти его технически невозможно). Т.е. ещё раз - минимальной единицей экспорта является посылка с подарками, а не коробка и подарки по-отдельности. насколько я понимаю у автора топика был другой вопрос... и я отвечал про справочник. ну и фиг с ним. давай поговорим о DataEntity. Цитата:
в контексте DataEntity нужно записи в подчиненных таблицах, которые связаны с главной: есть 5 клиентов - надо найти адреса, относящиеся к каждому из них т.е. в рамках кода, который выгружает клиентов нужно сделать запрос к адресам, которые связаны с передаваемым клиентом и только для этих адресов проверить - изменились ли они. И тут... Классический DataEnity предполагает, что в DataEntity содержатся все данные, относящиеся к главной. Т.е. DataEnity - это конечное целевое состояние которое должно быть у главной записи. (по крайней мере я так понимаю подход с DataEnity) В рамках такого подхода DataEnity, можно ли с логической точки зрения передавать изменения в подчиненных таблицах? Не будет ли принимающая сторона трактовать отсутствующие в DataEnitity записи как команду удалить, все что не перечислено в DataEnity? Понятно, что если и источник, и приемник контролируются одной командой разработки, то может быть всё что угодно. Но как правило команда не одна. И я бы не рассчитывал, что в DataEnity можно передавать отличия, а не конечное целевое состояние. ======= Другими словами, 1. если Клиенты и Адреса - выгружаемые справочники, то рано или поздно система источник все равно должна выгрузить все данные. Причем выгрузка должна учитывать, что приемник может содержать constraints на бизнес-логику 2. если клиенты+адреса - это DataEnitity, то совершенно не обязательно выгружать все адреса (DataEnitity никогда этого и не делает). Но вот можно ли выгружать в DataEnitity только изменившиеся адреса - большой вопрос, требующий согласования на уровне публичных интерфейсов между системами. Насколько я понимаю, предполагается, что DataEnitity дложна содержать все данные, относящиеся к главной записи. Последний раз редактировалось mazzy; 14.01.2021 в 14:18. |
|
14.01.2021, 14:52 | #7 |
Участник
|
Цитата:
Получается остается только решение предложенное DSPIC. Цитата:
Сообщение от Ace of Database
тут пишу про SysDatabaseLog потому что это прикольно и тоже работает.
PS: А D365FO как-то решает эту задачу? |
|
14.01.2021, 13:19 | #8 |
Участник
|
Цитата:
Сообщение от DSPIC
Имеешь ввиду - убрать триггеры на update\insert и сканить таблицы на предмет изменившегося recVersion, а потом уже смотреть, изменились ли выгружаемые поля? Можно, было бы, но много дочерних таблиц... А от них нужно прийти к верхенму CustTable. Т.е. ты получишь 500К изменившихся Addresses, из которых придется найти только 50 клиентов, подлежащих выгрузке. Ну такое: неоптимально и наизнанку. Тригерры всё-таки нужно вешать, а с ними и recVersion сравнивать бессмысленно, т.к. заведомо поменяется.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
14.01.2021, 13:29 | #9 |
Участник
|
Цитата:
но раз уж дошло до дочерних таблиц. на дочерних таблицах так или иначе, но будут заданы constraints на FK (в аксапте такие валидации выполняются в validateWrite, задаются в reltation) т.е. чтобы внешняя система смогла принять данные, данные должны быть переданы в определенном порядке - сначала родитель, потом потомок. т.е. в коде не будет простой выборки всех измененных данных. придется делать более сложный алгоритм. особенно если есть отношения (id, parentId) в самой таблице. тогда надо будет не только таблицы сортировать, но и измененные записи внутри таблиц |
|
14.01.2021, 13:41 | #10 |
Боец
|
О, отличная мысль. Я так буду заказчикам писать, когда с эстимейтами мимо выйдет.
Цитата:
Сообщение от mazzy
на дочерних таблицах так или иначе, но будут заданы constraints на FK (в аксапте такие валидации выполняются в validateWrite, задаются в reltation)
т.е. чтобы внешняя система смогла принять данные, данные должны быть переданы в определенном порядке - сначала родитель, потом потомок. т.е. в коде не будет простой выборки всех измененных данных. придется делать более сложный алгоритм. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
14.01.2021, 13:44 | #11 |
Участник
|
И в самом деле!
Никакого порядка! |
|
Теги |
aif, ax2012, change tracking, интеграция, как правильно |
|
|