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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.06.2015, 15:21   #1  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Обойти аpplication.startupPost() при запуске Ах
Всем доброго дня. Прошу дать совет как при запуске Ах обойти запуск метода аpplication.startupPost() или как-то остановиться в начале этого метода или как-либо подменить весь класс application?
Старый 07.06.2015, 17:31   #2  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Изменение метода повлекшее за собой невозможность запуска приложения было сделано на слое CUS. Победил все следующим образом. Остановил службу, убрал из папки приложения файл axcus, запустил службу, запустил приложение на usr слое, поправил метод startupPost на usr слое, остановил службу, положил обратно файл axcus, запустил приложение и у меня выполнился код со слоя usr, после этого вернул класс в изначальное состояние.
За это сообщение автора поблагодарили: mazzy (2).
Старый 08.06.2015, 01:39   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
ax32 -noauto
This command does not have a corresponding user interface value.
Microsoft Dynamics AX developers use this parameter when they have made changes to the startup behavior of Microsoft Dynamics AX and they want to bypass those changes to troubleshoot issues or problems.

https://technet.microsoft.com/en-us/.../aa569653.aspx
За это сообщение автора поблагодарили: mazzy (2), trud (3), sukhanchik (6), Logger (3), Ace of Database (2), MikeR (3), alex55 (1), Dreadlock (2), Artoodeetoo (1).
Старый 09.01.2017, 18:20   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от kashperuk Посмотреть сообщение
ax32 -noauto
This command does not have a corresponding user interface value.
Microsoft Dynamics AX developers use this parameter when they have made changes to the startup behavior of Microsoft Dynamics AX and they want to bypass those changes to troubleshoot issues or problems.

https://technet.microsoft.com/en-us/.../aa569653.aspx
А можно как-нибудь запретить выдачу ядром message box-ов ?
Старый 09.01.2017, 18:49   #5  
michel1971 is offline
michel1971
Участник
 
78 / 78 (3) ++++
Регистрация: 14.01.2011
Цитата:
Сообщение от Logger Посмотреть сообщение
А можно как-нибудь запретить выдачу ядром message box-ов ?
-INTERNAL=NOMODALBOXES
Где то была на форуме тема.
За это сообщение автора поблагодарили: Logger (7).
Старый 07.11.2020, 21:16   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
В 2012-й аксапте обнаружился неприятный баг.
Если клиент запущен с параметром -noauto или при старте клиента произошла ошибка в new() методе какого-либо системного класса (т.е. он не создался) например (Application, Info, ClassFactory)
то дальше происходит очень неприятная вещь.

Если в коде идет проверка на существование системного класса, например
X++:
if (classFactory)
{
   ...
}
то для клиентского исполнения все ок.
А для серверного происходит ошибка времени выполнения, как будто мы не просто проверяем глобальный экземпляр на существование, но и сразу вызываем на нем метод. Причем try catch это хоть и ловит но выскакивает Message Box, который невозможно подавить параметром командной строки -INTERNAL=NOMODALBOXES

Как следствие в случае проблем с приложением нельзя спокойно запустить клиент с параметром -NOAUTO и сделать глобальную компиляцию. (При компиляции Query идут вызовы методов
\Classes\SysQueryRangeUtil\currentWorker
\Classes\SysQueryRangeUtil\currentRoleHasAccessToPrivate
и.т.п. которые порождают проверку на classFatory и компиляция выдает ошибку с messagebox-ом и компиляция останаливается.
Стек вызовов такой
(S)\Classes\Global\currentWorker - line 15
(S)\Data Dictionary\Tables\DirPersonUser\Methods\currentWorker - line 9
(S)\Classes\SysQueryRangeUtil\currentWorker - line 9
(S)<runtime compiled code>\anytype wrapper(){ return SysQueryRangeUtil::currentWorker(); }
)

Кто-нибудь встречался с подобным поведением ?
Как можно в серверном коде безопасно проверить classFactory на существование ?
X++:
if (classFactory)
приводит к ошибке времени выполнения.

Последний раз редактировалось Logger; 07.11.2020 в 21:50.
Старый 08.11.2020, 16:22   #7  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
Как следствие в случае проблем с приложением нельзя спокойно запустить клиент с параметром -NOAUTO и сделать глобальную компиляцию.
Если вы хотите запустить проблемный клиент только для того чтобы сделать компиляцию - может быть использовать какой-нибудь axbuild ?
Старый 08.11.2020, 19:27   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Pandasama Посмотреть сообщение
Если вы хотите запустить проблемный клиент только для того чтобы сделать компиляцию - может быть использовать какой-нибудь axbuild ?
Хороший вариант.
Но все же такие ошибки - это нехорошо. Обойти бы их как-нибудь. Явно это баг.
Старый 09.11.2020, 04:51   #9  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Мне кажется, что "проблемы с приложением" - это уже нехорошо.
Может ли при нормальной работе возникнуть ситуация с несозданными classFactory?
Старый 09.11.2020, 08:11   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Запуск с параметром - noauto
Старый 09.11.2020, 10:29   #11  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
298 / 224 (8) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
В 2012-й аксапте обнаружился неприятный баг.
Если клиент запущен с параметром -noauto или при старте клиента произошла ошибка в new() методе какого-либо системного класса (т.е. он не создался) например (Application, Info, ClassFactory)
то дальше происходит очень неприятная вещь.

Если в коде идет проверка на существование системного класса, например
X++:
if (classFactory)
{
   ...
}
то для клиентского исполнения все ок.
А для серверного происходит ошибка времени выполнения, как будто мы не просто проверяем глобальный экземпляр на существование, но и сразу вызываем на нем метод. Причем try catch это хоть и ловит но выскакивает Message Box, который невозможно подавить параметром командной строки -INTERNAL=NOMODALBOXES

Как следствие в случае проблем с приложением нельзя спокойно запустить клиент с параметром -NOAUTO и сделать глобальную компиляцию. (При компиляции Query идут вызовы методов
\Classes\SysQueryRangeUtil\currentWorker
\Classes\SysQueryRangeUtil\currentRoleHasAccessToPrivate
и.т.п. которые порождают проверку на classFatory и компиляция выдает ошибку с messagebox-ом и компиляция останаливается.
Стек вызовов такой
(S)\Classes\Global\currentWorker - line 15
(S)\Data Dictionary\Tables\DirPersonUser\Methods\currentWorker - line 9
(S)\Classes\SysQueryRangeUtil\currentWorker - line 9
(S)<runtime compiled code>\anytype wrapper(){ return SysQueryRangeUtil::currentWorker(); }
)

Кто-нибудь встречался с подобным поведением ?
Как можно в серверном коде безопасно проверить classFactory на существование ?
X++:
if (classFactory)
приводит к ошибке времени выполнения.
Году так в 2011 я в 2009 Ах решал проблему определения запуска SRS отчета из клиента или с портала и наткнулся на Global::clientKind() метод. Можете попробовать его до вызова строки
X++:
if (classFactory)
Точнее не сам метод использовать а тип ClientType
Старый 11.11.2020, 21:35   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Спасибо.
Но это немножко не то.
В данной ситуации не подойдет.
Старый 12.11.2020, 17:38   #13  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Pandasama Посмотреть сообщение
Мне кажется, что "проблемы с приложением" - это уже нехорошо.
Может ли при нормальной работе возникнуть ситуация с несозданными classFactory?
Насколько помню именно с classFactory может. В CIL он вроде бы не создается.
Теги
classfactory, noauto, startup command, startuppost

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
АХ 2012 пускает пользователя, когда он исключен из AD igortsk DAX: Администрирование 17 08.05.2015 09:41
Открытие формы, при запуске АХ Ilyaae DAX: Прочие вопросы 1 05.07.2014 00:13
Рабочая область в АХ sukhanchik DAX: Функционал 6 15.10.2009 13:10
Баг формы в АХ связанный с колесом прокрутки мышью Alexius DAX: Прочие вопросы 6 07.10.2009 15:31
Импорт в АХ через ODBC AXbeginer DAX: Программирование 14 02.10.2009 08:12

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

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

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