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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.03.2017, 12:49   #1  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Еще отредактировал мой второй пост.
Подведу итоги этой вакханалии:
1) localQuery.queryFilter(i) не показывает пользовательские фильтры, наложенные на заголовки заказов, если текущий FormRun получен из строк заказов. Для этого надо каким-то образом получить часть формы SalesTableListPage, которая отображает заголовки заказов.
2) localQuery.dataSourceNo(1).range(i) не показывает пользовательские фильтры, но я бы мог обойтись и пунктом 1).
Старый 27.03.2017, 13:33   #2  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Думаю, что можно примерно так :

1. Определяем является ли текущий объект FormRun Part'ом формы, код можно смотреть вот тут Refreshing form parts

2. Если это part, то через вызов formRun().args().caller() получаем основной экземпляр объекта формы типа ListPage
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: Ace of Database (10).
Старый 27.03.2017, 14:25   #3  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Спасибо! Вы решили мою задачу.
Получается, что дочерние части формы связаны с родителькой частью через 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.
Старый 27.03.2017, 14:57   #4  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Вот так получается универсально получить пользовательские фильтры из родительской части формы. Исключаются "случайные связи", если форма просто была вызвана из другой формы, для которой она не является частью.

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).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Формы типа ListPage Artikov DAX: Программирование 1 14.06.2016 16:21
как узнать имя открываемый формы???? Didar DAX: Программирование 4 24.01.2008 19:23
как узнать имя открываемый формы???? Daido DAX: Программирование 9 02.08.2007 17:20
Передача ссылки на формы через SysInfoAction_FormRun Artem Mikhailov DAX: Программирование 3 12.01.2007 07:17
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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