|
![]() |
#1 |
Модератор
|
Цитата:
Сообщение от AndyD
![]() Проблема в том, что MS SQL хранит и сортирует GUID (или UNIQUEIDENTIFIER) не в виде текста, а в виде 16-байтного числа. Причем, порядок следования экстентов не соответствует текстовому виду (последние экстент идет впереди).
По-этому, сортировка по GUID будет отличиться от текстового представления. ![]() Цитата:
Сообщение от kornix
![]() Судя по всему лукап по полю с типом Guid работает без позиционирования на текущем выбранном элементе. Можно выбрать другое решение, чтобы не дописывать стандартные классы - перекрыть лукап по какому-нибудь другому полю, тоже уникальному в Table1, а в методе lookup() на поле добавить только колонку с Guid. Будет полноценный выбор Guid'а:
X++: public void lookup() { Query query = new Query(); QueryBuildDataSource qbds; SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(Table1), this); ; sysTableLookup.addLookupfield(fieldnum(Table1, testGuid)); qbds = query.addDataSource(tablenum(Table1)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); } ![]()
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
![]() |
#2 |
Участник
|
|
|
![]() |
#3 |
Модератор
|
Этого бы как раз не хотелось.
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
![]() |
#4 |
MCP
|
Да, при переходе к основной таблице та же проблема - нет фильтрации по Guid. Единственное решение на мой взгляд - лукап по другому уникальному полю, и отображение в лукапе вашего столбца с guid'ом.
|
|
![]() |
#5 |
Участник
|
Цитата:
есть такой вариант - немного подправить класс 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). |