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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.05.2008, 16:18   #1  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Открыть в новом окне объект из кода
Если кликнуть в какой-нибудь участок кода и выбрать NewWindows, то система проанализирует на каком объекте мы стоим и откроет этот объект в новом окне.
Если это табличная переменная, система сделает анализ от какой таблицы она образована и откроет эту таблицу.
Выделять объект не надо. Просто ткнуть в этот объект.
Добавить в класс EditorScripts.
X++:
void AA_NewWindow(Editor e)
{
    TreeNode            treeNode = TreeNode::findNode(e.path());
    TmpxRefReferences   tmpxRefReferences;
    Column              nCol = e.columnNo() + 1;
    Line                nLine = e.currentLineNo() + 1;
    ;
    treeNode.AOTmakeXref(1);
    tmpxRefReferences = xRefCreate::makeTmp(infolog.lastxRef());

    select firstonly tmpxRefReferences
        order by Column desc
        where tmpxRefReferences.line == nLine &&
              tmpxRefReferences.Column <= nCol;

    if (!tmpxRefReferences)
        return;

    treeNode = TreeNode::findNode(tmpxRefReferences.path());

    if (treeNode)
        treeNode.AOTnewWindow();
}

Последний раз редактировалось miklenew; 29.05.2008 в 12:17.
За это сообщение автора поблагодарили: mazzy (2), AlGol (1), kashperuk (5), Logger (4), Eldar9x (5), alex55 (1), Dima_Dima (1), Kabardian (5).
Старый 28.05.2008, 17:19   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Ну, проапргейдил бы в том же первом посте или это в учебных (так сказать, эволюционных) целях?

Я пользуюсь на эту тему наработками Вани
Kashperuk Ivan: EditorScripts.addIns_OpenInAOT() script updateHO...
Kashperuk Ivan: AxGoToDeclarationI haven't posted in a while. W...

и "Сидаксом" Макса Белугина
[ANN] Sidax 0.3.6 - многоцелевая боковая панель для Axapta
За это сообщение автора поблагодарили: kashperuk (2).
Старый 28.05.2008, 17:29   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Кстати, если это работает и не требует наличия перекрестных ссылок (вот в этом я сомневаюсь) - то это решение намного быстрее и элегантнее, чем мои наработки.

Завтра попробую поэкспериментировать с этим кодом.
За это сообщение автора поблагодарили: Gustav (11), miklenew (2).
Старый 28.05.2008, 17:40   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от kashperuk Посмотреть сообщение
...и не требует наличия перекрестных ссылок (вот в этом я сомневаюсь)...
Судя по другому топику и схожести идентификаторов в коде, они-таки требуются
Цитата:
Сообщение от miklenew Посмотреть сообщение
Для работы обязательно наличие перекрёстных ссылок.
Старый 28.05.2008, 18:02   #5  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
а куда в 4ке дели ParserClass?
Старый 28.05.2008, 18:44   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
нету его больше (поищите сообщение от Мариночки)
Старый 28.05.2008, 19:02   #7  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Gustav Посмотреть сообщение
Ну, проапргейдил бы в том же первом посте или это в учебных (так сказать, эволюционных) целях?
Согласен. Отредактировал.
Цитата:
Сообщение от Gustav Посмотреть сообщение
Первая не может анализировать какой объект образовал переменную и открывать его. А мой код может.
Вторая понравилась. Спасибо. Буду пользоваться. Автору респект и уважуха.
Цитата:
Сообщение от Gustav Посмотреть сообщение
Как то ставил. Давно. Чёто не понравилось. Мож версия промежуточная была.
Завтра поставлю посмотрю.

Последний раз редактировалось miklenew; 28.05.2008 в 19:19.
Старый 28.05.2008, 19:07   #8  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Кстати, если это работает и не требует наличия перекрестных ссылок (вот в этом я сомневаюсь) - то это решение намного быстрее и элегантнее, чем мои наработки.
Завтра попробую поэкспериментировать с этим кодом.
Требуются, при обращении к xRefNames.
tmpxRefReferences система сама хитро делает без ссылок.
Конструкция
X++:
    treeNode.AOTmakeXref(1);
    tmpxRefReferences = xRefCreate::makeTmp(infolog.lastxRef());
разрывает код на множество мелких кусочков.
За это сообщение автора поблагодарили: kashperuk (2), Logger (3).
Старый 28.05.2008, 20:25   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Огого !

в 3-ке тоже работает !

И без всяких перекрестных ссылок !
Старый 29.05.2008, 09:22   #10  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от miklenew Посмотреть сообщение
Как то ставил. Давно. Чёто не понравилось. Мож версия промежуточная была.
Завтра поставлю посмотрю.
Что не понравилось в sidax-е:
1) нет русскоязычной версии.
2) нет хорошой доки к продукту.
Хоть продукт и серъёзный, работа была проделана огромная, но без этих двух вещей пользоваться наверно не буду. (Ни к чему не призываю, обидеть никого не хочу, просто это дело привычек).
Старый 29.05.2008, 12:00   #11  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от miklenew Посмотреть сообщение
Что не понравилось в sidax-е:
1) нет русскоязычной версии.
2) нет хорошой доки к продукту.
...но без этих двух вещей пользоваться наверно не буду...
Вах! Неужели всплывающие подсказки к десятку кнопиков типа "Recently used projects" или "Go component" возводят такие непреодолимые преграды?
Старый 29.05.2008, 12:01   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Немного модифицированная версия (исправлен небольшой баг) для АХ 2009 и АХ 4.0

X++:
public void addIns_OpenInAOT(Editor e)
{
    #AOT
    TreeNode            treeNode = TreeNode::findNode(e.path());
    xRefTmpReferences   xRefTmpReferences;
    Column              nCol = e.columnNo() + 1;
    Line                nLine = e.currentLineNo() + 1;
    ;
    treeNode.AOTmakeXref(1);
    xRefTmpReferences = xRefCreate::makeTmp(infolog.lastxRef());

    select firstonly xRefTmpReferences
        order by Column desc
        where xRefTmpReferences.line == nLine &&
              xRefTmpReferences.Column <= nCol;

    if (!xRefTmpReferences)
        return;

    treeNode = TreeNode::findNode(xRefTmpReferences.path());

    if (treeNode)
        treeNode.AOTnewWindow();
}
Еще раз спасибо, miklenew - очень понравился метод
За это сообщение автора поблагодарили: miklenew (3), alex55 (1).
Старый 29.05.2008, 12:21   #13  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Немного модифицированная версия (исправлен небольшой баг) для АХ 2009 и АХ 4.0
Спасибо. Твоя версия мне больше понравилась не думал что path даст мне нужный результат.
Исправил в первоначальном посте. Для 3.0.
Разница между 4.0 и 3.0 не большая, похоже в 4.0 не много изменилось имя таблицы TmpxRefReferences стала xRefTmpReferences.
Старый 29.05.2008, 12:30   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А вместо Sidax лучше попробуй Tabax - там точно есть поддержка нескольких языков + больше полезной функциональности и возможность использования плагинов (есть у меня пару интересных )
Старый 29.05.2008, 12:45   #15  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от kashperuk Посмотреть сообщение
А вместо Sidax лучше попробуй Tabax - там точно есть поддержка нескольких языков + больше полезной функциональности и возможность использования плагинов (есть у меня пару интересных )
Спасибо. Tabax понравился буду использовать. Удобнее. Более не заметный.
А как плагины используешь? Добавляешь ещё одну кнопку в панель?
Старый 29.05.2008, 12:55   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вот здесь все написано
http://www.axaptapedia.com/Tabax

По сути, плагины бывают 2 типов:
- картинку нужно положить в определенную папочку (картинка обычно идет вместе с проектом)
- просто загрузить проект - картинка используется или стандартная или извратно хранится непосредственно в ХРО

Перечень плагинов доступных там на страничке тоже приведен
Старый 29.05.2008, 13:26   #17  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Masia еще сделала возможность делать плагины ресурсами (актуально для Ax4, где общей шары у пользователей может не быть), но я пока не вливал эти изменения.

А вот фича - получения скриншота текущего окна внутри аксапты по Shift + кнопка "Копировать"

\Forms\Tabax\Methods\copyActiveWindowScreenShot
X++:
void copyActiveWindowScreenShot()
{
    Image image = new Image();
;
    image.captureWindow(topmost);
    image.clipboardCopy();
}
\Forms\Tabax\Designs\Design\[Group:toolbar]\Button:copyBut\Methods\clicked
X++:
void clicked()
{
    SysContextMenu context;
    TextBuffer buf=new TextBuffer();
    TreeNode node;
    boolean first=true;
    ;
    if (WinApi::isShiftButtonDown() && !WinApi::isControlButtonDown())
    {
        element.copyActiveWindowScreenShot();
    }
    else
    {
        if (element.currentFormRun())
        {
            buf.appendText(element.AxPath_fromFormRun(element.currentFormRun()));
            buf.toClipboard();
        }
        else
        {
            context = element.currentSysContextMenu();
            if (hasSecurityKeyAccess(securityKeyNum(SysDevelopment), AccessType::Edit) && context)
            {
                node = context.first();
                while(node)
                {
                    buf.appendText(
                        (!first ? "\r\n" :"")
                        +
                        (WinApi::isControlButtonDown() ?
                            (WinApi::isShiftButtonDown() ?
                                element.AxPath_fromTreeNode(node)
                                :
                                node.treeNodePath()
                            )
                            :
                            node.treeNodeName()
                        )
                    );
                    node=context.next();
                    first=false;
                }
                context.finalize();
                buf.toClipboard();
            }
        }
    }
}
За это сообщение автора поблагодарили: alex55 (1).
Старый 29.05.2008, 16:44   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,936 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А как в этом случае можно переписать код скрипта gotoDeclaration ?
Т.е. не открыть окно с объявлением типа, а перейти туда где объявлена соответствующая переменная ?
Старый 29.05.2008, 17:02   #19  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
xppscanner + собственный синтаксический разбор
Старый 06.06.2010, 17:06   #20  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
А как в этом случае можно переписать код скрипта gotoDeclaration ?
Т.е. не открыть окно с объявлением типа, а перейти туда где объявлена соответствующая переменная ?
AXGoToDeclarationXRef - утилита перехода к объявлению переменной
Теги
ax2012, ax2012r2, axapta, editor script

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Размер шрифта в окне редактора кода Jox DAX: Администрирование 3 09.11.2022 11:49
Открыть дизайн формы в режиме Edit из кода arnold DAX: Программирование 11 27.11.2008 16:20
Не могу открыть объект в 1с. Tolikv DAX: Программирование 13 17.05.2007 09:41
Вебинтерфейс. Создание строк, их выбор. Отркытие страницы в новом окне IvanS DAX: Программирование 3 27.10.2006 10:54
проблема с настройкой штрихового кода Nic DAX: Функционал 4 27.12.2004 09:04

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

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

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