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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.09.2010, 13:46   #21  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
При чем здесь индекс?

findRecord() ищет записи на клиенте.
И будет фетчить их с сервера будет до тех пор, пока не найдет или не получит все записи

Причем, так GUID формируется случайно, а порядок сортировки с сервера тоже довольно случайный получается. то переход к одной записи может быть очень быстрым (она окажется где-то впереди), а к другой наоборот - значительно дольше (она окажется где-то в конце).
__________________
Axapta v.3.0 sp5 kr2
Старый 01.10.2010, 13:06   #22  
titov is offline
titov
Участник
 
73 / 87 (3) ++++
Регистрация: 23.12.2005
Адрес: Казань
Цитата:
Сообщение от Poleax Посмотреть сообщение
С переходом к основной таблице тоже типа такой баг? Как нибудь решается, без насильственного программирования?
что подразумевается под "насильственного программирования"?

есть такой вариант - немного подправить класс SysSetupFormRun
X++:
void initGuidLookupFieldValue()
{
    Common                  record;
    SysDictTable            dt;
    guid                    guidLookupValue;
    ;
    if( !this.args()
    ||  !this.args().lookupField()
    ||  !this.args().lookupValue()
    ||  !this.dataSourceCount()
    )
        return;
    dt      = new SysDictTable(this.dataSource(1).cursor().TableId);
    if(dt.fieldObject(this.args().lookupField()).baseType() != types::Guid)
        return;
    if(!dt.hasRecidIdx()) //?!
        return;
    guidLookupValue     = str2guid(this.args().lookupValue());
    record              = dt.makeRecord();
    select firstonly recid from record
        where   record.(this.args().lookupField())  == guidLookupValue;
    if(!record.RecId)
        return;
    this.args().lookupField(dt.fieldName2Id(identifierStr(recid)) );
    this.args().lookupValue(int642str(record.RecId));
}
PHP код:
public void init()
{
    
// <GEEU>
    
this.raiseEvent_W(methodstr(FormRunListener_WbeforeInit));
    
// </GEEU>
    
super();
    
SysSecurityFormSetup::loadSecurity(this);
    
this.dimensionFieldCtrls();
    
this.inventStorageDimFieldCtrls();
    if (
this.isWorkflowEnabled())
    {
        
workflowControls SysWorkflowFormControls::construct(this);
        
workflowControls.initControls();
    }
    
// <GEEU>
    
this.raiseEvent_W(methodstr(FormRunListener_WafterInit));
    
// </GEEU>
    
this.initGuidLookupFieldValue();// <==

позиционирование работает и при лукапе и при переходе
минусы
1. сортировка по recid - но не вижу разницы между guid или recid сортировкой.
2. да, затронут стандартный класс.
За это сообщение автора поблагодарили: gl00mie (3), player (1).
Теги
ax2009, guid, lookup, relation

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Можно сделать lookup по полю типа Base Enum? Hidden DAX: Программирование 25 04.10.2017 13:06
Фильтр по полю и lookup kalex_a DAX: Программирование 11 17.09.2009 13:16
Фильтр в Lookup по полю другой таблицы gefr DAX: Программирование 6 12.03.2007 13:06
multiselect при lookup-е значения типа enum nebula DAX: Программирование 4 14.12.2006 18:56
Фильтр по полю типа Enum, в котором чиловое значение? slava DAX: Программирование 1 08.05.2002 10:26

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

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

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