05.05.2021, 20:25 | #1 |
Участник
|
D365 Query Range на Datasource с Outer join
D365 Создаю батч джоб (с помощью SysOperation - Сервис клас и дата контракт) c Query.
Query создан в AOT - два datasource с Outer join. Range добавленный в AOT на второй datasource (child) не отображается при первом запуске. Точнее отображается в диалоге самого батча, но не отображается в настройках фильтров (кнопка Filter). В ручную пользователь может добавить этот range и оно вроде даже работает. В коде нашел что все range на Outer join datasource делаются невидимыми. Что это такое? Лучше вообще не использовать Outer join и просто добавить поля для фильтров в сам диалог? Не понимаю для чего сделано такое ограничение Class: SysQueryForm.getRangeVisible X++: dictTable = new DictTable(queryBuildDataSource.table()); if (dictTable && dictTable.isView() && SysQueryForm::isSFK(tableId, fieldId)) { isVisible = NoYes::No; } else if (joinMode == JoinMode::OuterJoin) { isVisible = NoYes::No; } else { |
|
05.05.2021, 20:30 | #2 |
Участник
|
На outerjoin нужно фильтр добавлять (QueryBuildFilter) что пользователь и делаеть через интерфейс.
|
|
|
За это сообщение автора поблагодарили: DAX (1). |
05.05.2021, 20:34 | #3 |
Участник
|
блин точно, жаль в AOT нет такой возможности. Придется код писать
|
|
05.05.2021, 23:10 | #4 |
Участник
|
Может кому пригодится.
Добавил в декларацию data contract X++: implements SysOperationInitializable X++: public void initialize() { Query q = new Query(SysOperationHelper::base64Decode(packedQuery)); q.addQueryFilter(q.dataSourceTable(tableNum(Table)), fieldStr(Table, Field)); packedQuery = SysOperationHelper::base64Encode(q.pack()); } |
|
|
|