Artifact 691d8ac2ec96e4327e1f7dbde437826a396fb704:
- File jump2refs.js — part of check-in [6ec4bc0bf3] at 2013-02-27 08:16:14 on branch trunk — Создан скрипт для автоматизации перехода к объектам метаданных по командам 'Поиск ccылок на объект' и 'Поиск ссылок в объекте', с возможностью возврата обратно (user: orefkov size: 3123)
$engine JScript $uname jump2refs $dname Переход к ссылкам метаданных $addin global $addin stdlib $addin stdcommands global.connectGlobals(SelfScript); stdlib.require("SelectValueDialog.js", SelfScript); var refs, lastObjects = []; SelfScript.self['macrosПерейти к ссылке ИЗ'] = function () { return doJump(stdcommands.Frntend.FindRefsFrom); } SelfScript.self['macrosПерейти к ссылке НА'] = function () { return doJump(stdcommands.Frntend.MDSearchRefs); } SelfScript.self['macrosПерейти обратно'] = function () { if(!lastObjects.length) return false lastObjects.pop().activateInTree() return true } function onMessage(params) { refs.push(params.text) params.cancel = true } function onDoModal(dlgInfo) { dlgInfo.cancel = true dlgInfo.result = mbaOK } function findObject(root, name) { //Message(name) var names = name.split(".") for(var idx = 0; idx < names.length; idx += 2) { var mdc = root.mdclass for(var i = 0, c = mdc.childsClassesCount; i < c; i++) { var cc = mdc.childClassAt(i) if(cc.name(1, false) == names[idx]){ root = root.childObject(i, names[idx + 1]) break } } } return root } function doJump(command) { // Для начала проверим, что мы в окне метаданных var view = windows.getActiveView() var state = command.getState(view) if(!state || !state.enabled) return false refs = [] // Ставим перехват на вывод в окно сообщений events.connect(Designer, "onMessage", SelfScript.self) // Подавляем показ диалога events.connect(windows, "onDoModal", SelfScript.self) command.sendToView(view) events.disconnect(Designer, "onMessage", SelfScript.self) events.disconnect(windows, "onDoModal", SelfScript.self) //Message(refs[0]); var choice if(refs.length < 2) { MessageBox("Ссылок нет") return false } var rootObject = view.mdObj.container.rootObject lastObjects.push(findObject(rootObject, refs[0].match(/"(.+)"/)[1])) if(refs.length == 2) choice = refs[1] else { refs.splice(0, 1) var dlg = new SelectValueDialog("Выберите объект для перехода!", refs); if (dlg.selectValue()) choice = dlg.selectedValue; else return false } var mdObj = findObject(rootObject, choice) mdObj.activateInTree() return true } //{ Горячие клавиши по умолчанию. function getPredefinedHotkeys(predef) { predef.setVersion(1); predef.add('Перейти к ссылке ИЗ', "Ctrl + Enter"); predef.add('Перейти обратно', "Ctrl + Shift + Enter"); } //} Горячие клавиши по умолчанию.