AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.08.2018, 10:34   #1  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Открыть проект из кода
Всем доброго времени суток,

Задача: в заголовке сообщения. Открыть окно с проектом из кода.

Что делаю:

PHP код:
static void Job548(Args _args)
{
    
str         treeNodePath = @'\Projects\Shared\FormsCleanup_SALESTABLE_EL';
    
TreeNode    treeNode;
    ;

    
treeNode    TreeNode::findNode(treeNodePath);
    
treeNode.AOTnewWindow();

Что получаю: "Ошибка времени выполнения: TreeNode Объект не инициализирован".
То есть по переданному пути find() узел не находит. Вариант с двумя бекслешами в начале path уже пробовал, не помогло

Что я делаю не так?
__________________
Best Regards,
Roman
Старый 10.08.2018, 10:38   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 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  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Спасибо, работает. Вот котт, может, кому пригодится:
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  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
я так
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  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Вариант для \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  
Ar is offline
Ar
Участник
Аватар для Ar
Злыдни
 
21 / 20 (1) +++
Регистрация: 27.06.2005
Адрес: Москва
Цитата:
Сообщение от RVS Посмотреть сообщение
Спасибо, работает. Вот котт, может, кому пригодится:
X++:
static void Job548(Args _args)
{
    str         treeNodePath = @'\Projects\Shared\ADMIN_11_BatchJobPeriodic';
    ProjectNode projectNode;
    ;

    projectNode = SysTreeNode::findProjectNode(treeNodePath).getRunNode();
    projectNode.AOTnewWindow();
}
Последняя строка с .AOTnewWindow() не нужна, достаточно просто .getRunNode().
Старый 10.01.2023, 12:01   #7  
n_yury is offline
n_yury
Участник
 
22 / 12 (1) ++
Регистрация: 19.02.2013
А если например открыто 2 рабочей области и я хочу открыть проект именно в той, где вызвана эта функция? А программа открывает его по какой-то своей логике и если он уже открыт в одной рабочей области, то в другой она его уже не откроет.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Открыть в новом окне объект из кода miklenew DAX: База знаний и проекты 24 31.01.2023 17:31
Открыть проект Visual Studio из проводника sukhanchik DAX: Администрирование 3 08.12.2017 14:23
Проект для создания оповещений из кода ax 4.0 Ivanhoe DAX: Программирование 0 13.01.2010 11:26
Открыть дизайн формы в режиме Edit из кода arnold DAX: Программирование 11 27.11.2008 16:20
как открыть новый проект nicebigman DAX: Программирование 3 25.02.2004 14:15

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:26.