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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.06.2011, 09:15   #1  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Поля из разных таблиц в динамической Lookup-форме
Здравствуйте!
Помогите, пожалуйста, с ответом на вопрос:
Есть ли возможность программно - посредством перекрытия метода lookup() строкового контрола (StringEdit) отобразить поля из двух разных таблиц, связанных через InnerJoin.
Подобного нигде не видел, и посему мне кажется, что реализовать подобную конструкцию нельзя в Аксапте (версия Акстапты 3.0 SP1), т.к. насколько я понимаю, в лукапной форме будут отображаться только поля таблицы, которая указана в нижеприведенной строке:
X++:
sysTableLookup = SysTableLookup::newParameters(tableNum(), );
Может есть способ обойти это ограничение и отобразить поля из двух связанных таблиц в одной lookup-форме?
P.S. Создание внешней lookup-формы как вариант я учитываю, но все же хочется узнать, есть ли возможность сделать вышеописанное программно.
__________________
С уважением, Александр.
Старый 02.06.2011, 09:30   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Постмотрите метод formRun в классе SysTableLookup и сами все поймете (если кратко - нельзя). Возможно Вам подойдет класс TableLookup_RU - там вместо lookupField можно указывать метод. А так, либо lookup-форма, либо доработка.
За это сообщение автора поблагодарили: samolalex (1).
Старый 02.06.2011, 10:32   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А если попробовать View сделать?
За это сообщение автора поблагодарили: samolalex (1).
Старый 02.06.2011, 10:46   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
У класса SysTableLookup есть такой метод SysTableLookup.parmQuery() куда в качестве параметра можно передать предварительно сформированный Query, в том числе и по нескольким таблицам. Общая схема примерно такая

X++:
// Формируем Query
query = new Query()
queryBuildDataSource1 = query.addDataSource(tableNum(Table1))
queryBuildDataSource2 = queryBuildDataSource1.addDataSource(tableNum(Table2))
(...)

// Инициализируем класс для создания формы lookup
    sysTableLookup = SysTableLookup::newParameters(tablenum(Table1), _lookupCtrl);

// Какие поля должны отображаться в выпадающем списке
    sysTableLookup.addLookupfield(fieldnum(Table1, Field1));
    sysTableLookup.addLookupfield(fieldnum(Table1, Field2));

// Передаем запрос в форму Lookup
    sysTableLookup.parmQuery(query);

// Формируем форму Lookup
    sysTableLookup.performFormLookup();
Пример можно посмотреть в методе формы Ax3.0

\Forms\PBATreeInsertDefaultRoute\Designs\Design\StringEdit:PBADefaultRouteId\Methods\lookup

Хотя, кажется, не получится вывести поля из разных таблиц. Впрочем, я не пробовал. Может и получится...

PS: Нет. Не получится. Формированием Grid в форме lookup занимается метод \Classes\SysTableLookup\buildGrid() в котором указывается Id только одной таблицы-источника. Значит, добавить объекты из нескольких таблиц-источников - не получится. Не будут сформированы корректные Id источников

Последний раз редактировалось Владимир Максимов; 02.06.2011 в 10:57.
За это сообщение автора поблагодарили: samolalex (1).
Старый 02.06.2011, 10:48   #5  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Может я чего-то не понял, но почему нельзя использовать query?
X++:
public void lookup()
{
    Query                       queryLookup = new Query();
    QueryBuildDataSource        qbdsRPayGroupTable;
    QueryBuildDataSource        qbdsRPayGroupSetMemberTable;


    SYSTableLookup              sysTableLokup = SYSTableLookup::newParameters(TableNum(RPayGroupTable), this);
    ;

    sysTableLokup.addLookupfield(fieldNum(RPayGroupTable, PayGroup), true);
    sysTableLokup.addLookupfield(fieldNum(RPayGroupTable, Name), false);

    qbdsRPayGroupTable = queryLookup.addDataSource(TableNum(RPayGroupTable));

    qbdsRPayGroupSetMemberTable = qbdsRPayGroupTable.addDataSource(tablenum(RPayGroupSetMemberTable));
    qbdsRPayGroupSetMemberTable.relations(true);
    qbdsRPayGroupSetMemberTable.addRange(fieldnum(RPayGroupSetMemberTable, GroupSetId)).value(QueryValue(RHRMParameters::find().GroupSetIdEmplFilter));




    sysTableLokup.parmQuery(queryLookup);
    sysTableLokup.performFormLookup();

}
__________________
Axapta book for developer
За это сообщение автора поблагодарили: samolalex (1).
Старый 02.06.2011, 11:00   #6  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
я предлагаю сделать немного по другому.

создать форму LookUp'a (для примера можно посмотреть форму InventBatchIdLookup). На этой форме написать нужный Вам запрос, и вывести нужные поля (столбцы).

потом создаете для Вашего StringControl'а EDT и ему в свойствах указываете FormHelp (опять же для примера можете глянуть EDT InventBatchId).
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: samolalex (1).
Старый 02.06.2011, 11:01   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Кстати, у класса sysTableLookup есть класс-наследник TableLookup_RU. Основное отличие в том, что в классе TableLookup_RU в качестве поля Grid можно указать дисплейный метод таблицы-источника. Ну, а в дисплейном методе обратится к полю другой таблицы. Пример смотри в форме

\Forms\RHRMOrderTable\Designs\Design\[Tab:Tab]\[TabPage:General]\[Group:Location]\StringEdit:tripState\Methods\lookup

PS: Только что заметил, что _scorp_ уже сказал все то же самое в самом первом ответе

Последний раз редактировалось Владимир Максимов; 02.06.2011 в 11:10.
Старый 02.06.2011, 11:07   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от MikeR Посмотреть сообщение
Может я чего-то не понял, но почему нельзя использовать query?
Автору темы необходимо в форме lookup отобразить поля из двух разных таблиц. Не запрос создать, а чтобы в выпадающем списке были поля из разных таблиц.

Для этого, теоретически, в методах sysTableLokup.addLookupfield() надо перечислить поля из разных таблиц. Но при формировании Grid формы lookup в классе sysTableLokup это вызовет ошибку.
Старый 06.06.2011, 20:20   #9  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Спасибо Всем огромное за мнения! Вопрос решил созданием "внешней" формы. Это оказался, по-моему, самый оптимальный вариант для решения данной задачи.
__________________
С уважением, Александр.
Теги
lookup, systablelookup

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не срабатывают скрипты на событии lookup поля. Hub DAX: Программирование 8 06.08.2008 10:42
lookup фильтр в произвольной lookup форме 111andrei DAX: Программирование 4 05.10.2005 11:28
Как перекрыть lookup для поля входящего в группу полей ATimTim DAX: Программирование 2 05.10.2005 11:26
Сортировка и/или фильтры в lookup форме - howto. Maximin DAX: Программирование 5 07.06.2005 11:06
О Lookup-форме и FormFrame::Border NIMERE DAX: Программирование 3 22.03.2004 13:04

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

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

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