Показать сообщение отдельно
Старый 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).