07.06.2015, 15:21 | #1 |
Участник
|
Обойти аpplication.startupPost() при запуске Ах
Всем доброго дня. Прошу дать совет как при запуске Ах обойти запуск метода аpplication.startupPost() или как-то остановиться в начале этого метода или как-либо подменить весь класс application?
|
|
07.06.2015, 17:31 | #2 |
Участник
|
Изменение метода повлекшее за собой невозможность запуска приложения было сделано на слое CUS. Победил все следующим образом. Остановил службу, убрал из папки приложения файл axcus, запустил службу, запустил приложение на usr слое, поправил метод startupPost на usr слое, остановил службу, положил обратно файл axcus, запустил приложение и у меня выполнился код со слоя usr, после этого вернул класс в изначальное состояние.
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
08.06.2015, 01:39 | #3 |
Участник
|
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 |
Участник
|
Цитата:
Сообщение от 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 |
|
09.01.2017, 18:49 | #5 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Logger (7). |
07.11.2020, 21:16 | #6 |
Участник
|
В 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 |
Участник
|
Цитата:
Как следствие в случае проблем с приложением нельзя спокойно запустить клиент с параметром -NOAUTO и сделать глобальную компиляцию.
|
|
08.11.2020, 19:27 | #8 |
Участник
|
|
|
09.11.2020, 04:51 | #9 |
Участник
|
Мне кажется, что "проблемы с приложением" - это уже нехорошо.
Может ли при нормальной работе возникнуть ситуация с несозданными classFactory? |
|
09.11.2020, 08:11 | #10 |
Участник
|
Запуск с параметром - noauto
|
|
09.11.2020, 10:29 | #11 |
Участник
|
Цитата:
Сообщение от 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) X++: if (classFactory) |
|
11.11.2020, 21:35 | #12 |
Участник
|
Спасибо.
Но это немножко не то. В данной ситуации не подойдет. |
|
12.11.2020, 17:38 | #13 |
Участник
|
|
|