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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.12.2008, 03:47   #1  
nebraska is offline
nebraska
Участник
 
25 / 12 (1) ++
Регистрация: 07.11.2006
Фильтр для 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  
vanokh is offline
vanokh
Участник
 
108 / 63 (3) ++++
Регистрация: 23.10.2008
Если ограничение по полю той же таблицы с фиксированным значением, то можно его вынести в EDT поля таблицы или контрола на форме, или в лукапе:
X++:
control.performTypeLookup(typeId(ItemIdCustom));
Старый 02.12.2008, 10:26   #3  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от 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  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от 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  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от ZVV Посмотреть сообщение
X++:
public void performFormLookup(FormRun _form, FormControl _formControl)
{
    FormDataSource          formDS = _form.dataSource();
    ;
    formDS.query().dataSourceTable(TableId).addRange(fieldNum(TableId, FieldId)).value(< >);
    super(_form, _formControl);
}
Не сочтите за занудство, но такой код будет работать почти всегда Бывает, что на 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  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от 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 и фильтр Russland DAX: Программирование 45 26.10.2007 15:45
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Фильтр в Lookup по полю другой таблицы gefr DAX: Программирование 6 12.03.2007 13:06
Фильтр в lookup Azat DAX: Программирование 7 08.11.2005 11:40
lookup фильтр в произвольной lookup форме 111andrei DAX: Программирование 4 05.10.2005 11:28

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:43.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.