|
21.01.2009, 15:59 | #1 |
Участник
|
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' ) ; } Тестировалось на 2 приложениях: kernel version 4.0.2163.0 и kernel version 4.0.2501.116 Результат, который был получен в infolog на этих релизах: Цитата:
Workspace num: 1
Workspace HWND: 1234567 Workspace num: 2 С 'наскоку' не обнаружил в DAX 4.0 штатной функциональности позволяющей проверить валидность workspaceNum или получить их текущий набор (функция infolog.getWorkspaceList() возвращает контейнер с HWND открытых рабочих областей) P.S. Склонен отнести это bug'ам если приведенный сценарий воспроизводится и на более поздних версиях kernel Dynamics Ax 4.0. |
|
|
За это сообщение автора поблагодарили: kashperuk (3). |
21.01.2009, 17:50 | #2 |
Участник
|
Так а чем не устроил getWorkspaceList()? Он как раз и возвращает набор валидных workspace
Распарси getWindowText() и получишь номер |
|
22.01.2009, 09:51 | #3 |
Участник
|
Цитата:
Парсить getWindowText() (ориентироваться на текст заголовка окна) не самый лучший выход, если взять во внимание обстоятельство что заголовок окна мог быть изменен произвольным образом без сохранения штатного 'шаблона' информации, например в workspaceWindowCreated() или внешним кодом - в этом случае полезной (однозначной) информации из него не определить. Цитата:
Сообщение от kashperuk
... Я не полностью согласен, что это баг, правда
|
|
22.01.2009, 11:32 | #4 |
Участник
|
Я создал это как баг в нашей системе, и уже сделали фикс. Теперь будет возвращать 0 в случае, если workspace закрыли. (ну, и в других случаях, когда handle окна некорректен)
Правда backportить это на пред. релизы врядли будут. Сорри. Но, еще раз спасибо за то, что сообщили об этом. |
|
Теги |
infolog, hwnd, ax4.0 |
|
|