|  | 
|  10.08.2018, 10:34 | #1 | 
| Сенбернар | Открыть проект из кода 
			
			Всем доброго времени суток, Задача: в заголовке сообщения. Открыть окно с проектом из кода. Что делаю: PHP код: 
			То есть по переданному пути find() узел не находит. Вариант с двумя бекслешами в начале path уже пробовал, не помогло  Что я делаю не так? 
				__________________ Best Regards, Roman | 
|  | 
|  10.08.2018, 10:38 | #2 | 
| Участник | 
			
			у нас есть такой метод \Classes\SysTreeNode\findProjectNode X++: /// <summary> /// По указанному пути к проекту возвращает соотв. ProjectNode /// </summary> /// <param name="_projectPath"> /// Путь к проекту в формате TreeNode /// </param> /// <returns> /// объект ProjectNode либо null, если проект не найден или путь не относится к проектам /// NB! возвращается "сырой" объект ProjectNode, чтобы с ним можно было работать, надо вызвать на нем либо getRunNode(), либо loadForInspection() /// см. также SysTestProject::getProjectNode() /// </returns> /// <remarks> /// в отличие от прочих узлов AOT, проекты не ищутся через TreeNode::findNode(), поэтому и нужен отдельный метод /// </remarks> /// <modification projid="GRD_R6084" author="gl00m" date="15.02.2012"> /// Допилить форму проектов текущего пользователя, чтобы автоматом открывать форму поиска по проекту /// DEV_xRefLayer "Пробивать в перекрестных ссылках слой", PKoz 19.12.2017 /// </modification> public static ProjectNode findProjectNode( TreeNodePath _projectPath, CreatedBy _createdBy = '') { identifiername projectName; UtilElementType applObjType; ProjectListNode projectList; ProjectNode ret; ; if (_projectPath != '') { projectName = SysTreeNode::path2ApplObjectName(_projectPath); if (projectName != '') { applObjType = SysTreeNode::path2ApplObjectType(_projectPath); if (applObjType == UtilElementType::SharedProject) { projectList = SysTreeNode::getSharedProject(); } else if (applObjType == UtilElementType::PrivateProject) { projectList = SysTreeNode::getPrivateProject(); } if (projectList) { if (applObjType == UtilElementType::PrivateProject) { ret = projectList.AOTfindChild(substr(projectName, strLen(_createdBy + "_") + 1, 1000) ); } else { ret = projectList.AOTfindChild(projectName); } } } } return ret; } | 
|  | |
| За это сообщение автора поблагодарили: RVS (3), alex55 (3). | |
|  10.08.2018, 13:40 | #3 | 
| Сенбернар | 
			
			Спасибо, работает. Вот котт, может, кому пригодится: X++: static void Job548(Args _args) { str treeNodePath = @'\Projects\Shared\ADMIN_11_BatchJobPeriodic'; ProjectNode projectNode; ; projectNode = SysTreeNode::findProjectNode(treeNodePath).getRunNode(); projectNode.AOTnewWindow(); } 
				__________________ Best Regards, Roman | 
|  | 
|  10.08.2018, 14:11 | #4 | 
| Участник | 
			
			я так X++:     TreeNode    treeNode;
    str         treeNodePath = @'ADMIN_11_BatchJobPeriodic';
    ;
    treeNode = SysTreeNode::getSharedProject().AOTfindChild(treeNodePath);
    if (treeNode)
    {
        treeNode.AOTrun();
    } | 
|  | |
| За это сообщение автора поблагодарили: RVS (3). | |
|  13.08.2018, 05:20 | #5 | 
| Участник | Цитата: 
		
			Сообщение от RVS
			   Спасибо, работает. Вот котт, может, кому пригодится: X++: static void Job548(Args _args) { str treeNodePath = @'\Projects\Shared\ADMIN_11_BatchJobPeriodic'; ProjectNode projectNode; ; projectNode = SysTreeNode::findProjectNode(treeNodePath).getRunNode(); projectNode.AOTnewWindow(); } | 
|  | 
|  10.01.2023, 12:01 | #6 | 
| Участник | 
			
			А если например открыто 2 рабочей области и я хочу открыть проект именно в той, где вызвана эта функция? А программа открывает его по какой-то своей логике и если он уже открыт в одной рабочей области, то в другой она его уже не откроет.
		 | 
|  | 
|  10.08.2018, 17:15 | #7 | 
| Участник | 
			
			Вариант для \Classes\EditorScripts X++: public void OpenNewWindowProject(Editor e) { #define.Shared('Shared') #define.Private('Private') str projectName = subStr(e.currentLine(), e.selectionStartCol(), e.selectionEndCol() - e.selectionStartCol()); ProjectNode projectNode; boolean findProject(boolean _isPrivate = false) { boolean ret; ; projectNode = infolog.projectRootNode(); projectNode = projectNode.AOTfindChild(_isPrivate ? #Private : #Shared); projectNode = projectNode.AOTfindChild(projectName); if (projectNode) { ret = true; } return ret; } ; if(findProject() || findProject(true)) { projectNode.AOTrun(); } else { checkFailed(strFmt("Не удалось найти проект \"%1\"", projectName)); } } | 
|  | |
| За это сообщение автора поблагодарили: RVS (3). | |