| 
			
			 | 
		#1 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
			
			
			HK Framework
			 
			
			Содержание: 
		
		
		
			
 HK Framework - что это такое: 
 Как пользоваться: В тексте буду использовать сокращение HK (Hot key или Горячая клавиша). Комбинации HK настраивается в форме HKSetup. По-умолчанию, форма вызывается нажатием "Ctrl + ~", либо запуском класса HKManager прямо из АОТ. Описание полей формы: 
 Как добавить новый HK: 
 * - под запуском таблицы понимается открытие её в обозревателе. ** - примеры методов-обработчиков можно посмотреть в умомянутых классах. *** - Форма HKSetup представляет собой диалог, поэтому все изменения вступают в силу только после нажатия "OK". Базовая комплектация HK Framework: Для удобства, существующую функциональность, уже входящую в состав HK Framework буду называть плагинами. 
 Все HK, приведенные в описаниях плагинов можно переназначить в на уровне пользовательского интерфейса в форме HKSetup. Самое главное - запомнить одну горячую клавишу - "Ctrl+~". По ней откроется форма HKSetup, где всегда можно увидеть весь список HK. Недостатки: - HK Framework не использует внешние компоненты (DLL, ActiveX). Вследствие этого, он не перекрывает стандартные горячие клавиши. Т.е. если Вы назначите какой-то HK, который пересекается со стандартным, то стандартный HK отработает параллельно. Это накладывает ограничение на набор возможных комбинаций клавиш, который вы захотите использовать. Некоторые комбинации клавиш вообще не работают. Например, любая комбинация с клавишей ALT в редакторе X++ не работает (удобно использовать Ctrl). В общем, к процессу назначения новой горячей клавиши нужно подойти творчески ![]() - детектирование комбинации клавиш несколько отличается от стандартного перехвата. Здесь важен момент одновременного нажатия клавиш, в то время как в стандарте достаточно быстрой последовательности нажатия. Поэтому для некоторых пользователей чувствительность может показаться недостаточной. Инсталляция: Данная версия тестировалась на DAX 4.0, 5.0. Для 3-ки нужно чуть подпилить. В скором времени адаптирую. Инсталляция очень проста - две простых модификации стандартных методов: \Classes\ClassFactory\formRunClassOnClient: X++: client static FormRun formRunClassOnClient(Args args) { SysSetupFormRun sysSetupFormRun; ; // HK "Hot key framework", evo 30.07.2009 --> if (args && args.name() == formstr(SysEditorGotoLine)) { return HKManager::editorCatchObject(args); } // HK "Hot key framework", evo 30.07.2009 <-- sysSetupFormRun = SysSetupFormRun::construct(args); return sysSetupFormRun; } X++: client static FormRun formRunClassOnClient(Args args) { SysSetupFormRun sysSetupFormRun; ; // HK "Hot key framework", evo 30.07.2009 --> if (args && args.name() == formstr(SysEditorGotoLine)) { return HKManager::editorCatchObject(args); } // HK "Hot key framework", evo 30.07.2009 <-- sysSetupFormRun = SysSetupFormRun::construct(args); return sysSetupFormRun; } Спасибо: Спасибо за внимание. Надеюсь, большое количество букв не сильно утомило и HK Framework для кого-нибудь окажется полезным.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: AlGol (1), denny (1), Logger (15), Denicce (1), andrewK (1), konopello (3), Link (1), Kolja (1), madm (1), Stainless (1), alex55 (1), _scorp_ (4), SRF (3), JeS (1), Eaglet (1), Silphidae (1), pedrozzz (1), Dumfag (1). | |
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
При импорте проекта в DAX 4.0 (Aplication Version 4.0.1633.11) возникли ошибки компиляции HKProject\buildAOTStruct, ошибка в строке X++: TreeNode methodNode, classNode; X++:     TreeNode        methodNode;
    TreeNode        classNode;Цитата: 
	
		
			Класс --> Класс родитель --> Класс родитель --> ... --> Базовый класс 
		
	 
![]() Предлагаю такой вариант устранения помарки(HKAOT\aotJump), вместо : X++: case UtilElementType::Class: sysDictClass = new SysDictClass(className2Id(treeNode.treeNodeName())); if (sysDictClass && sysDictClass.extend()) treeNodeTargetPath = strFmt(#ClassNamePath, classid2name(sysDictClass.extend())); break; X++: case UtilElementType::Class: sysDictClass = new SysDictClass(className2Id(treeNode.treeNodeName())); if (sysDictClass && sysDictClass.extend()) treeNodeTargetPath = strFmt(#ClassNamePath, classid2name(sysDictClass.extend())); else { return; } break;  ),подразумевался кодX++: //Event fired by kernel when the client goes idle. //It is not fired during CTRL-Break dialog. void onEventGoingIdle() { this.operationProgressClear(); this.endLengthyOperation(true); // HK "Hot key framework", evo 30.07.2009 --> HKManager::startHKManager().run(false); // HK "Hot key framework", evo 30.07.2009 <-- } 
				__________________ 
		
		
		
		
	Sergey Nefedov  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 SRF: Спасибо, всё верно. Шероховатости наверное ещё будут, не было времени обкатать. 
		
		
		
		
		
		
		
	Ещё хочу добавить, что при установке в 5.0 (вообще для однозначности - при первой установке), нужно удалить метод \Classes\HKProject\aotStructList. При первом использовании плагина aot2project, он сгенерируется сам.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			При использовании функции добавления текущего элемента AOT в текущий проект, при копировании из другого проекта, элемент копируется но группы создаются некорректно
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Разобрался в чем было дело, просто в различных приложениях узлы AOT в проекте называются по-разному, возможные варианты: 
		
		
		
		
		
		
		
	
 X++: ProjectGroupNode findOrCreateProjectGroup(TreeNode _treeNode)
{   #AOT
    ProjectGroupNode    ret, groupNode, bufGroupNode;
    TreeNodePath        path;
    TreeNodeName        groupName;
    container           pathCon;
    if (!projectNode || !_treeNode)
        return null;
    // + KAnt
    //path    = strReplace(_treeNode.treeNodePath(), ' ', '_');
    path    = _treeNode.treeNodePath();
    // - KAnt
    pathCon = str2con(path, #AOTRootPath);
    pathCon = condel(pathCon, 1, 1); // remove first delimiter
    groupNode = projectNode;
    while (conlen(pathCon) > 1)
    {
        groupName = conpeek(pathCon, 1);
        bufGroupNode = groupNode.AOTfindChild( groupName );
        // + KAnt
        if(!bufGroupNode)
        {
            bufGroupNode = groupNode.AOTfindChild( strReplace(groupName, ' ', '_') );
        }
        if(!bufGroupNode)
        {
            bufGroupNode = groupNode.AOTfindChild( strReplace(groupName, ' ', '') );
        }
        // - KAnt
        if (!bufGroupNode)
        {
            bufGroupNode = groupNode.AOTadd(groupName);
            bufGroupNode.projectGroupType(SysTreeNode::path2ProjectGroupNodeType(_treeNode.treeNodePath()));
            this.changeGroupPos(bufGroupNode);
        }
        groupNode = bufGroupNode;
        pathCon = condel( pathCon, 1, 1);
    }
    ret = groupNode;
    return ret;
} | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			На формах настроенные горячие клавиши не срабатывают.  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попытался настроить вызов формы заказов по Ctrl+5. Открыл произвольную форму - нажимаю сочетание - никакой реакции
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			проект ещё разрабатывается? окончательный варинт можно скачать где-нибудь? 
		
		
		
		
		
		
		
	заметил, что блог http://earlionakru.blogspot.com/ с этим проектом тоже давно не обновлялся...  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Больше не разрабатывается, ничего нового не придумал. На блоге последняя версия
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Британский учённый 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Буду рад поделиться с общественностью, но не вижу смысла плодить версии да и авторское право не хочу нарушать. Если есть время и желание расширить функционал могу выложить здесь или лучше выслать на мыло. Вкратце что основного я добавил: 1) Новый класс для управления общими событиями: AOTImport - импорт из АОТ, для версии ниже 2009 mainMenu - вызов главного меню openDefaultProject - открыть проект по умолчанию leftSideFull, leftSideLeft, leftSideRight, rightSideFull, rightSideLeft, rightSideRight - управление окнами (Tabax) 2) Добавлены методы в для управления AOT: aot2compare - вызов утилиты сравнения aot2xRef - вызов перекрестных ссылок copyPath2clipboard - копировать полный путь (Tabax) newWindow - открыть новое окно 3) Добавлены методы для управления редактором goToDeclaration - известный скрипт, взят с форума openObject - расширил openNewWindow 4) Добавил на форму интеграцию с настройками девелоперского функционала. 
				__________________ 
		
		
		
		
	Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Британский учённый 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Еще добавил фикс класса Info\onEventGoingIdle - проверка активного окна, что бы не срабатывали горячие клавиши, когда Аксапта свернута или открыто несколько клиентов. 
		
		
		
		
		
		
			X++: // HK "Hot key framework", mxk 30.07.2009 --> if (winApi::getForegroundWindow() == infolog.hWnd()) { DEV_HKManager::startHKManager().run(false); } // HK "Hot key framework", mxk 30.07.2009 <-- 
				__________________ 
		
		
		
		
	Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			На AX2012 никто еще не портировал эти разработки?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Апгрейд в целом сделан, но я не выклыдывал - нет временени. Если у кого-то есть силы довести до "релиза", вышлю обновленный исходник. Из ниансов: 
		
		
		
		
		
		
		
	- HK больше не работает в редакторе X++ (нужен анализ, возможно ли сейчас его прикрутить) - Добавлен TaskList, Где видна история всех сделанных модификаций - Form Digger и HK Framework теперь одно целое.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Ace of Database (4), Stainless (1). | |
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В редакторе X++ можно теперь использовать расширения для VS. Может и хоткеи так добавятся?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (2). | |
| 
			
			 | 
		#15 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от belugin
			 
 
			В редакторе X++ можно теперь использовать расширения для VS. Может и хоткеи так добавятся? 
		
	 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Новая версия для 2012 R2, R3, от Декабря 2014г. 
		
		
		
		
		
		
		
		
			Вложение 9316 Что нового: 
 По установке: 
 По работе: 
 Вложение 9313 Еще пару слов: Вероятнее всего это последняя версия, по причинам: 
 Последний раз редактировалось DSPIC; 28.09.2017 в 01:50.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Logger (10), Ace of Database (10), Link (5), alex55 (5), S.Kuskov (5). | |
| 
			
			 | 
		#17 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			По просьбе qwosy выкладываю исходник HKFramework2012R3.dll 
		
		
		
		
		
		
		
		
			Вложение 10886 - если не затруднит, выложите сюда пересобранную версию и исходник для CU11 - если возможно, переименуйте финальную dll в Microsoft.Dynamics.AX.Editor.HKFramework.dll, ибо режет глаз - проект под VS2010, можно переделать в VS2015 Последний раз редактировалось DSPIC; 28.09.2017 в 01:50.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (2). | |
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Собранная в VS2010 рабочая Microsoft.Dynamics.AX.Editor.HKFramework.dll с библиотеками от AX 2012 R3 CU11: 
		
		
		
			
  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: DSPIC (14). | |
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а может положите на github?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Боец 
		
			
	 | 
	
	|
| 
	
 | 
| Теги | 
| ax2009, ax4.0, formdigger, hk, hkframework, hotkey, горячие клавиши, полезное, утилиты | 
| 
	
	 | 
	
		
		
  |