15.08.2006, 14:01 | #1 |
Участник
|
Фильтрация в Lookup'е
Есть значени в одном поле и в другом поле lookup.
Как используя значение в первом поле отфильтровать во 2-ом? К чему конкретно нужно обратиться в методе lookup'а и нужно ли использовать select? |
|
15.08.2006, 14:15 | #2 |
Участник
|
здесь есть пример лукапа с запросом: http://erpkb.com/Axapta/Lookup
|
|
15.08.2006, 14:17 | #3 |
Участник
|
Просто переопределите метод Lookup на этом контроле.
В нем закомментируйте вызов super() и напишите след. код: Код: 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(); |
|
15.08.2006, 14:23 | #4 |
Сенбернар
|
Источник : 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. |
|
15.08.2006, 14:45 | #5 |
Участник
|
он ругается у меня на эту строчку
sysTableLookup = sysTableLookup::newParameters(tableNum("моя табл"), this); говорит про this, что он не совместим с типом Аргумент callingControl несовместим с требуемым типом. |
|
15.08.2006, 14:52 | #6 |
Участник
|
Цитата:
Сообщение от IvanS
он ругается у меня на эту строчку
sysTableLookup = sysTableLookup::newParameters(tableNum("моя табл"), this); говорит про this, что он не совместим с типом Аргумент callingControl несовместим с требуемым типом. |
|
15.08.2006, 14:59 | #7 |
Участник
|
А где вы пишите ваш lookup метод? На чем?
Вроде бы вы указали что на контроле формы. Если так, то this должен работать если же на датасорсе, то в него передается параметром вызывающий контрол. если же вы свой метод создали, в который просто поместили этот код, то в него нужно передавать контрол |
|
15.08.2006, 15:07 | #8 |
Участник
|
Цитата:
Сообщение от 6apcyk
this должен быть контролом на форме
|
|
15.08.2006, 15:09 | #9 |
Участник
|
Да, я действительно вставил его в датасорс, а не на контрол...
|
|
15.08.2006, 15:17 | #10 |
Участник
|
Цитата:
Сообщение от IvanS
Это понятно, что он должен быть контролом. А то что метод относится к этому контролу этого не достаточно? Ну или тогда каким образом обратиться к этому элементу, если это обычный String Edit?
1) В свойсте контрола autoDeclaraion поставить true и использовать имя контола в коде методов формы. 2) переменная = element.control(control::Имя_контрола); |
|
15.08.2006, 15:23 | #11 |
Модератор
|
Что вы набросились на человека со своим X++..
IvanS, Вы видели, как построены relations например на LedgerJournalTrans ?
__________________
-ТСЯ или -ТЬСЯ ? |
|
15.08.2006, 15:36 | #12 |
Участник
|
Цитата:
Сообщение от Vadik
Что вы набросились на человека со своим X++..
IvanS, Вы видели, как построены relations например на LedgerJournalTrans ? Relations конечно хорошо, но мне нужно как раз, этот метод писать через Х++ в лукапе датасорса Сейчас мне нужно добавить в query датасорсы, установить линки. |
|
15.08.2006, 16:33 | #13 |
Сенбернар
|
Цитата:
Сообщение от IvanS
Сейчас мне нужно добавить в query датасорсы, установить линки.
http://www.axforum.info/forums/showthread.php?t=28 Последний раз редактировалось RVS; 15.08.2006 в 16:36. |
|
15.08.2006, 16:35 | #14 |
Участник
|
Цитата:
Сообщение от belugin
здесь есть пример лукапа с запросом: http://erpkb.com/Axapta/Lookup
|
|
|
За это сообщение автора поблагодарили: belugin (5). |
15.08.2006, 18:45 | #15 |
Moderator
|
Цитата:
Сообщение от RVS
Именно датасорсЫ? Много? Тогда SysTableLookup Вам не поможет, не умеет он больше одного датасорса. Рисуйте формочку.
__________________
Андрей. |
|
16.08.2006, 08:06 | #16 |
Участник
|
Цитата:
Сообщение от Dron AKA andy
Ну почему же не умеет? Речь ведь идет не об отображении нескольких датасорсов на форме лукапа, а о формировании сложного query. Для переопределения умолчательного query есть метод SysTableLookup.parmQuery().
|
|
16.08.2006, 09:21 | #17 |
Member
|
А запрос как выглядит? Какие joins используются?
__________________
С уважением, glibs® |
|
16.08.2006, 09:42 | #18 |
Участник
|
Цитата:
Сообщение от glibs
А запрос как выглядит? Какие joins используются?
Я думаю тут лучше написать название полей и табл которые необходимо использовать: Вот такая иерархия Иниц док- Проекты- Этапы- Заявки (слева на право связи один ко многим). В Иниц док. есть поле клиент и в Заявках тоже оно есть. Вот как раз при выборе на форме заявок поля имя клиента, нужно чтобы фильтровались записи Этапов |
|
16.08.2006, 09:57 | #19 |
Member
|
Насчет типов join я так и не понял, но иногда мне помогала такая вещь.
Создается view по нескольким таблицам. Оно же используется в качестве таблички, которая засовывается в sysTableLookup. Можете попробовать такой вариант, если у вас везде (inner) join.
__________________
С уважением, glibs® |
|