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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.08.2006, 13:04   #1  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
? Как очистить значения сортировки в стандартном запросе?
Это всё в runbaseBatch-е!
Пробую вот так:

void SetQuerySort()
{ // Установить параметры Сортировки
QueryBuildDataSource queryDataSource2;

;
queryDataSource2 = this.queryrun().query().dataSourceTable( tablenum( RPayTrans ));

queryDataSource2.sortClear();
// queryDataSource2.clearSortIndex();
// queryDataSource2.clearRanges();

queryDataSource2.addSortField( fieldnum( RPayTrans, LedgerAccount ), SortOrder::Ascending );

}

Смотрю значение queryDataSource2, в отладчике, всё нормально! Затем смотрю запрос, на форме диалога, поля сортировки остались без изменения!!! Но если я выполняю после этого queryDataSource2.clearRange(); Всё очищается! И Range и sort!! Подскажите кто знает в чём тут дело?

Последний раз редактировалось 3oppo; 15.08.2006 в 06:51.
Старый 14.08.2006, 16:58   #2  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
queryDataSource2 = this.queryrun().query().dataSourceTable( tablenum( RPayTrans ));

Вот так вообще можно получать DataSource и потом его изменять?! Такое впечатление что я таким образом меняю один DataSource а там на форме живёт другой!
Не понятно, почему в отладчике видно, что запрос очищается от сортировок (ORDER BY поля пропадают), а на форме это никак не отражается! Может нужно после этого ещё какой метод вызвать, init какой ни будь!?
Старый 14.08.2006, 17:02   #3  
ahtoh
Гость
 
n/a
executeQuery()
Старый 14.08.2006, 17:11   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
X++:
element.DataSource().research();
__________________
Axapta v.3.0 sp5 kr2
Старый 14.08.2006, 17:36   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Попробую описать разницу executeQuery() и research() - последний сохранит пользовательские фильтры, перечитав все данные датасорса.
То есть, если хотите отреагировать на изменения фильтров, что-нить такое, то вызываете executeQuery
если же просто обновить данные - то research()
Старый 14.08.2006, 17:49   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
При чем здесь "просто обновить даннные"?

Прямой вызов executeQuery() - запрос в датасоурс.QueryRun().Query() заменится на датасоурс.Query(), на сервер уйдет обновленный запрос
research() - на сервер уйдет запрос из датасоурс.QueryRun().Query()

Соответственно, если изменяется датасоурс.QueryRun().Query(), то и вызывать надо research(). При наложении пользовательских фильтров так же вносятся изменения в этот Query.
__________________
Axapta v.3.0 sp5 kr2
Старый 14.08.2006, 17:51   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну да, я где-то это же и сказал, только для простых смертных
Старый 15.08.2006, 06:53   #8  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Извиняюсь торможу.
Для runbaseBatch-а кому ресёч запускать?!
Старый 15.08.2006, 11:06   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А в какой момент вызывается этот метод (SetQuerySort)? Да и поподробнее бы о том, как у вас организована работа с Query в диалоге
__________________
Axapta v.3.0 sp5 kr2
Старый 15.08.2006, 11:27   #10  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Он вызывается в UnPack

PHP код:
public boolean unpack(container packedClass)
{
    
version     version runbase::getVersion(packedClass);
    
container   queryCon;

    switch (
version)
    {
        case 
#CurrentVersion:
            
[version,#CurrentList,queryCon] = packedClass;
            
if (sysQuery::isPackedOk(queryCon))     // Вызов уже был ?
                
queryRun = new queryRun(queryCon);  // Востоновить
            
else
                
this.initQuery();                   // Создать новый объект
            
this.SetQuerySort();                    // Установить параметры Сортировки фильтра

            
break;
        default:
            return 
false;
    }

    return 
true;

Работа с диалогом на функционале runbaseBatch

PHP код:
class Declaration  extends runbaseBatch
{
……
    sysQueryrun     queryrun
;
……

PHP код:
queryrun queryrun()
{
    return 
queryrun;

this.initQuery(); - Здесь происходит инициализация при первом вызове.
Собственно вот она:

PHP код:
void initQuery()
{
    
query   query = new query();
    
QueryBuildRange              queryBuildRange1,queryBuildRange2,queryBuildRange3;
;

    
queryDataSource1 query.addDataSourcetablenumRPayTrans ));

    
queryBuildRange1 queryDataSource1.addRange(  fieldnumRPayTransPayPeriod ) );
    
queryBuildRange1.valuedate2str(SystemDateGet ( ),123,2,2,2,2,2) );
    
queryBuildRange2 queryDataSource1.addRange(  fieldnumRPayTransAccountType ) );
    
queryBuildRange2.valueenum2str(LedgerJournalACType::Ledger) );
    
queryBuildRange3 queryDataSource1.addRange(  fieldnumRPayTransLedgerAccount  ) );
    
queryBuildRange3.value('70.000');

    
queryDataSource1.addSortFieldfieldnumRPayTransLedgerAccount ), SortOrder::Ascending );

    
queryrun = new sysqueryrun(query);


Старый 15.08.2006, 12:45   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А может у вас в форме редактирования запроса стоит "Ранее использованный запрос" вместо "Используемый запрос"?
__________________
Axapta v.3.0 sp5 kr2
Старый 15.08.2006, 13:07   #12  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Ни какой разницы! Что так ставлю, это ничего не меняет!
Старый 15.08.2006, 13:25   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
В общем - выложил пример, в котором все отрабатывает нормально. Единственно таблица - LedgerTrans.
Посмотри, как будет работать у вас.
Вложения
Тип файла: xpo TestRunbaseBatch.xpo (4.6 Кб, 456 просмотров)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: 3oppo (1).
Старый 15.08.2006, 14:52   #14  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Пример работает, всё нормально.
Но там в UnPack всегда отрабатывает метод this.initQuery();

Сделал тоже самое у себя в коде, всё тоже заработало, но это не совсем то что мне нужно. Самое интересное, вернул всё назад (как было первоначально) и ВСЁ ЗАРАБОТАЛО! Я ничего не понимаю!!!
Причём сейчас при изменении поля «выбор запроса» на «Используемый запрос» все корректно отображается! До этого изменение не к чему не приводило! Похоже просто, какой то глюк! В любом случае всем спасибо!
Старый 15.08.2006, 15:12   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Зорро
Но там в UnPack всегда отрабатывает метод this.initQuery();
На самом деле это не важно. Первоначально было так же как и у вас и все работало нормально.
__________________
Axapta v.3.0 sp5 kr2
Старый 15.08.2006, 15:48   #16  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Догнал в чём дело! На то, что отображается в форме вообще смотреть не надо! Там отображаются только запросы, введенные вручную, и только они запоминаются.
Обновить там значение, не получилось. Ну и не надо итак всё работает.
Старый 15.08.2006, 16:00   #17  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Хм...
А можно уточнить, о какой форме идет речь? Dialog или SysQueryForm?
SortFields отображаются только в SysQueryForm - а там вроде бы все нормально.
__________________
Axapta v.3.0 sp5 kr2
Старый 16.08.2006, 05:42   #18  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Я вызываю свою форму, то есть:
(Аналогично Tutorial_RunbaseForm )

public Object dialog()
{
;
dialog = dialog::newFormnameRunbase( formstr(My_Form), this );
….
}

Диалог объявлен стандартно:

public class FormRun extends ObjectRun
{
….
}
Старый 16.08.2006, 09:02   #19  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Выяснилось, что запрос всё таки строится корректно! Но почему не корректо отображается не ясно!

Последний раз редактировалось 3oppo; 16.08.2006 в 12:29.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
где хранятся значения полей удаленных строк? chanchala DAX: Программирование 16 04.09.2008 10:45
фильтр lookupа на запросе диалога oleg_e DAX: Программирование 6 12.11.2007 11:01
Как получить значения полей (modifiedDate, modifiedTime, modifiedBy и др.) при работе с объектами AOT типа Map? LRA DAX: База знаний и проекты 15 02.04.2007 13:37
Блокирование Range в стандартном запросе Goldy DAX: Программирование 4 04.08.2006 14:20
Порядок сортировки Vpooh DAX: Программирование 2 16.10.2003 12:23

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

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

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