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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.01.2009, 15:59   #1  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
DAX 4.0: infolog & workspaceNum
Для начала небольшая симуляция в качестве разминки: запускаем клиент Dynamics AX 4.0 и открываем из него дополнительно 2 рабочие области.
Закрываем рабочую область с номером 2 - таким образом остаются 2 окна: 'Microsoft Dynamics AX - 1...' и 'Microsoft Dynamics AX - 3...' (с 'дыркой' в последовательности).

Не запуская приведенный ниже job попробуйте ответить что будет выведено в infolog: количество строк и текст?
X++:
static void jbEnumerateWorkspace(Args _args)
{
    HWND    hWndWorkspace   ;
    int     workspaceNum    ;
    
    #define.WorkspaceCount(3)
    ;
    
    try
    {
        for( workspaceNum =1 ; workspaceNum <=#WorkspaceCount; workspaceNum++ )
        {
            info( strfmt( "Workspace num: %1", workspaceNum ) ) ;
            hWndWorkspace = infolog.hWnd( workspaceNum ) ;
            info( hWndWorkspace ? strfmt( "Workspace HWND: %1", hWndWorkspace) : "Workspace HWND: oops :(" ) ;
        }
    }
    catch
    {
        info( strfmt( "catched in %1", funcname() ) ) ;
    }

    info( 'finished' ) ;
}
Теперь запускаем job и можно проверить свои выводы.
Тестировалось на 2 приложениях: kernel version 4.0.2163.0 и kernel version 4.0.2501.116

Результат, который был получен в infolog на этих релизах:
Цитата:
Workspace num: 1
Workspace HWND: 1234567
Workspace num: 2
т.е. вызов infolog.hWnd(...) на второй итерации цикла с номером несуществующей (закрытой уже) рабочей области привел к 'аварийному' завершению выполнения прикладного кода, при этом эта ситуация не была перехвачена в блоке catch. Аналогичная ситуация с вызовом другой функции ожидающей в качестве параметра workspaceNum: infolog.taskPane( ... ) (отличие - infolog.taskPane( 0 ) отрабатывает корректно)

С 'наскоку' не обнаружил в DAX 4.0 штатной функциональности позволяющей проверить валидность workspaceNum или получить их текущий набор (функция infolog.getWorkspaceList() возвращает контейнер с HWND открытых рабочих областей)

P.S. Склонен отнести это bug'ам если приведенный сценарий воспроизводится и на более поздних версиях kernel Dynamics Ax 4.0.
За это сообщение автора поблагодарили: kashperuk (3).
Теги
infolog, hwnd, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX 2K9 & EP: Cookies, SOS! DSPIC DAX: Программирование 0 25.11.2008 11:19
Почему отказались от InventJournalVoucher в DAX 3.0 & 4.0 aidsua DAX: Функционал 0 20.05.2008 12:26
dax-lessons: Problem when creating a dynamic form with ActiveX control & Solution :) Blog bot DAX Blogs 0 30.04.2008 16:05
Сориентируйте в направлении куда копать...DAX 4. Report&Query проверка связи DAX: Программирование 0 28.01.2008 13:17
infolog.getImportedNode() в DAX 4.0 Masia DAX: Программирование 4 24.05.2007 22:29

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

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

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