AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen Alle Foren als gelesen markieren

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 15.08.2006, 14:01   #1  
IvanS ist offline
IvanS
Участник
Benutzerbild von IvanS
 
241 / 44 (2) +++
Registriert seit: 30.06.2006
Ort: Екатеринбург
Фильтрация в Lookup'е
Есть значени в одном поле и в другом поле lookup.
Как используя значение в первом поле отфильтровать во 2-ом?
К чему конкретно нужно обратиться в методе lookup'а и нужно ли использовать select?
Alt 15.08.2006, 14:15   #2  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
здесь есть пример лукапа с запросом: http://erpkb.com/Axapta/Lookup
Alt 15.08.2006, 14:17   #3  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Просто переопределите метод Lookup на этом контроле.
В нем закомментируйте вызов super()

и напишите след. код:
Code:
    sysTableLookup          sysTableLookup;
    Query                   query;
    QueryBuildDataSource    queryBuildDataSource;
    QueryBuildRange         queryBuildRange;
    ;

    sysTableLookup = sysTableLookup::newParameters(tableNum(InventTable), this);
    sysTableLookup.addLookupfield(fieldNum(InventTable, itemId));
    sysTableLookup.addLookupfield(fieldNum(InventTable, itemName));

    query = new Query();
    queryBuildDataSource = query.addDataSource(tableNum(InventTable));
    queryBuildRange = queryBuildDataSource.addRange(fieldNum(InventTable, ItemType));
    queryBuildRange.value(queryValue(YourItemTypeValue)); //сюда передаете значение вашего первого поля

//Можно добавить сортировку, группировку, т.д.
//    queryBuildDataSource.addSortField(fieldNum(InventTable, ItemName));

    sysTableLookup.parmQuery(query);

    sysTableLookup.performFormLookup();
Alt 15.08.2006, 14:23   #4  
RVS ist offline
RVS
Сенбернар
Benutzerbild von RVS
Злыдни
 
696 / 130 (6) +++++
Registriert seit: 27.02.2003
Ort: Королев МО
Источник : Axapta - Руководство разработчика. Поиск по слову lookup

Creating a run-time lookup form
A standard lookup form is created through relations on the database table, and on the Extended Data Type. To learn about the standard lookup form, click ...

If, however, you need to create a runtime lookup form that looks up other database fields than the ones offered by the standard lookup form, use the application class SysTableLookup and override the lookup method on the relevant form control.

How to use the SysTableLookup class


Create a new instance of SysTableLookup where 'this' is the current form control

SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(custTable), this);

Add the fields to be shown in the lookup form

sysTableLookup.addLookupField(fieldNum(custTable, accountNum));

Limit the data selection.

queryBuildDataSource = query.addDataSource(tableNum(custTable));

queryBuildRange = queryBuildDataSource.addRange(fieldNum(custTable, accountNum));

queryBuildRange.value('A..B');

sysTableLookup.parmQuery(query);

Perform the lookup, and delete super().
super() will create an autogenerated lookup form.

sysTableLookup.performFormLookup();

// super()

}



A complete example of overriding the lookup method on a form control


void lookup()

{

Query query = new Query();

QueryBuildDataSource queryBuildDataSource;

QueryBuildRange queryBuildRange;



// Create an instance of SysTableLookup where 'this' the current Form control.



SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(custTable), this);

;



// The field to be shown in the lookup form.



sysTableLookup.addLookupField(fieldNum(custTable, accountNum));

sysTableLookup.addLookupField(fieldNum(custTable, name));



// Limit and arrange data selection.



queryBuildDataSource = query.addDataSource(tableNum(custTable));

queryBuildRange = queryBuildDataSource.addRange(fieldNum(custTable, accountNum));

queryBuildRange.value('A..B')
;

sysTableLookup.parmQuery(query);



// Perform lookup



sysTableLookup.performFormLookup();



// do not call super().



// super()

}











void lookup()

{

Query query = new Query();

QueryBuildDataSource queryBuildDataSource;

QueryBuildRange queryBuildRange;

SysTableLookup sysTableLookup;

TableId tableId;

FieldId fieldId;

;

tableId = tablename2id('myTable');

sysTableLookup.parmTableId(tableId);

fieldId = fieldname2id(tableId, 'MyField_1');

sysTableLookup.addLookupfield(fieldId);

fieldId = fieldname2id(tableId, 'MyField_2');

sysTableLookup.addLookupfield(fieldId);



queryBuildDataSource = query.addDataSource(tableId);

queryBuildDataSource.orderMode(OrderMode::GROUPBY);

queryBuildDataSource.addSortField(fieldId));



sysTableLookup.parmQuery(query);



this.performFormLookup(sysTableLookup.formRun());

}

This manner of creating a lookup form is used in the DocuType form in the application. The full path to the modified lookup method is:

\Forms\DocuType\Designs\Design\[Tab:Tab]\[TabPage:Overview]\[Grid:Grid]\StringEdit:ActionClassName\Methods.

Note
The SysTableLookup is limited to making lookups on fields in a table.
Alt 15.08.2006, 14:45   #5  
IvanS ist offline
IvanS
Участник
Benutzerbild von IvanS
 
241 / 44 (2) +++
Registriert seit: 30.06.2006
Ort: Екатеринбург
он ругается у меня на эту строчку
sysTableLookup = sysTableLookup::newParameters(tableNum("моя табл"), this);
говорит про this, что он не совместим с типом
Аргумент callingControl несовместим с требуемым типом.
Alt 15.08.2006, 14:52   #6  
6apcyk ist offline
6apcyk
Участник
 
57 / 11 (1) +
Registriert seit: 17.08.2005
Zitat:
Zitat von IvanS
он ругается у меня на эту строчку
sysTableLookup = sysTableLookup::newParameters(tableNum("моя табл"), this);
говорит про this, что он не совместим с типом
Аргумент callingControl несовместим с требуемым типом.
this должен быть контролом на форме
Alt 15.08.2006, 14:59   #7  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
А где вы пишите ваш lookup метод? На чем?
Вроде бы вы указали что на контроле формы.
Если так, то this должен работать

если же на датасорсе, то в него передается параметром вызывающий контрол.

если же вы свой метод создали, в который просто поместили этот код, то в него нужно передавать контрол
Alt 15.08.2006, 15:07   #8  
IvanS ist offline
IvanS
Участник
Benutzerbild von IvanS
 
241 / 44 (2) +++
Registriert seit: 30.06.2006
Ort: Екатеринбург
Zitat:
Zitat von 6apcyk
this должен быть контролом на форме
Это понятно, что он должен быть контролом. А то что метод относится к этому контролу этого не достаточно? Ну или тогда каким образом обратиться к этому элементу, если это обычный String Edit?
Alt 15.08.2006, 15:09   #9  
IvanS ist offline
IvanS
Участник
Benutzerbild von IvanS
 
241 / 44 (2) +++
Registriert seit: 30.06.2006
Ort: Екатеринбург
Да, я действительно вставил его в датасорс, а не на контрол...
Alt 15.08.2006, 15:17   #10  
6apcyk ist offline
6apcyk
Участник
 
57 / 11 (1) +
Registriert seit: 17.08.2005
Zitat:
Zitat von IvanS
Это понятно, что он должен быть контролом. А то что метод относится к этому контролу этого не достаточно? Ну или тогда каким образом обратиться к этому элементу, если это обычный String Edit?
Есть два стандартных способа обращения к контролам на форме
1) В свойсте контрола autoDeclaraion поставить true и использовать имя контола в коде методов формы.
2) переменная = element.control(control::Имя_контрола);
Alt 15.08.2006, 15:23   #11  
Vadik ist offline
Vadik
Модератор
Benutzerbild von Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3.631 / 1853 (69) ++++++++
Registriert seit: 18.11.2002
Ort: гражданин Москвы
Что вы набросились на человека со своим X++..
IvanS, Вы видели, как построены relations например на LedgerJournalTrans ?
__________________
-ТСЯ или -ТЬСЯ ?
Alt 15.08.2006, 15:36   #12  
IvanS ist offline
IvanS
Участник
Benutzerbild von IvanS
 
241 / 44 (2) +++
Registriert seit: 30.06.2006
Ort: Екатеринбург
Zitat:
Zitat von Vadik
Что вы набросились на человека со своим X++..
IvanS, Вы видели, как построены relations например на LedgerJournalTrans ?

Relations конечно хорошо, но мне нужно как раз, этот метод писать через Х++ в лукапе датасорса
Сейчас мне нужно добавить в query датасорсы, установить линки.
Alt 15.08.2006, 16:33   #13  
RVS ist offline
RVS
Сенбернар
Benutzerbild von RVS
Злыдни
 
696 / 130 (6) +++++
Registriert seit: 27.02.2003
Ort: Королев МО
Zitat:
Zitat von IvanS
Сейчас мне нужно добавить в query датасорсы, установить линки.
Именно датасорсЫ? Много? Тогда SysTableLookup Вам не поможет, не умеет он больше одного датасорса. Рисуйте формочку.

http://www.axforum.info/forums/showthread.php?t=28

Geändert von RVS (15.08.2006 um 16:36 Uhr)
Alt 15.08.2006, 16:35   #14  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Zitat:
Zitat von belugin
здесь есть пример лукапа с запросом: http://erpkb.com/Axapta/Lookup
Кстати, Максим, здесь ссылки надо бы подправить - axforum.ru уже ж нету.
This post has been rated by: belugin (5).
Alt 15.08.2006, 18:45   #15  
Dron AKA andy ist offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Registriert seit: 27.03.2002
Ort: Москва
Zitat:
Zitat von RVS
Именно датасорсЫ? Много? Тогда SysTableLookup Вам не поможет, не умеет он больше одного датасорса. Рисуйте формочку.
Ну почему же не умеет? Речь ведь идет не об отображении нескольких датасорсов на форме лукапа, а о формировании сложного query. Для переопределения умолчательного query есть метод SysTableLookup.parmQuery().
__________________
Андрей.
Alt 16.08.2006, 08:06   #16  
IvanS ist offline
IvanS
Участник
Benutzerbild von IvanS
 
241 / 44 (2) +++
Registriert seit: 30.06.2006
Ort: Екатеринбург
Zitat:
Zitat von Dron AKA andy
Ну почему же не умеет? Речь ведь идет не об отображении нескольких датасорсов на форме лукапа, а о формировании сложного query. Для переопределения умолчательного query есть метод SysTableLookup.parmQuery().
Да мне нужно именно создать сложный запрос, в котором нужно соединить 4 таблицы, и отсортировать строки по одному полю из первой табл и аналогичному полю из другой табл
Alt 16.08.2006, 09:21   #17  
glibs ist offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4.942 / 911 (40) +++++++
Registriert seit: 10.06.2002
Ort: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
А запрос как выглядит? Какие joins используются?
__________________
С уважением,
glibs®
Alt 16.08.2006, 09:42   #18  
IvanS ist offline
IvanS
Участник
Benutzerbild von IvanS
 
241 / 44 (2) +++
Registriert seit: 30.06.2006
Ort: Екатеринбург
Zitat:
Zitat von glibs
А запрос как выглядит? Какие joins используются?
Смысл такой. есть 4 табл связанные последовательно, связаны они на расширенных типах. Везде идет связь один ко многим. И как раз последняя таблица находится в лукапе.
Я думаю тут лучше написать название полей и табл которые необходимо использовать:
Вот такая иерархия Иниц док- Проекты- Этапы- Заявки (слева на право связи один ко многим). В Иниц док. есть поле клиент и в Заявках тоже оно есть.
Вот как раз при выборе на форме заявок поля имя клиента, нужно чтобы фильтровались записи Этапов
Alt 16.08.2006, 09:57   #19  
glibs ist offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4.942 / 911 (40) +++++++
Registriert seit: 10.06.2002
Ort: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Насчет типов join я так и не понял, но иногда мне помогала такая вещь.

Создается view по нескольким таблицам. Оно же используется в качестве таблички, которая засовывается в sysTableLookup.

Можете попробовать такой вариант, если у вас везде (inner) join.
__________________
С уважением,
glibs®
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
gatesasbait: How to define a custom lookup form for an extended datatype Blog bot DAX Blogs 0 09.07.2008 22:05
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Фильтрация в lookup labuzov DAX: Программирование 2 08.07.2004 14:32
Фильтрация в Lookup-форме Rem DAX: Программирование 5 27.04.2002 08:27
Динамические Lookup формы. Андрей Василюк DAX: База знаний и проекты 0 07.12.2001 07:07
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 21:56 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.