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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.01.2010, 09:46   #21  
AlGol is offline
AlGol
Участник
 
277 / 93 (4) ++++
Регистрация: 24.12.2001
Адрес: Тверь.
Как вариант, понимая трагичность ситуации в этой процедуре, было бы логично сбрасывать кеш InventTable сразу после обнаружения ошибки в процедуре вставки.

Т.е. сделать что-то подобное:

X++:
void process(container)
{
// ....

inventTable.insert();

if (- )
{
 flush inventTable;
 throw error();
}
//....
}
Старый 20.01.2010, 09:51   #22  
AlGol is offline
AlGol
Участник
 
277 / 93 (4) ++++
Регистрация: 24.12.2001
Адрес: Тверь.
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Пришлось бы каким-то образом отслеживать на уровне ядра, какие записи вставлялись в этой транзакции, и удалять из кэша только эти записи - ведь прост очищать кэш тоже не очень кошерно
Вопрос спорный, что хуже: полная очистка кеша таблицы или возврат несуществующих записей.
Чтобы не брать ответственность на себя это можно просто вынести как настройку производительности системы. А уж администратор пусть сам решает в каком режиме ему работать.
Старый 20.01.2010, 10:17   #23  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,889 / 3165 (113) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Я думаю, что это очень сложно грамотно исправить на уровне МС.
Пришлось бы каким-то образом отслеживать на уровне ядра, какие записи вставлялись в этой транзакции, и удалять из кэша только эти записи - ведь прост очищать кэш тоже не очень кошерно
Думаю что достаточно будет при любых откатах транзакций сбрасывать кеш таблиц, в которые шла вставка. Похоже этого будет достаточно. - Простой и надежный вариант получился.
Старый 20.01.2010, 11:29   #24  
Maximin is offline
Maximin
NavAx
NavAx Club
 
409 / 341 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Цитата:
Думаю что достаточно будет при любых откатах транзакций сбрасывать кеш таблиц, в которые шла вставка. Похоже этого будет достаточно. - Простой и надежный вариант получился.
Собственно, я так и сделал.
Вчера почему-то сброс кэша после очередной обработанной таблицы/неудачной транзакции не работал, сегодня после глобальной компиляции заработало. По методу вызова Dictionary::flushTable на сервере. Это по сути - тот же SysFlushData (который внутри тоже вызывает Dictionary::dataFlush), только с аргументом,позволяющим указать конкретную таблицу, см. мой предыдущий пост. Кстати, думаю, можно и чуть допилить SysFlushData чтобы он обращал внимание на args и если там что-то есть (tableId или record), то сбрасывал кэш только по нужной таблице. Впрочем, при наличии самого Dictionary::dataFlush(_tableId) это не очень-то и нужно.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Теги
ax3.0, ax4.0, cache, баг, кэширование, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Баг стандартного механизма перекрытия лукапа miklenew DAX: Программирование 5 09.04.2009 14:40
Не корректно сохраняет запись в inventTable Starling DAX: Программирование 8 31.03.2008 15:30
reNameItemId для InventTable DreamCreator DAX: Программирование 9 26.12.2006 10:11
Программно записи в InventTable djoker DAX: Программирование 8 02.12.2004 16:59
Не отображается товары в Form\InventTable! Zelenhof DAX: Программирование 6 15.01.2003 17:55

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:57.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.