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

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

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

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

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

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

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

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

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задача: запретить удалять строки разнесённых журналов. 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

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

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

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