04.05.2023, 09:29 | #1 |
Участник
|
Изменение range Query в AOT.
Добрый день.
Задача стоит в том чтобы можно было изменять критерии (range) запроса (Query) в AOT. Изначально задача состояла в следующем, есть представление, которое сделано на основе запроса (Query). Это представление участвует в расчете куба. Нужно, чтобы пользователи могли изменять это представление, а именно чтобы данные в представление были в указанном периоде. Я попытался в Query переопределить метод init() и там внести изменения: X++: public void init() { QueryBuildRange qbr_TransDate; QueryBuildDataSource qbds_CustTrans; qbds_CustTrans = this.query().dataSourceTable(tableNum(CustTrans)); qbr_TransDate = qbds_CustTrans.rangeField(fieldNum(CustTrans, TransDate)); qbr_TransDate.value(strFmt("%1.%2 > %3", qbds_CustTrans.name(), fieldStr(CustTrans, TransDate), date2StrXpp(02\05\2023))); super(); } При открытии представления, в отладчике данный метод init() не вызывается. Подскажите, как можно изменить структуру Query в AOT? Нужно перезаписать значение в узле range. В интернете пока не получилось ничего найти. Может кто уже сталкивался с такой задачей ? |
|
04.05.2023, 09:51 | #2 |
Участник
|
Несколько пользователей должны будут менять один и тот же query в одном узле АОТ ? Как вы себе представляете этот процесс ?
|
|
04.05.2023, 10:21 | #3 |
Участник
|
Один пользователь - админ.
|
|
04.05.2023, 10:26 | #4 |
Участник
|
Вот это должно помочь (пункт Create a Query in the AOT by Using X++)
https://learn.microsoft.com/en-us/dy...ies-by-using-x Получить dataSource и добавить нужный range X++: // Further define the query. qbds = queryObj.addDataSource(tablenum(CustTable)); qbr = qbds.addRange(fieldnum(CustTable, DlvMode)); qbr.value(">10"); |
|
04.05.2023, 10:31 | #5 |
Участник
|
LETTO, спасибо большое!!!. А подскажите как правильно синхронизировать представление после этих изменении ?
|
|
04.05.2023, 10:39 | #6 |
Участник
|
Цитата:
X++: appl.dbSynchronize(tableNum(SalesLineCube)); |
|
04.05.2023, 11:00 | #7 |
Участник
|
На всякий случай, если стоит задача написать условие на больше/меньше, то можно использовать метод sysQuery::range(From, To).
Если одна из границ не указана (для дат - это dateNull()), то вместо условия "между" будет сформировано условие "больше или равно" и "меньше или равно" в зависимости от того, какой границы нет Применительно к данному примеру, это будет как-то так X++: qbr_TransDate.value(sysQuery::range(systemDateGet()+1, dateNull())); "+1" - это чтобы исключить равенство с указанной датой. Всегда больше
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
04.05.2023, 11:33 | #8 |
Участник
|
|
|