![]() |
#6 |
Microsoft Dynamics
|
Поиск по тексту - это как-то не элегантно :-)
Я для тех же целей когда-то вот такой скриптик нарисовал. Скрип строит перекрестные ссылки для всего 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, законченный пример, инструменты, полезное, разработка |
|
|