30.09.2010, 13:46 | #21 |
Участник
|
При чем здесь индекс?
findRecord() ищет записи на клиенте. И будет фетчить их с сервера будет до тех пор, пока не найдет или не получит все записи Причем, так GUID формируется случайно, а порядок сортировки с сервера тоже довольно случайный получается. то переход к одной записи может быть очень быстрым (она окажется где-то впереди), а к другой наоборот - значительно дольше (она окажется где-то в конце).
__________________
Axapta v.3.0 sp5 kr2 |
|
01.10.2010, 13:06 | #22 |
Участник
|
Цитата:
есть такой вариант - немного подправить класс 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 код:
минусы 1. сортировка по recid - но не вижу разницы между guid или recid сортировкой. 2. да, затронут стандартный класс. |
|
|
За это сообщение автора поблагодарили: gl00mie (3), player (1). |