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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.11.2020, 19:47   #1  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
D365FO queryBuildDataSource.FindRange() не работает??
D365FO 10.0.12

Пишу RunBaseBatch. который делает автоматичские платежи по custTransOpen. где due date <= сегодня.

Хотелось бы добавить возможность для пользователя выбрать вручную dueDate в фильтре запроса.

Задумывалась такая логика:
Изначально due date range очищается,
Если пользователь выбирает вручную due date, то используем его.
В данном случае пользователь выбрал неправильно- просто значение вместо диапазона: - due date == 2020-11-16
Если пользователь ничего не выбрал, автоматически добавляем диапазон: due date <= сегодня (2020-11-17)

В реальности, пользователь выбрал значение вручную, но система все равно добавляет автоматический диапазон...
Разве if(!qbds.findRange(fieldnum(CustTransOpen, dueDate))) не должен был увидеть уже имеющееся условие?

X++:
void run()
    {
    ....
    q = QueryRun.query();

/*в дебаггере: текущее значение имеет выбранный пользователем DueDate=2020-11-16:
{SELECT MIN(dataAreaId), MIN(AccountNum), SUM(AmountCur) 
FROM CustTransOpen(CustTransOpen_1) 
GROUP BY CustTransOpen.AccountNum 
WHERE ((CustTransOpen(CustTransOpen_1).AccountNum = N'000000001')) 
AND ((CustTransOpen(CustTransOpen_1).DueDate = {ts '2020-11-16 00:00:00.000'}))}
*/

    QueryBuildDataSource qbds = q.dataSourceTable(tableNum(CustTransOpen));
    if(!qbds.findRange(fieldnum(CustTransOpen, dueDate)))
    {
       //несмотря на наличие DueDate range, дебаггер идет сюда и  добавляется новый range
       qbds.addRange(fieldnum(CustTransOpen, dueDate)).value(queryRange(dateNull(), systemDateGet()));
    }
    Info(strFmt("Due date used: %1", qbds.rangeField(fieldnum(CustTransOpen, dueDate)).value()));

/*в итоге получаем странный запрос с двумя разными фильтрами по due date:
{SELECT MIN(dataAreaId), MIN(AccountNum), SUM(AmountCur) 
FROM CustTransOpen(CustTransOpen_1) 
GROUP BY CustTransOpen.AccountNum 
WHERE ((DueDate<={ts '2020-11-17 00:00:00.000'})) 
AND ((CustTransOpen(CustTransOpen_1).AccountNum = N'000000001')) 
AND ((CustTransOpen(CustTransOpen_1).DueDate = {ts '2020-11-16 00:00:00.000'}))}
*/
    .....
    }

boolean unpack(container packedClass)
    {
        Integer     locVersion     = conPeek(packedClass,1);
        container   locPackedQuery;

        switch (locVersion)
        {
            case #CurrentVersion:
                [locVersion,#CurrentList,locPackedQuery] = packedClass;
                break;
            default :
                return false;
        }

        if (locPackedQuery)
        {
            queryRun = new QueryRun(locPackedQuery);

            Query q = QueryRun.query();

            QueryBuildDataSource qbds = q.dataSourceTable(tableNum(CustTransOpen));
            if(qbds.findRange(fieldnum(CustTransOpen, dueDate)))
            {
                qbds.clearRange(fieldnum(CustTransOpen, dueDate));
            }
        }
        else
        {
            return false;
        }
        
    
        return true;
    }
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
littleax: Simple Rest API in D365FO, D365F, D365SCM Blog bot DAX Blogs 0 23.06.2020 14:12
sertandev: How to receive D365FO push notifications using Azure Notification Hubs Blog bot DAX Blogs 0 04.07.2019 18:11
sertandev: How to integrate D365FO with Microsoft Flow using the new Business Events Blog bot DAX Blogs 0 23.05.2019 16:11
erconsult: Copy-paste with keyboard script 2: from Excel to D365FO Blog bot DAX Blogs 0 03.08.2018 11:12

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

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

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