|
26.06.2018, 16:50 | #1 |
Участник
|
DIXF добавить фильтр на запрос
Мне нужно экспортировать данные через DIXF. Но на используемый query нужно наложить дополнительный фильтр ragge по списку значений, вроде : "A, B, C". Этот список не статичен, а вычисляется. Такое можно сделать через queryBuildDataSource, но на статический query, созданный в AOT, такой фильтр наложить невозможно.
Какой метод нужно переопределить в моем наследнике DMFEntityBase класса, чтобы наложить фильтр? Смотрю стандартные DMF* классы , но в принципе нигде не вижу методов, что как-либо изменяют изначальный query Спасибо |
|
26.06.2018, 19:35 | #2 |
Участник
|
Расширение SysQueryRangeUtil не поможет решить задачу?
Например, обсуждение тут: AX2009 расширеный фильтр
__________________
Ivanhoe as is.. Последний раз редактировалось Ivanhoe; 26.06.2018 в 19:39. |
|
|
За это сообщение автора поблагодарили: dech (1). |
27.06.2018, 16:47 | #3 |
Участник
|
Цитата:
Сообщение от Ivanhoe
Расширение SysQueryRangeUtil не поможет решить задачу?
Например, обсуждение тут: AX2009 расширеный фильтр Правда, все равно, если нужно динамически будет менять запрос(добавить DS, например), то не понятно, в каком методе это нужно будет делать .... Поэтому вопрос остается открытый. |
|
27.06.2018, 18:13 | #4 |
Участник
|
Если прям настолько динамический запрос, то, конечно, нужно с классами DIXF разбираться. А заполнить рендж, как написано в первом посте, вполне можно.
__________________
Ivanhoe as is.. |
|
26.06.2018, 19:56 | #5 |
Участник
|
Так а что мешает взять за основу запрос из AOT и доработать напильником через классы QueryBuild***?
Например следующий запрос выведет первые 10 серийников в складских запасах, отфильтрованных по конкретным локейшнам X++: static void getSerialsFromInventoryOnhand(Args _args) { InventDim inventDim; Query query = new Query(queryStr(InventOnhandDim)); QueryBuildRange range = query.dataSourceTable(tableNum(InventDim)).findRange(fieldNum(InventDim, WMSLocationId)); QueryRun queryRun; Counter counter = 10; ; range.value("FLOOR,CCDFS01,CCDFS02"); queryRun = new QueryRun(query); while (counter && queryRun.next()) { counter--; inventDim = queryRun.get(tableNum(InventDim)); info(InventDim.InventSerialId); } info("Done"); }
__________________
// no comments |
|
27.06.2018, 16:40 | #6 |
Участник
|
Цитата:
Сообщение от dech
Так а что мешает взять за основу запрос из AOT и доработать напильником через классы QueryBuild***?
Например следующий запрос выведет первые 10 серийников в складских запасах, отфильтрованных по конкретным локейшнам X++: static void getSerialsFromInventoryOnhand(Args _args) { InventDim inventDim; Query query = new Query(queryStr(InventOnhandDim)); QueryBuildRange range = query.dataSourceTable(tableNum(InventDim)).findRange(fieldNum(InventDim, WMSLocationId)); QueryRun queryRun; Counter counter = 10; ; range.value("FLOOR,CCDFS01,CCDFS02"); queryRun = new QueryRun(query); while (counter && queryRun.next()) { counter--; inventDim = queryRun.get(tableNum(InventDim)); info(InventDim.InventSerialId); } info("Done"); } |
|
27.06.2018, 08:26 | #7 |
Злыдни
|
Для особо хитрых случаев, например, копирование справочников из предыдущих версий AX в 12R3 использую "Формат исходных данных" - ODBC. Создаю DSN для соединения. А потом в группе обработки в поле с запросом копирую текст запроса, предварительно отлаженный в SQL Studio. Основная проблема при таком варианте, составить структуру промежуточного объекта с наименованием полей и привести структуру запроса с помощью as к названиям промежуточной таблицы. Хотя моно помучиться с ручным сопоставлением. На небольших справочниках это не очень длительная работа.
Таким способом перетащил справочник регионов по странам мира и городов по странам мира и регионам с 4-ки на 12R3
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|