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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.11.2001, 17:01   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Создание Lookup формы

В качестве Lookup формы может выступать любая форма Axapta.

Внедрение Lookup формы
Существует два пути внедрения Lookup формы.

Внедрение в качестве FormHelp для Extended Data Type.
Если указать название формы в поле Form Help у Extended Data Type, во всех таблицах, где выполняется lookup по полю этого типа, будет использоваться указанная lookup форма.

Внедрение непосредственно в Grid в методе lookup выбранного столбца. Метод lookup вызывается при нажатии на lookup-кнопку. Его метод super открывает стандартную lookup форму (grid с выбранными столбцами). Для использования другой формы следует вместо вызова метода super добавить вызов метода performFormLookup объекта, который осуществил вызов метода (то есть this.performFormLookup). В качестве параметра этому методу передаются объект типа FormRun, поэтому перед его вызовом необходимо создать форму, которая будет использоваться для lookup. Полный текст метода lookup может быть, например, таким:
X++:
  void Lookup()
  {
      FormRun FR = New FormRun(New Args("ColorLookup"));
      FR.Init();
      this.PerformFormLookup(FR);
  }
Структура Lookup формы
Во-первых, следует изменить значение свойства Frame формы на Border или None, чтобы при ее вызове не появлялся заголовок. Форма должна закрываться методом CloseSelect(str). В качестве строки этому методу передается значение, которое будет результатом lookup.

PerformFormLookup вызывает метод SelectMode у формы, переданной ему в качестве параметра. Этот метод переводит форму в SelectMode. SelectMode можно вызвать и самостоятельно. В качестве параметра следует передать FormControl. В этом случае можно не закрывать форму с помощью CloseSelect, а результат будет взят из поля value указанного Control.

Форма, вызванная методом PerformFormLookup, закрывается автоматически при переводе фокуса. Эту проблему можно решить, например, используя дополнительный флаг, сообщающий о том, что выбор сделан. Теперь вызывать метод super у closeSelect следует только в том случае, когда флаг установлен. Пример смотрите в форме HB_Tutorial_CustomLookup.

Изменение lookup-пиктограммы
При использовании Extended Data Type появляется возможность изменять для полей этого типа lookup-пиктограмму, изображенную на кнопке, нажатие на которую вызывает lookup. Это делается изменением значения поля ButtonImage у Extended Data Type. Возможные значения: Arrow (по умолчанию), Mail, URL, Three Dots, Open File и Calendar.

Использование группы полей AutoLookup для создания Lookup формы
Стандартная Lookup форма вызывается, когда определен relation в таблице. Пусть Table1 и Table2 связаны relation Table2.ID == Table1.ID. В формах, использующих значение Table2.ID появиться возможность использовать стандартную Lookup форму. По умолчанию она будет состоять из Grid с одним столбцом Table1.ID. Можно расширить набор столбцов, добавив новые поля в группу AutoLookup у Table1 (разумеется, это должны быть поля Table1).

Пример
В качестве примера используйте проект Произвольная Lookup форма.

За это сообщение автора поблагодарили: alex55 (1), refined (0).
Старый 11.11.2003, 16:50   #2  
Александр_1975 is offline
Александр_1975
Участник
 
13 / 10 (1) +
Регистрация: 05.11.2003
Адрес: Москва
А как управлять сортировкой в LookUp-форме?
Старый 12.11.2003, 11:51   #3  
Yuri Safronov is offline
Yuri Safronov
Участник
 
140 / 55 (2) ++++
Регистрация: 21.08.2002
Адрес: Москва
Перекрыть метод lookup у элемента, у которого выпадает lookup-форма:

PHP код:
public void lookup()
{
    
PriceDiscAdmTable priceTable;
    ;

    
super();

    
priceTable.lookupOpenJournal(this);






А в таблицу PriceDiscAdmTable добавляем метод:

PHP код:
client void lookupOpenJournal(Object _lookupCtrl)
{
    
SysTableLookup          sysTableLookup;
    
Query                   query = new Query();
    
QueryBuildDataSource    queryBuildDataSource;
    
QueryBuildRange         queryBuildRange;
    ;

    
sysTableLookup       SysTableLookup::newParameters(tableNum(PriceDiscAdmTable), _lookupCtrl);
    
queryBuildDataSource query.addDataSource(tableNum(PriceDiscAdmTable));
    
queryBuildRange      queryBuildDataSource.addRange(fieldNum(PriceDiscAdmTableposted));
    
queryBuildRange.valuequeryValue(NoYes::No) );

    
// Здесь мы собственно и задаём порядок сортировки
    
queryBuildDataSource.addSortField(fieldnum(PriceDiscAdmTableJournalNum), SortOrder:: Descending );
    
    
sysTableLookup.addLookupfield(fieldNum(PriceDiscAdmTableJournalNum));
    
sysTableLookup.addLookupfield(fieldNum(PriceDiscAdmTableJournalName));
    
sysTableLookup.addLookupfield(fieldNum(PriceDiscAdmTableName));
    
sysTableLookup.addLookupfield(fieldNum(PriceDiscAdmTablePosted));

    
sysTableLookup.parmQuery(query);
    
sysTableLookup.performFormLookup();

Вообще-то можно в перекрытый метод lookup добавить тот код, который я добавил в метод таблицы. Но правильно будет сделать так как я написал.
__________________
yurisafronov@mail.ru
skype: y.safronov
Старый 01.12.2003, 17:52   #4  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
А почему ширину полей руками менять нельзя в стандартном lookup-е ? Искал-искал в форуме, не нашёл как это сделать.
__________________
Дмитрий
Старый 01.12.2003, 18:04   #5  
Yuri Safronov is offline
Yuri Safronov
Участник
 
140 / 55 (2) ++++
Регистрация: 21.08.2002
Адрес: Москва
Как это сделать я не знаю.
Попробуй двойное нажатие левой кнопки мыши между названиями столбцов. Устанавливается ширина колонки равная самой длинной строке столбца. Но это помогает когда ты видишь не все данные в поле.
__________________
yurisafronov@mail.ru
skype: y.safronov
За это сообщение автора поблагодарили: Logger (1).
Старый 08.07.2004, 18:11   #6  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Сделал lookup, как описано выше .
Вопрос возник по фильтрованному спсику.
Когда вводишь посредством спика, то все хорошо - список соответсвует критериям фильтра . Но остается одна лазейка - ввод вручную. В этом случае получиться ввести значение, которое не соответствует фильтру, главное чтобы оно просто было таблице-списке.
Как закрыть эту лазейку?
Старый 09.07.2004, 13:42   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Смотрите метод validateField у таблицы и DataSource
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 09.07.2004, 14:23   #8  
Yuri Safronov is offline
Yuri Safronov
Участник
 
140 / 55 (2) ++++
Регистрация: 21.08.2002
Адрес: Москва
Максим прав, нужно перекрыть метод validateField .
Но, как в нём проверить, что полученное значение удовлетворяет критериям queryBuildRange?

Есть разные пути решения этого вопроса, но универсального я не знаю.
__________________
yurisafronov@mail.ru
skype: y.safronov
Старый 09.07.2004, 19:04   #9  
AndyG is offline
AndyG
Участник
 
17 / 10 (1) +
Регистрация: 11.08.2003
Существует 3-й способ внедрения Lookup формы, на источнике данных перекрыть метод Lookup, например \Forms\Address\Data Sources\Address\Fields\State\Methods.

Если не трудно можно поподробнее рассказать о таком варианте?
Старый 26.06.2007, 16:44   #10  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
Такой вопрос:
1. Создаю Форму.
2. Вставляю в нее datasource, grid, поля в grid.
3. Прописываю
X++:
this.selectMode(Grid_ItemId);
Grid_ItemId.setFocus();
4. Выставляю фильтр из настроек (для чего и писалась форма)
5. Привязываю его непосредственно в HelpForm.

В форме показывается только первое поле grid, хотя на самом деле вставляю их несколько. причем если не выставлять selectmode или не выставлять фильтр - результат от этого не меняется, просто значение не возвращается.
Теги
edt, grid, lookup, как правильно, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Автоматический вызов lookup при запуске формы demID DAX: Программирование 6 24.09.2004 17:34
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Создание feature key на поле формы tov DAX: Администрирование 11 30.06.2003 15:49
lookup-формы изменяющегося размера Maxim Gorbunov DAX: Программирование 9 18.01.2002 19:22
Динамические Lookup формы. Андрей Василюк DAX: База знаний и проекты 0 07.12.2001 07:07
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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