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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.03.2017, 14:25   #1  
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   #2  
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, время: 15:51.