![]() |
#5 |
Участник
|
Если есть несколько AOS, то обновления нужно проводить централизовано и вдумчиво. Лучший способ, это остановка всех AOS, обновление слоя, удаление и перестройка индексов приложения. Если проект на стадии промышленной эксплуатации (то есть изменения не "пожарные, применяемые при запуске, а плановые и продуманные), то это, на мой взгляд, единственно правильный подход не зависимо от того, один AOS или несколько (заливать на рабочее приложение попроектно может и просто, но за 5 лет работы с Ax часто убеждался, что так делать не следует).
Тем не менее, при запуске часто приходится быстро править некоторые части кода, поэтому нужно быстрый накат изменений и распростаранение этих изменений на всех пользователей без перезапуска AOSов. (если не изменялась структура таблиц). Для того, чтобы изменения вступили в силу для всех, нужно выполнить некоторые операции, собранные в меню "Сервис \ Средства разработки \ Объекты приложения". Естественно, что данное меню доступно далеко не для всех пользователей. Поэтому мы (уже далеко не на первом проекте) собрали все эти действия в одном месте и дали всем пользователям права на соответствующий пункт меню. Естественно, что в промышленной эксплуатации так делать нежелательно, но при запуске вполне допустимо. Примерно так выглядит код для DAX4 (привожу не полностью класс, а рабочий код, собранный в джоб): X++: static void flushCache(Args _args) { ; #AOT xSession::removeAOC(); // SysTreeNode::refreshAll(); TreeNode::findNode(#TablesPath).AOTrefresh(); TreeNode::findNode(#TableMapsPath).AOTrefresh(); TreeNode::findNode(#ViewsPath).AOTrefresh(); TreeNode::findNode(#ExtendedDataTypesPath).AOTrefresh(); TreeNode::findNode(#BaseEnumsPath).AOTrefresh(); TreeNode::findNode(#LicenseCodesPath).AOTrefresh(); TreeNode::findNode(#ConfigurationKeysPath).AOTrefresh(); TreeNode::findNode(#SecurityKeysPath).AOTrefresh(); TreeNode::findNode(#TableCollectionsPath).AOTrefresh(); TreeNode::findNode(#MacrosPath).AOTrefresh(); TreeNode::findNode(#ClassesPath).AOTrefresh(); TreeNode::findNode(#QueriesPath).AOTrefresh(); TreeNode::findNode(#JobsPath).AOTrefresh(); TreeNode::findNode(#MenusPath).AOTrefresh(); TreeNode::findNode(#MenuItemsDisplayPath).AOTrefresh(); TreeNode::findNode(#MenuItemsOutputPath).AOTrefresh(); TreeNode::findNode(#MenuItemsActionPath).AOTrefresh(); TreeNode::findNode(#ResourcesPath).AOTrefresh(); SysFlushDictionary::main(_args); SysFlushAOD::main(_args); SysFlushData::main(_args); xSession::updateAOC(); xSession::removeAOC(); SysTreeNode::refreshAll(); SysFlushDictionary::main(_args); SysFlushAOD::main(_args); SysFlushData::main(_args); xSession::updateAOC(); } Последний раз редактировалось Raven Melancholic; 29.08.2009 в 22:07. |
|
|
За это сообщение автора поблагодарили: kpoxa (1). |