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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.01.2010, 09:06   #6  
Timofey_k is offline
Timofey_k
Microsoft Dynamics
Аватар для Timofey_k
Соотечественники
Сотрудники Microsoft Dynamics
 
20 / 50 (2) ++++
Регистрация: 04.07.2006
Адрес: Sydney, Australia
Поиск по тексту - это как-то не элегантно :-)

Я для тех же целей когда-то вот такой скриптик нарисовал. Скрип строит перекрестные ссылки для всего AOT объекта (если вызван из статического метода, то только по данному методу) и для всех его предков (если объект - класс). Потом показывает сслыки в форме и фильтрует записи по названию-типу-предку выделенной переменной. Если выделения нет, то показывает все ссылки. Удобно тем, что можно быстро найти где переменная объявлена или инициализирована. Некоторый недостаток в том, что код статических методов тоже попадет в перекрестные ссылки и если названия переменных совпадут, то будут найдены лишние вхождения (при поиске по тексту естественно будет то же самое).

Наглядный пример: откройте в редакторе \Classes\InventUpd_Reservation\updateNow, выделите переменную movement и вызовите скрипт. Вхождения из \Classes\InventUpd_Reservation\updateReserveFromForm не будут относиться к выделенной переменной, но особых проблем не вызовут.

X++:
//Show cross-references, complete or filtered by selection, for a class and its super classes
#TreeNodeSysNodeType
void addIns_CrossReferencesSelected(Editor e)
{
    xRefUpdateTmpReferences     xTmpReferences = new xRefUpdateTmpReferences();
    TreeNode                    currentNode    = TreeNode::findNode(e.path());

    SysDictClass                sysDictClass;

    Args                        formRunArgs;
    FormRun                     formRun;
    FormDataSource              fds;

    xRefTmpReferences           refTable;

    xRefName                    selectedText;
    xRefPath                    currentNodePath;

    int                         startLine = e.selectionStartLine();
    int                         startCol  = e.selectionStartCol();
    int                         endCol    = e.selectionEndCol();
    ;
    if (e.selectionStartLine() == e.selectionEndLine() && startCol != endCol)
    {
        e.firstSelectedLine();
        selectedText = strLRTrim(subStr(e.getLine(), e.selectionStartCol(), endCol-startCol));
    }

    currentNodePath = currentNode.treeNodePath();
    if (currentNode.applObjectType() != UtilElementType::ClassStaticMethod &&
        currentNode.applObjectType() != UtilElementType::TableStaticMethod)
    {
        while(! currentNode.AOTObjectNode())
        {
            currentNode = currentNode.AOTparent();
        }
    }

    xTmpReferences.fillTmpxRefReferences(currentNode);

    while (currentNode && currentNode.sysNodeType() == #NT_CLASS)
    {
        sysDictClass = new SysDictClass(new SysDictClass(currentNode.applObjectId()).extend());
        currentNode  = sysDictClass ? sysDictClass.treeNode() : null;

        if (currentNode)
        {
            xTmpReferences.fillTmpxRefReferences(currentNode);
        }
    }

    formRunArgs = new Args(formstr(xRefTmpReferences));
    formRunArgs.parmObject(xTmpReferences);
    formRun     = classfactory.formRunClass(formRunArgs);
    formRun.init();

    if (selectedText)
    {
        refTable = xTmpReferences.allTmpxRefReferences();

        select firstonly refTable
            where refTable.line   == startLine
               && refTable.Column == startCol
               && refTable.name   == selectedText
               && refTable.Path   == currentNodePath;

        fds = formRun.dataSource();
        fds.query().dataSourceNo(1).addRange(fieldNum(xRefTmpReferences, Kind)).value(queryValue(refTable.Kind));
        fds.query().dataSourceNo(1).addRange(fieldNum(xRefTmpReferences, name)).value(queryValue(refTable.name));
        fds.query().dataSourceNo(1).addRange(fieldNum(xRefTmpReferences, ParentName)).value(queryValue(refTable.ParentName));

        formRun.design().caption(strfmt("Complete cross-reference for %1 '%2'", refTable.Kind, refTable.name));
    }

    formRun.run();
    formRun.detach();
}
За это сообщение автора поблагодарили: mazzy (5), alex55 (5), Kabardian (3).
Теги
developer tool, editor script, tools, законченный пример, инструменты, полезное, разработка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kashperuk Ivan: AxGoToDeclarationI haven't posted in a while. W... Blog bot DAX Blogs 2 07.06.2010 00:06
Kashperuk Ivan: Running a class from AOT or "How to assign a class to an action menu item?" Blog bot DAX Blogs 0 22.10.2009 20:05
Kashperuk Ivan: “Go to main table” on a RunBase dialog control Blog bot DAX Blogs 0 25.08.2009 08:05
Kashperuk Ivan: Description of ClassBuild class:Today I want to ... Blog bot DAX Blogs 0 26.01.2007 05:51
axaptafreak: AOT search within search results Blog bot DAX Blogs 0 16.11.2006 17:40
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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