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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.12.2010, 13:51   #1  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
В 2009-й использую:
X++:
            xSession::removeAOC();
            SysTreeNode::refreshAll();
            SysFlushDictionary::main(null);
            SysFlushAOD::main(null);
            SysFlushData::main(null);
            xSession::updateAOC();
Старый 22.12.2010, 14:30   #2  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
до кучи Кластер 2 АОСа. Разные приложения.
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
Старый 27.02.2011, 23:25   #3  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
см. также стандартную реализацию чистки кэша для АОСа (нескольких АОСов):

Каждый раз, когда мы выполняем такие действия как "Обновить AOD", "Обновить словарь данных" и т.д., АОС (ы) получает соответствующую команду посредством вызова метода SysEvent::fireEvent(SysEventType::XXXX); в классах SysFlushAOD,
SysFlushData

C помощью класса SysEventHandler АОС сканирует таблицу SysEvent на наличие команд и исполняет их.
Запускается этот огород здесь: \Classes\Application\new

Наверное этот механизм можно использовать и для клиентских сессий, подпилив совсем чуть-чуть.
Старый 28.02.2011, 09:57   #4  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Название: error.JPG
Просмотров: 2199

Размер: 49.6 Кб
Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main().

Лечится это только ручным удалением кэша с диска. Версия DAX2009 SP1 RU6.

Последний раз редактировалось Bega; 28.02.2011 в 10:07.
Старый 28.02.2011, 10:08   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Bega Посмотреть сообщение
Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Вложение 6628
Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main().

Лечится это только ручным удалением кэша с диска.
Сталкивались. Но у нас такой эффект проявлялся при смене компании, причем на совершенно стандартном приложении (AX2009). Да, пока ручками кэш не удалишь, клиент падает. Так и не вылечили - мы просто начали использовать одну компанию (она пости не использовалась).
Я вот думаю, что нужно написать прямое удаление файлов кэша при выходе пользователя из приложения. SysFlush** как-то кривенько работает.
Старый 28.02.2011, 10:13   #6  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Сталкивались. Но у нас такой эффект проявлялся при смене компании, причем на совершенно стандартном приложении (AX2009). Да, пока ручками кэш не удалишь, клиент падает. Так и не вылечили - мы просто начали использовать одну компанию (она пости не использовалась).
Я вот думаю, что нужно написать прямое удаление файлов кэша при выходе пользователя из приложения. SysFlush** как-то кривенько работает.
Пытались удалять кэш при выходе, но не смогли найти то место (методы Application, Info, Session и т.д.), которое вызывается непосредственно после того, как это кэш будет записан на диск при выходе. Точно так же не смогли найти место, где вставить удаление кэша перед его использованием при запуске клиента.
Старый 28.02.2011, 11:24   #7  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Bega Посмотреть сообщение
Пытались удалять кэш при выходе, но не смогли найти то место (методы Application, Info, Session и т.д.), которое вызывается непосредственно после того, как это кэш будет записан на диск при выходе. Точно так же не смогли найти место, где вставить удаление кэша перед его использованием при запуске клиента.
При старте кэш не очень хорошо чистить наверное, а при выходе - самое то.

Можно так сделать: в методе \Classes\Application\closingDown вызывать .bat файл с отложенным запуском, в отдельном потоке.
Т.е. аксапта закрывается, параллельно вызывается bat файл в отдельном потоке, который либо по тайм-ауту, либо ориентируясь на запущенный процесс ax32.exe, вызывает удаление файлов кэша. Батник можно либо подготовить как статический, но лучше генерить на лету, передавай туда PID процесса клиента. Вызов консольного черного окошка можно скрыть, если вызов делать через .net сборки (createProcess), переадресовав streamOutput.

Не самое красивое решение, но должно работать надежно.
Старый 05.06.2011, 20:53   #8  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2161 (81) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от Bega Посмотреть сообщение
Никто не сталкивался с такой проблемой?: очищаем кэш, пользователь закрывает приложение, запускает снова и получает ошибку:
Вложение 6628
Чаще всего это происходит на Windows 7 но также бывает и на XP. Опытным путем выяснили, что ошибка возникает после SysFlushAOD::main(null), а именно после SysFlushAOD::doFlush() внутри main().

Лечится это только ручным удалением кэша с диска. Версия DAX2009 SP1 RU6.
Ошибку побороли?
__________________
Ivanhoe as is..
Старый 06.06.2011, 09:11   #9  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Ошибку побороли?
Нет, используем без SysFlushAOD::doFlush(). К сожалению не всегда все обновляется.
Старый 18.10.2012, 19:32   #10  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от 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(); // Удалить файловый кеш
}
2. В методе Application.startupPost() произвети проверку флага пользователя и очистку файлового кеш-а при необходимости
X++:
void startupPost()
{
    ;
    if (clientKind() == ClientType::Client)
    {
        if (global::setFlagUserClearFileCache() == true)
        {
            global::deleteLocalCacheFiles(); // Удалить файловый кеш
            global::setFlagUserClearFileCache(false); // Сбросить флаг
        }

          ...
Пример кода метода deleteLocalCacheFiles :
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);
}
В нем в свою очередь используется другой метод getPathLocalApplicationData
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;
}
Код метода global::setFlagUserClearFileCache приводить не буду - там возможно множество разных способов реализации - главная идея - сохранить, прочитать и удалить некий признак для текущего пользователя в базе данных Аксапты.

Код приведенный выше, написан для Ax2009 собственно как и проблема, которая имеет место только в Аx2009 как я понял...
За это сообщение автора поблагодарили: Bega (5), Eohaid Bress mac Elatha (1).
Теги
aoc, ax2009, активные пользователи, законченный пример, кэш, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Локальный кеш Ax для Windows 2008 ViV DAX: Администрирование 1 01.12.2010 11:59
Как грамотно почистить кеш Varmen DAX: Администрирование 10 17.02.2010 20:43
Как применить текущие настройки пользователя ко всем пользователям компании? wind DAX: Администрирование 2 21.09.2007 13:01
отчет по всем компаниям delicia DAX: Программирование 6 22.11.2002 14:57
Проблемы настройки прав доступа пользователям axot DAX: Администрирование 25 16.05.2002 10:47
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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