AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 01.04.2003, 11:09   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
Нешуточная задача
Quote:
В caption главного окна Axapta выводить информацию о номере сеанса. Эта информация аналогична информации, которая отображается в окне "Активные пользователи", колонка "сеанс" напротив активного пользователя
Решение кажется очевидным - используя SetWindowText подправить caption окна.
Вот тут возникают проблемы
1. Как получить hwnd приложения? Использовать GetTop или GetForeground можно, но если после набора пароля юзер быстренько перейдет в другое приложение, то caption поменяется у открытого окна.
2. В какой момент менять caption? Если это сделать в startupPost, то изменение быстренько затрется
Old 01.04.2003, 12:06   #2  
mad_pilot is offline
mad_pilot
Участник
mad_pilot's Avatar
 
451 / 10 (1) +
Join Date: 07.03.2002
Location: Moscow
Можно узнать, чем вызвана такая задача?
__________________
Остановите этом мир, я сойду!
Old 01.04.2003, 12:16   #3  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
Quote:
Это нужна для того, чтобы пользователь мог видеть какое приложение Axapta у него подвисло, когда он уже ничего не может открыть, но caption у него еще виден.
Задача поставлена админом. Часто пользователи запускают по 3-4 Аксапты на однотипные задачи, которые в конечном итоге друг друга блокируют. Админ может определить spid и сеанс блокирующего приложения, после чего просит юзера закрыть повисшую (и вешающую других) задачу... а как определить какое из окошек нужно кильнуть, если все чем-то заняты?
Old 01.04.2003, 14:06   #4  
mad_pilot is offline
mad_pilot
Участник
mad_pilot's Avatar
 
451 / 10 (1) +
Join Date: 07.03.2002
Location: Moscow
На каких именно задачах наблюдается блокировка?
__________________
Остановите этом мир, я сойду!
Old 01.04.2003, 14:58   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
Quote:
На каких именно задачах наблюдается блокировка?
Не знаю, чем это поможет
При создание + регистраия маршрутных карт + создание накладных и счетов-фактур.
Old 02.04.2003, 09:17   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
К сожалению совсем нет времени, чтобы самому попробовать решить эту задачу

Но общие мысли такие: Как я понял проблема в идентификации конкретного окна Аксапты. Последовательность как я понимаю такая:

1. При загрузке Аксатпа ищет все окна, где в заголовке встречается Navision/Microsoft/Micro$oft Axapta.
2. Смотрим, есть ли в заголовке этого окна идентификатор сессии (например "ID=")
3. Если есть, то это уже загруженная Аксапта с проставленным идентификатором сессии. Если нет, то это та, только что загруженная Аксапта - изменяем ее заголовок - ставим туда идентификатор сессии.

Таким образом, как мне кажется, все будет работать, за исключением того случая, когда пользователь ОДНОВРЕМЕННО ЗАПУСТИТ, два экземпляра Аксапты. Работать одновременно они могут - ради бога, главное одновременно не запускать. Хотя я не уверен, что у пользователя вообще получится ОДНОВРЕМЕННО ЗАПУСТИТЬ два экземпляра программы.

Quote:
Если это сделать в startupPost, то изменение быстренько затрется
А можно про это поподробнее. Чтобы это случилось, кто-то должен сказать SetWindowsText. Кто это делает ? Неужели Аксапта переодически устанавливает свой заголовок окна ?
Old 02.04.2003, 09:53   #7  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
Quote:
А можно про это поподробнее...
Неужели Аксапта переодически устанавливает свой заголовок окна ?
При загрузке приложения (окно ввода пароля) в заголовке окна написано только
Damgaard/Navision/Microsoft/Micro$oft Axapta
А после открытия главного меню (или перед этим, но после startupPost) в заголовок прописывается держатель и название приложения

Quote:
Чтобы это случилось, кто-то должен сказать SetWindowsText. Кто это делает ?
Сам бы хотел знать
Old 02.04.2003, 10:04   #8  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Можно попробовать создать табличку с двумя полями - идентификатор сессии, handle главного окна Аксапты.

В startupPost - добавлять туды информацию о запускаемом приложении.

В дальнейшем регулярно, например при открытии каждого окна Аксапты (также как ты делал Micro$oft) по идентификатору сессии находить хэндл в таблице и уже по этому хэндлу обновлять заголовок.

Не пробовал, но по моему должно сработать. Таблицу можно заменить чем нибудь другим - идея в том, что пока заголовок уникален(а я понимаю, это в момент запуска Аксапты) нужно где то запомнить идентификатор сессии и соответствующий ему handle. Если с таблицей получатся плохо(блокировки) - можно попробовать файл на локальном компе или что-то вроде этого.

P.S. Как я понимаю, вариант написания внешнего приложения не рассматривается ?
Old 02.04.2003, 10:23   #9  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
Спасибо за предложения
Как мне кажется, решение должно быть адекватно задаче..
Т.е. если задача вывести в caption окна какой-то текст, то это не должно порождать создание таблиц (массивов, контейнеров и т.д.) и поддержку в ней актуальных значений.

Вчера я пришел к некоторому решению, которое пока меня устроило (если не найду более простого)
1. hwnd окна можно получить infolog.hwnd()
2. Вызвать процедуру переименования по setTimeOut. Прикол в том, что в классе Application на 3х уровневой конфе он не работает.. а вот в Info работает (кстати, Info объявлен final, но пришлось в него добавить метод)
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Задача: запретить удалять строки разнесённых журналов. jeky DAX: Программирование 12 28.01.2009 22:22
Задача оптимизации rusalaudinov DAX: Программирование 62 16.11.2007 08:22
Казалось бы, простая задача... konfet DAX: Программирование 5 05.04.2007 16:58
Задача оптимизации загрузки производственых мощностей SevA DAX: Программирование 23 01.11.2004 18:12
Множественные единицы измерения ada DAX: Функционал 19 09.08.2004 19:58

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 20:59.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.