02.12.2008, 03:47 | #1 |
Участник
|
Фильтр для lookup
Добрый день,
коллеги, может кто-нибудь знает простой способ делать фильтры для лукапов. Я знаю способ как сделать свой лукап программно с нуля, но это получается долго, так как приходится все полностью прописывать, а нужно всего добавить одно условие. Может есть способ просто "подпихнуть" это условие в стандартный лукап. На всякий случай - я пользуюсь примерно такими конструкциями: SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(InventTable), _ctrl); Query query = new Query(); QueryBuildDataSource queryBuildDataSource; QueryBuildDataSource queryBuildDataSource1; QueryBuildRange queryBuildRange; ; sysTableLookup.addLookupfield(fieldnum(InventTable, ItemId)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemName)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemType)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemGroupId)); queryBuildDataSource = query.addDataSource(tablenum(InventTable)); queryBuildDataSource1 = queryBuildDataSource.addDataSource(tablenum(InventItemGroup)); queryBuildDataSource1.joinMode(JoinMode::InnerJoin); queryBuildDataSource1.relations(false); queryBuildDataSource1.addLink(fieldnum(InventTable, ItemGroupId),fieldnum(InventItemGroup,ItemGroupId)); queryBuildRange = queryBuildDataSource1.addRange(fieldnum(InventItemGroup, IsCommodity)); queryBuildRange.value(queryValue(NoYes::Yes)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); Заранее спасибо за ответы! |
|
02.12.2008, 09:33 | #2 |
Участник
|
Если ограничение по полю той же таблицы с фиксированным значением, то можно его вынести в EDT поля таблицы или контрола на форме, или в лукапе:
X++: control.performTypeLookup(typeId(ItemIdCustom)); |
|
02.12.2008, 10:26 | #3 |
MCITP
|
Цитата:
Сообщение от nebraska
Добрый день,
коллеги, может кто-нибудь знает простой способ делать фильтры для лукапов. Я знаю способ как сделать свой лукап программно с нуля, но это получается долго, так как приходится все полностью прописывать, а нужно всего добавить одно условие. Может есть способ просто "подпихнуть" это условие в стандартный лукап. Есть. Метод performFormLookup() на поле датасорса или на контроле. Пример X++: public void performFormLookup(FormRun _form, FormControl _formControl) { FormDataSource formDS = _form.dataSource(); QueryBuildDatasource qbds; ; qbds = formDS.query().dataSourceTable(TableId); qbds.addRange(fieldNum(TableId, FieldId)).value(< >); super(_form, _formControl); }
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: evv (1), Eldar9x (1), vanokh (1), SuperStar88 (1). |
02.12.2008, 10:52 | #4 |
MCT
|
Цитата:
Сообщение от nebraska
Добрый день,
коллеги, может кто-нибудь знает простой способ делать фильтры для лукапов. Я знаю способ как сделать свой лукап программно с нуля, но это получается долго, так как приходится все полностью прописывать, а нужно всего добавить одно условие. Может есть способ просто "подпихнуть" это условие в стандартный лукап. На всякий случай - я пользуюсь примерно такими конструкциями: SysTableLookup sysTableLookup = SysTableLookup::newParameters(tablenum(InventTable), _ctrl); Query query = new Query(); QueryBuildDataSource queryBuildDataSource; QueryBuildDataSource queryBuildDataSource1; QueryBuildRange queryBuildRange; ; sysTableLookup.addLookupfield(fieldnum(InventTable, ItemId)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemName)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemType)); sysTableLookup.addLookupfield(fieldnum(InventTable, ItemGroupId)); queryBuildDataSource = query.addDataSource(tablenum(InventTable)); queryBuildDataSource1 = queryBuildDataSource.addDataSource(tablenum(InventItemGroup)); queryBuildDataSource1.joinMode(JoinMode::InnerJoin); queryBuildDataSource1.relations(false); queryBuildDataSource1.addLink(fieldnum(InventTable, ItemGroupId),fieldnum(InventItemGroup,ItemGroupId)); queryBuildRange = queryBuildDataSource1.addRange(fieldnum(InventItemGroup, IsCommodity)); queryBuildRange.value(queryValue(NoYes::Yes)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); Заранее спасибо за ответы! queryBuildRangeExt = queryBuildDataSource1.addRange(fieldnum(InventItemGroup, <еще одно поле>)); queryBuildRange.value(queryValue(<ваше значение>));
__________________
Axapta book for developer |
|
02.12.2008, 11:43 | #5 |
Участник
|
Не сочтите за занудство, но такой код будет работать почти всегда Бывает, что на EDT определена через FormHelp формочка lookup'а, в которой на DataSource'е по каким-то причинам установлено свойство AutoQuery == No, и тогда formDS.query() в данном примере ничего не вернет - придется сначала самостоятельно инициализировать formDS.query(). В стандартном функционале (AX 3.0 SP5) встречался с этим в форме BankAccountTableLookup.
|
|
|
За это сообщение автора поблагодарили: ZVV (1), coolibin (1), vanokh (1). |
02.12.2008, 12:11 | #6 |
MCITP
|
Цитата:
Сообщение от gl00mie
Не сочтите за занудство, но такой код будет работать почти всегда Бывает, что на EDT определена через FormHelp формочка lookup'а, в которой на DataSource'е по каким-то причинам установлено свойство AutoQuery == No, и тогда formDS.query() в данном примере ничего не вернет - придется сначала самостоятельно инициализировать formDS.query(). В стандартном функционале (AX 3.0 SP5) встречался с этим в форме BankAccountTableLookup.
Что ж, значит это надо учитывать. Вообще в аксапте всё так, работает почти всегда. Пока кто-нибудь что-нибудь не подправит и не испортит [offtop] Не далее как вчера догло ковырялся, пытался понять почему рэндж на форме обрезается где-то до 100 символов, вместо ожидаемых 250. В итоге был найден код коллеги, который копируя значения рэнджа в другой (в детали не будем вдаваться) использовал буфер "str 100". [/offtop]
__________________
Zhirenkov Vitaly |
|
Теги |
lookup, фильтр |
|
Похожие темы | ||||
Тема | Ответов | |||
Lookup form, OuterJoin и фильтр | 45 | |||
Создание Lookup формы | 9 | |||
Фильтр в Lookup по полю другой таблицы | 6 | |||
Фильтр в lookup | 7 | |||
lookup фильтр в произвольной lookup форме | 4 |
|