19.01.2012, 15:46 | #1 |
Участник
|
Как программно "выделить" объект AOT? Или про глюки на открытии формы поиска
Ядро AX 2009 SP1 RU7. Есть вспомогательная формочка для поиска и открытия проектов, которая представляет их в табличном виде (через UtilElements) с фильтрацией и проч. и открывает по щелчку на нужном проекте в grid'е посредством вызова TreeNode.AOTrun(). После открытия проекта у меня лично часто возникает потребность что-нить поискать в методах объектов, которые в нем собраны, я жму Ctrl-F, открывается форма поиска (SysAotFind). Все бы хорошо, но вот засада: в ней initialTopNode (определяющий "Искать в" - откуда начинать поиск) указывает вовсе не на проект, а на другой объект АОТ, на котором до открытия формы поиска был "фокус". В моем случае это зачастую вообще почему-то оказывается пункт меню в "Избранном" (\Options\Menus\User Menus\Избранное\Название вспомогательной формочки поиска проектов).
Щелкать каждый раз по только что открытому окну проекта и потом опять по форме поиска, чтобы она "поняла", где надо искать, очень муторно и тяжко. В то же время если открывать проект "штатно" из окошка Projects, то с поиском все в порядке. Отладчик показал, что в описанной выше ситуации форма поиска берет данные из экземпляра класса LastAotSelection, а тот, видимо, совершенно не интересуется, что я только что дернул на каком-то TreeNode'е метод AOTrun(). Отсюда вопрос: как бы вот так... сэмулировать выбор проекта в AOT, чтобы LastAotSelection возвращал именно его? Теоретически еще остается извратный вариант найти предыдущее активное окно, дочернее по отношению к инфологу, получить его заголовок, проверить заголовок на соответствие шаблону "Проект %1", найти TreeNode для соотв. проекта и подпихнуть его в initialTopNode формы поиска, но этот вариант хотелось бы оставить в качестве "плана Б". |
|
19.01.2012, 16:17 | #2 |
Участник
|
А infolog.getSelectedNodes().toString() что вернёт в вашем случае?
|
|
19.01.2012, 16:58 | #3 |
Боец
|
Я бы сделал проще: На гриде Ваше вспомогательной форма добавляем кнопку "Find", после клика на которую вызывается SysAotFind с уже известным initialTopNode. Всё.
Если кнопку не хочется, можно тот же самый Shift+DoubleClick. |
|
|
За это сообщение автора поблагодарили: gl00mie (3). |
19.01.2012, 20:35 | #4 |
Участник
|
Код: <(C) TreeNode: Path: \Options\Menus\User Menus\Избранное\Название вспомогательной формочки поиска проектов> |
|
15.02.2012, 18:20 | #5 |
Участник
|
Как программно открыть форму поиска по узлам проекта
Дошли-таки руки реализовать задумку: открывать проект и сразу форму поиска по нему, но в этом деле обнаружился один нюанс В общем-то все просто:
X++: Args args; UtilElements ue; ProjectNode projectNode; ; select firstonly ue where ue.utilLevel == currentAOLayer() && ue.recordType == UtilElementType::SharedProject && ue.createdBy == curuserid() ; if (ue) { projectNode = xUtilElements::getNode(ue); if (projectNode) { projectNode = projectNode.getRunNode(); // NB! без этого поиск не заработает args = new Args(); args.parmObject(SysContextMenuTreeNode::newNode(projectNode)); new MenuFunction(menuitemdisplaystr(SysAotFind), MenuItemType::Display).run(args); } } |
|
|
За это сообщение автора поблагодарили: alex55 (1), S.Kuskov (2). |