|
![]() |
#1 |
Участник
|
Кнопка вызывает простейший класс с таким кодом (для 4.0):
X++: xSession::removeAOC(); SysTreeNode::refreshAll(); SysFlushDictionary::doFlush(); SysFlushAOD::doFlush(); xSession::updateAOC();
__________________
Ivanhoe as is.. |
|
![]() |
#2 |
Участник
|
В 2009-й использую:
X++: xSession::removeAOC(); SysTreeNode::refreshAll(); SysFlushDictionary::main(null); SysFlushAOD::main(null); SysFlushData::main(null); xSession::updateAOC(); |
|
![]() |
#3 |
Модератор
|
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
![]() |
#4 |
Боец
|
см. также стандартную реализацию чистки кэша для АОСа (нескольких АОСов):
Каждый раз, когда мы выполняем такие действия как "Обновить AOD", "Обновить словарь данных" и т.д., АОС (ы) получает соответствующую команду посредством вызова метода SysEvent::fireEvent(SysEventType::XXXX); в классах SysFlushAOD, SysFlushData C помощью класса SysEventHandler АОС сканирует таблицу SysEvent на наличие команд и исполняет их. Запускается этот огород здесь: \Classes\Application\new Наверное этот механизм можно использовать и для клиентских сессий, подпилив совсем чуть-чуть. |
|
![]() |
#5 |
Участник
|
Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main(). Лечится это только ручным удалением кэша с диска. Версия DAX2009 SP1 RU6. Последний раз редактировалось Bega; 28.02.2011 в 10:07. |
|
![]() |
#6 |
Боец
|
Цитата:
Сообщение от Bega
![]() Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Вложение 6628 Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main(). Лечится это только ручным удалением кэша с диска. Я вот думаю, что нужно написать прямое удаление файлов кэша при выходе пользователя из приложения. SysFlush** как-то кривенько работает. |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от DSPIC
![]() Сталкивались. Но у нас такой эффект проявлялся при смене компании, причем на совершенно стандартном приложении (AX2009). Да, пока ручками кэш не удалишь, клиент падает. Так и не вылечили - мы просто начали использовать одну компанию (она пости не использовалась).
Я вот думаю, что нужно написать прямое удаление файлов кэша при выходе пользователя из приложения. SysFlush** как-то кривенько работает. |
|
![]() |
#8 |
Участник
|
Цитата:
Сообщение от Bega
![]() Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Вложение 6628 Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main(). Лечится это только ручным удалением кэша с диска. Версия DAX2009 SP1 RU6.
__________________
Ivanhoe as is.. |
|
![]() |
#9 |
Участник
|
|
|
![]() |
#10 |
Участник
|
Цитата:
Сообщение от 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, активные пользователи, законченный пример, кэш, полезное |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|