12.11.2014, 20:10 | #1 |
Участник
|
Расширеный фильтр
Добрый день. Кто нить знает алгоритм автоматического добавления полей в расширенный фильтр.
Есть таблица. В ней полей 8 (RefRecId). Создаю простую форму. Кидаю в качестве источника свою таблицу. Запускаю форму, Ctrl+F3 и вижу там 5 полей...одно из них входит в уникальный индекс. Мне нужно чтоб там были все 8 полей. Как сделать? С группами Autolookup играл. Relation смотрел....2 идентичных поля...всё одинаково, но одно попало, другое нет. Конечно есть выход вручную всё сгенерировать, но тогда нужно на форме линковать таблицы к которым ведут RefRecId поля и по ним уже строить фильтр...но это сильно бьёт по производительности. Ax2012R3 |
|
12.11.2014, 22:50 | #2 |
Участник
|
Смотрите заполнение группы AutoIdentification в таблицах, на которые построены релейшены
Насчет "вручную сгенерировать" - рейнж или фильтр на поле с форейнкеем будет работать по таблице связи. Таблицы добавлять в датасорс для этого не надо
__________________
Axapta v.3.0 sp5 kr2 |
|
13.11.2014, 09:23 | #3 |
Участник
|
Цитата:
Если не добавлять датасорс, то на форме запроса в значениях будут RecId, а не поле по ReplecementKey. |
|
13.11.2014, 09:39 | #4 |
Участник
|
Похоже, у вас связи с некоторыми таблицами не определяются как ForeignKey
Проверьте релейшены и таблицы, для которых связи не установились Для проверки, можно воспользоваться методом DictField.isSurrogateForeignKey()
__________________
Axapta v.3.0 sp5 kr2 |
|
13.11.2014, 10:47 | #5 |
Участник
|
Цитата:
Сообщение от AndyD
Похоже, у вас связи с некоторыми таблицами не определяются как ForeignKey
Проверьте релейшены и таблицы, для которых связи не установились Для проверки, можно воспользоваться методом DictField.isSurrogateForeignKey() |
|
13.11.2014, 10:51 | #6 |
Участник
|
Цитата:
Сообщение от AndyD
Для проверки, можно воспользоваться методом DictField.isSurrogateForeignKey()
Попробуйте пересоздать один из отсутствующих в запросе релейшенов руками При этом, обязательно добавляйте новые отношения как ForeignKey
__________________
Axapta v.3.0 sp5 kr2 |
|
13.11.2014, 11:25 | #7 |
Участник
|
Пробовал конечно...всё имеет связь. релейшены есть. Может есть ограничение на кол-во автоматически добавляемых полей в расширенный фильтр?
|
|
13.11.2014, 11:30 | #8 |
Участник
|
Т.е. для всех полей, для которых настроены релейшены, DictField.isSurrogateForeignKey() возвращает TRUE?
Вопрос не в том, есть у вас релейшены или нет, а в том, правильные ли они Проверить просто - удалите временно релейшен для таблицы, которая есть в запросе и проверьте, появится ли какой-либо из отсутствующих
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 13.11.2014 в 11:32. |
|
|
За это сообщение автора поблагодарили: raniel (1). |
13.11.2014, 13:21 | #9 |
Участник
|
AndyD Вы похоже правы по поводу релейшенов. В классе SysQyeryForm, в методе buildRange есть такой кусок в самом начале
X++: dataSourceCnt = clientSysQueryEdit.query().dataSourceCount(); rangeNextSortNo = new Map(Types::Integer, Types::Integer); rangeList = SysQuery::getDimensionRangesFromQuery(clientSysQueryEdit.query()); for(i = 1; i <= dataSourceCnt; i++) { queryBuildDataSource = clientSysQueryEdit.query().dataSourceNo(i); |
|
13.11.2014, 13:31 | #10 |
Участник
|
Проблему решил. Всё было просто.... список полей для фильтра формировался автоматический по всем Ref-полям которые выведены на форму :-)
Спасибо! Вопрос закрыт. |
|
13.11.2014, 13:32 | #11 |
Участник
|
Вы не туда смотрите
Вас должен интересовать метод buildImplicitReplacementsFromTable() класса SysQueryForm X++: if(dictField && !dictField.isSystem() && dictField.isSurrogateForeignKey() && dictField.visible() && !dictField.isDimensionField()
&& securityRights.fieldAccessRight(dictTable.name(),dictField.name()) != AccessRight::NoAccess
) А так же, стоит посмотреть на права доступа
__________________
Axapta v.3.0 sp5 kr2 |
|