|
![]() |
#1 |
Участник
|
Еще отредактировал мой второй пост.
Подведу итоги этой вакханалии: 1) localQuery.queryFilter(i) не показывает пользовательские фильтры, наложенные на заголовки заказов, если текущий FormRun получен из строк заказов. Для этого надо каким-то образом получить часть формы SalesTableListPage, которая отображает заголовки заказов. 2) localQuery.dataSourceNo(1).range(i) не показывает пользовательские фильтры, но я бы мог обойтись и пунктом 1). |
|
![]() |
#2 |
Участник
|
Думаю, что можно примерно так :
1. Определяем является ли текущий объект FormRun Part'ом формы, код можно смотреть вот тут Refreshing form parts 2. Если это part, то через вызов formRun().args().caller() получаем основной экземпляр объекта формы типа ListPage
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: Ace of Database (10). |
![]() |
#3 |
Участник
|
Спасибо! Вы решили мою задачу.
Получается, что дочерние части формы связаны с родителькой частью через args.caller() Вот так можно получить пользовательские фильтры, установленные на шапках заказа, находясь в той части формы, которая относится к строкам заказов: X++: void new(FormRun _callerFormRun) { Query localQuery; FormDatasource formDatasource; int i; PartList partList; Object obj; ; partList = new PartList(_callerFormRun); if (!partList.partCount()) //если на форме нет частей, то предполагаем, что эта форма - часть родительскрй формы, которая находится в args().caller() { obj = _callerFormRun.args(); if (obj) obj = obj.caller(); //получаем родительскую форму if (obj) { formDatasource = obj.dataSource(1); localQuery = formDatasource.queryRun().Query(); info(localQuery.datasourceNo(1).toString()); //достаем запрос родительской формы for (i = 1; i <= localQuery.queryFilterCount(); i++) { info(localQuery.queryFilter(i).toString()); //достаем пользовательские фильтры из родительской формы //if (localQuery.queryFilter(i).dataSource().name() == qbds.name()) // Query.addQueryFilter(qbds, localQuery.queryFilter(i).field()).value(localQuery.queryFilter(i).value()); } } } } Последний раз редактировалось Ace of Database; 27.03.2017 в 14:27. |
|
![]() |
#4 |
Участник
|
Вот так получается универсально получить пользовательские фильтры из родительской части формы. Исключаются "случайные связи", если форма просто была вызвана из другой формы, для которой она не является частью.
X++: void new(FormRun _callerFormRun) { Query localQuery; FormDatasource formDatasource; int i; PartList partList; Object obj; boolean partExists(FormRun _formRun, str _name) { PartList partListLocal = new PartList(_formRun); FormRun part; int j; for(j = 1; j <= partListLocal.partCount(); j++) { part = partListLocal.getPartById(j); if (part && part.name() == _name) { return true; } } return false; } ; partList = new PartList(_callerFormRun); if (!partList.partCount()) //если на форме нет частей, то предполашаем, что эта форма - часть родительскрй формы, которая находится в args().caller() { obj = _callerFormRun.args(); if (obj) obj = obj.caller(); //получаем родительскую форму if (obj && (obj is FormRun)) { if (partExists(obj, _callerFormRun.name())) //проверяем, что текущая форма действительно является частью родительской формы, а не просто вызвана из другой формы { formDatasource = obj.dataSource(1); localQuery = formDatasource.queryRun().Query(); info(localQuery.datasourceNo(1).toString()); //достаем запрос родительской формы for (i = 1; i <= localQuery.queryFilterCount(); i++) { info(localQuery.queryFilter(i).toString()); //достаем пользовательские фильтры из родительской формы //if (localQuery.queryFilter(i).dataSource().name() == qbds.name()) // Query.addQueryFilter(qbds, localQuery.queryFilter(i).field()).value(localQuery.queryFilter(i).value()); } } } } } |
|
|
За это сообщение автора поблагодарили: Jorj (1). |