18.10.2012, 19:32 | #41 |
Участник
|
Цитата:
Сообщение от Bega
Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Вложение 6628 Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main(). Лечится это только ручным удалением кэша с диска. Версия DAX2009 SP1 RU6. При этом если очистка кеш-а приложения происходит при старте клиента и вместе с этим удаляется и файловый кеш - при следующем старте клиента Аксапта ошибки не будет. Если Очистка кеш-а приложения произошла во уже во время работы - то при следующем старте клиента Аксапта ошибка появится, и клиент все же "свалится", но при повторном запуске все запустится без проблем! Предлагаю такое решение. 1. в методе очистки кеш-а приложения пользователю устанавливать некий флаг, который сохранит в БД информацию о том что при следующем старте клиента для данного пользователя требуется очистка файлового кеш-а, пример псевдокода X++: static client void refreshApplication() { ; global::setFlagUserClearFileCache(true); // Установить Флаг xSession::removeAOC(); SysTreeNode::refreshAll(); SysFlushDictionary::main(null); SysFlushAOD::main(null); SysFlushData::main(null); xSession::updateAOC(); global::deleteLocalCacheFiles(); // Удалить файловый кеш } X++: void startupPost() { ; if (clientKind() == ClientType::Client) { if (global::setFlagUserClearFileCache() == true) { global::deleteLocalCacheFiles(); // Удалить файловый кеш global::setFlagUserClearFileCache(false); // Сбросить флаг } ... X++: static client void deleteLocalCacheFiles() { str path; ; path = global::getPathLocalApplicationData(); WinApi::shellExecute('cmd', '/c DEL "' + path + '*.kti" /q', '', 'Open', 0); WinApi::shellExecute('cmd', '/c DEL "' + path + '*.dat" /q', '', 'Open', 0); WinApi::shellExecute('cmd', '/c DEL "' + path + '*.auc" /q', '', 'Open', 0); } X++: static client str getPathLocalApplicationData() { // опрделить местоположение папки // c:\Documents and Settings\***user***\Local Settings\Application Data\ для XP server 2003 и т.д. // c:\Users\***user***\AppData\Local\ для windows 7, server 2008 и т.д. #define.Environment_SpecialFolder_LocalApplicationData(28) str ret; System.Type type; System.Reflection.MethodInfo methodGetFolderPath; System.Object[] params; ; type = System.Type::GetType("System.Environment"); methodGetFolderPath = type.GetMethod("GetFolderPath"); params = new System.Object[1](); params.SetValue(#Environment_SpecialFolder_LocalApplicationData, 0); ret = methodGetFolderPath.Invoke(ClrInterop::Null("System.Object"), params); ret += "\\"; return ret; } Код приведенный выше, написан для Ax2009 собственно как и проблема, которая имеет место только в Аx2009 как я понял... |
|
|
За это сообщение автора поблагодарили: Bega (5), Eohaid Bress mac Elatha (1). |
Теги |
aoc, ax2009, активные пользователи, законченный пример, кэш, полезное |
|
|