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). |
10.08.2018, 17:15 | #5 |
Участник
|
Вариант для \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). |
13.08.2018, 05:20 | #6 |
Участник
|
Цитата:
Сообщение от 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 | #7 |
Участник
|
А если например открыто 2 рабочей области и я хочу открыть проект именно в той, где вызвана эта функция? А программа открывает его по какой-то своей логике и если он уже открыт в одной рабочей области, то в другой она его уже не откроет.
|
|