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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.08.2008, 15:01   #1  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Вообщем на досуге посидел, надеюсь, что поможет.
В классе SysTableLookup модифицировал метод buildGrid к такому виду:
X++:
protected FormBuildGridControl buildGrid(FormBuildGridControl _formBuildGridControl,
                                         FormBuildDataSource  _formBuildDataSource,
                                         Form                   form) //передаем форму в метод для поиска ее ноды
{
    FormBuildControl                formBuildControl;
    Object                          obj;
    boolean                         returnItem;
    boolean                         method;
    int                             fieldId;
    int                             i, j;
    //-->
    TreeNode                        gridNode, controlNode, methodsNode;
    MemberFunction                  newMethod;
    str                             source;
    TreeNodeIterator                iterator;
    //<--
    ;

    for (i = 1; i <= conlen(lookupItems); i++)
    {
        [fieldId, returnItem, method] = conpeek(lookupItems, i);

        if (!method)
        {
            formBuildControl = _formBuildGridControl.addDataField(_formBuildDataSource.id(), fieldId);

            if (i == 1 || returnItem)
            {
                controlIdx = formBuildControl.id();
                lookupField = fieldId;
            }

            obj = formBuildControl;

            if (labels[i])
            {
                obj = formBuildControl;
                obj.label(labels[i]);
            }

            //Дойдем до созданного контрола
            gridNode = form.AOTfindChild('Designs');
            gridNode = gridNode.AOTfindChild('Design');
            gridNode = gridNode.AOTfirstChild();

            iterator = gridNode.AOTiterator();
            controlNode = iterator.next();
            while (controlNode)
            {
                If (controlNode.AOTname() == obj.name()) break;
                controlNode = iterator.next();
            }

            //Перекроем метод sort
            methodsNode = controlNode.AOTfindChild('Methods');
            methodsNode.AOTadd('sort');
            newMethod   = methodsNode.aotfindChild('sort');

            source      = 'public int sort(SortOrder _sortDirection) ' +
                            '{ ' +
                            '    ; ' +
                            '    return 0; ' +
                            '}';

            newMethod.AOTsetSource(source, false);
            //Откомпилируем новый метод
            newMethod.AOTcompile(1);
        }
    }

    return _formBuildGridControl;
}
единственное, что не смог победить - это при компиляции метода выскакивает окошко сообщений компилятора...
Вдохновило это

Последний раз редактировалось altap; 08.08.2008 в 16:13.
За это сообщение автора поблагодарили: wojzeh (1).
Старый 08.08.2008, 20:50   #2  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
681 / 517 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от altap Посмотреть сообщение
Вообщем на досуге посидел, надеюсь, что поможет.
В классе SysTableLookup модифицировал метод buildGrid к такому виду:
гут. аккурат то, что требовалось. как-то совсем забыл про возможность добраться до свежесозданного элемента формы через AOT. главное, чтоб не тормозило шибко при работе нескольких пользователей.

чуток переделал код:

в описании переменных добавил:

X++:
   //-->
TreeNode                        gridNode, controlNode, methodsNode;
MemberFunction                  newMethod;
str                             source = 'public int sort(SortOrder _sortDirection){; return 0;}';
TreeNodeIterator                iterator;
//<--
в конце стандартного метода buildGrid добавил:
...
X++:
    //-->
    gridNode = _form.AOTfindChild('Designs');
    gridNode = gridNode.AOTfindChild('Design');
    gridNode = gridNode.AOTfirstChild();
    iterator = gridNode.AOTiterator();
    controlNode = iterator.next(); //methods of the grid control!
    controlNode = iterator.next();
    for (i = 1; i <= conlen(lookupItems); i++)
    {
            methodsNode = controlNode.AOTfindChild('Methods');
            newMethod    = methodsNode.AOTadd('sort');
            newMethod.AOTsetSource(source, false);
            newMethod.AOTcompile(1);
            controlNode = iterator.next();
    }
    //<--
    return _formBuildGridControl;
}
большое спасибо!
__________________
Felix nihil admirari
Старый 15.08.2008, 00:36   #3  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
681 / 517 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от altap Посмотреть сообщение
единственное, что не смог победить - это при компиляции метода выскакивает окошко сообщений компилятора...
я сделал вот так:

X++:
...
    this.setCompilerWarningsOff();
    for (i = 1; i <= conlen(lookupItems); i++)
    {
            //override sort method
            methodsNode = controlNode.AOTfindChild('Methods');
            newMethod   = methodsNode.AOTadd('sort');
            newMethod.AOTsetSource(source, false);
            //compile the method
            newMethod.AOTcompile();
            controlNode = iterator.next();
    }
    this.setCompilerWarningsOn();
...
а отключал-включал не мудрствуя лукаво:
X++:
class SysTableLookupWithoutSort extends SysTableLookup
{
    SysCompilerTarget   target;
}

public void setCompilerWarningsOff()
{
    ;
    target = SysUserInfo::compilerTarget();
    SysUserInfo::compilerTarget(sysCompilerTarget::MessageWindow);
    SysCompilerOutput::setCompilerTarget(sysCompilerTarget::MessageWindow);
    SysCompilerOutput::updateParm();
}

public void setCompilerWarningsOn()
{
    ;
    SysUserInfo::compilerTarget(target);
    SysCompilerOutput::setCompilerTarget(target);
    SysCompilerOutput::updateParm();
}
__________________
Felix nihil admirari
За это сообщение автора поблагодарили: AlGol (2).
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
gatesasbait: How to define a custom lookup form for an extended datatype Blog bot DAX Blogs 0 09.07.2008 22:05
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Нагло глючит lookup Sada DAX: Программирование 1 08.06.2006 10:32
Динамические Lookup формы. Андрей Василюк DAX: База знаний и проекты 0 07.12.2001 07:07
Произвольная Lookup форма Maxim Gorbunov DAX: База знаний и проекты 0 30.11.2001 21:59
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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