AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.05.2023, 09:29   #1  
DaniilT is offline
DaniilT
Участник
 
68 / 12 (1) ++
Регистрация: 28.04.2020
Изменение 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();
}
Но данное изменение в Query не отобразилось при открытии представления.
При открытии представления, в отладчике данный метод init() не вызывается.

Подскажите, как можно изменить структуру Query в AOT?
Нужно перезаписать значение в узле range.

В интернете пока не получилось ничего найти.
Может кто уже сталкивался с такой задачей ?
Старый 04.05.2023, 09:51   #2  
ТРЕНЕР is offline
ТРЕНЕР
Участник
Аватар для ТРЕНЕР
 
599 / 50 (3) ++++
Регистрация: 11.06.2003
Адрес: Москва
Несколько пользователей должны будут менять один и тот же query в одном узле АОТ ? Как вы себе представляете этот процесс ?
Старый 04.05.2023, 10:21   #3  
DaniilT is offline
DaniilT
Участник
 
68 / 12 (1) ++
Регистрация: 28.04.2020
Один пользователь - админ.
Старый 04.05.2023, 11:33   #4  
ТРЕНЕР is offline
ТРЕНЕР
Участник
Аватар для ТРЕНЕР
 
599 / 50 (3) ++++
Регистрация: 11.06.2003
Адрес: Москва
Цитата:
Сообщение от DaniilT Посмотреть сообщение
Один пользователь - админ.
У вас было написано во множественном числе "пользователи могли".
Вам уже ответили. Про программную синхронизацию не знал, полезно.
Спасибо за вопрос.
Старый 04.05.2023, 10:26   #5  
LETTO is offline
LETTO
Участник
 
318 / 64 (3) ++++
Регистрация: 14.07.2022
Вот это должно помочь (пункт 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   #6  
DaniilT is offline
DaniilT
Участник
 
68 / 12 (1) ++
Регистрация: 28.04.2020
LETTO, спасибо большое!!!. А подскажите как правильно синхронизировать представление после этих изменении ?
Старый 04.05.2023, 10:39   #7  
LETTO is offline
LETTO
Участник
 
318 / 64 (3) ++++
Регистрация: 14.07.2022
Цитата:
Сообщение от DaniilT Посмотреть сообщение
LETTO, спасибо большое!!!. А подскажите как правильно синхронизировать представление после этих изменении ?
Я сам такими извращениями не занимался. Так что, как говорится, проверяйте за мной. Попробовать можно вот так с View (у метода еще параметры есть)
X++:
appl.dbSynchronize(tableNum(SalesLineCube));
Старый 04.05.2023, 11:00   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
На всякий случай, если стоит задача написать условие на больше/меньше, то можно использовать метод sysQuery::range(From, To).

Если одна из границ не указана (для дат - это dateNull()), то вместо условия "между" будет сформировано условие "больше или равно" и "меньше или равно" в зависимости от того, какой границы нет

Применительно к данному примеру, это будет как-то так

X++:
qbr_TransDate.value(sysQuery::range(systemDateGet()+1, dateNull()));

"+1" - это чтобы исключить равенство с указанной датой. Всегда больше
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptacorner: Create Query dynamically in AOT through code: Blog bot DAX Blogs 0 08.07.2019 18:12
vasantharivali: Add Query Range for Same Table with Different DataSources Blog bot DAX Blogs 0 06.05.2014 15:11
ax-erp: How to Set the Query Range on a SSRS Report Blog bot DAX Blogs 0 18.10.2012 19:11
msdax: Date Range in AOT Query from SSRS Blog bot DAX Blogs 0 01.04.2011 13:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:03.