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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.03.2018, 16:45   #1  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
А зачем здесь транзакция
Всем привет.
Ковыряю код для HH девайсов в advanced warehouse solution. Наткнулся на вот такую штуку в классе WHSControlData

X++:
boolean validateLicensePlateQty(WHSLicensePlateId       _licensePlateId)
{
    InventSum       inventSum;
    InventDim       inventDim;
  
    ttsbegin;

    select firstonly RecId from inventSum
        where inventSum.Closed          == NoYes::No                        &&
                (inventSum.PhysicalInvent != 0                                ||
                inventSum.Picked         != 0)
        exists join inventDim
            where inventSum.InventDimId         == inventDim.InventDimId    &&
     		  inventDim.LicensePlateId   == _licensePlateId;
  
    ttscommit;

    return inventSum.RecId == 0;
}
Собственно вопрос: а зачем здесь ttsbegin/ttscommit? может я чего-то не понимаю?

AX2012 R3 CU10
Старый 02.03.2018, 19:04   #2  
ice321i is offline
ice321i
Участник
 
63 / 54 (2) ++++
Регистрация: 22.10.2007
Вот здесь ответ на ваш вопрос Проблемы с кэшированием inventSum в DAX2012
За это сообщение автора поблагодарили: greench (1), Logger (3), EVGL (1), gl00mie (1).
Старый 02.03.2018, 19:12   #3  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Цитата:
Сообщение от ice321i Посмотреть сообщение
Вот здесь ответ на ваш вопрос Проблемы с кэшированием inventSum в DAX2012
О, спасибо. 6 лет прошло а воз и ныне там. Интересно будет глянуть в D365. Но есть подозрение что..
Старый 02.03.2018, 19:34   #4  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Кстати, в связи с темой. А кто-то на реальных проектах у себя менял CacheLookup в InventSum?
Старый 02.03.2018, 21:27   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Я менял. Вреда не заметил.
Старый 02.03.2018, 21:52   #6  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Цитата:
Сообщение от Logger Посмотреть сообщение
Я менял. Вреда не заметил.
А перфоманс? С учетом что складских операций очень много каждый денью

Я к тому что есть ли смысл менять, или просто держать в голове эту ситуацию и в критических местах запросы оборачивать в транзакционные скобки.
Старый 03.03.2018, 08:12   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Разницы не заметил.
У нас практически не было ситуаций когда шел запрос без группировок. Т.е. кеш не мог проявиться.
За это сообщение автора поблагодарили: gl00mie (2).
Старый 03.03.2018, 15:03   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от greench Посмотреть сообщение
Я к тому что есть ли смысл менять, или просто держать в голове эту ситуацию и в критических местах запросы оборачивать в транзакционные скобки.
Не вижу смысла держать это "в голове". Сегодня держишь, завтра забыл или коллега даже не держал.
Класс InventUpdateOnhand появился еще в DAX4. С тех пор обновление InventSum прямым SQL запросом является основным способом (за исключением ситуации, когда обновляем только одну запись во всей транзакции).
Даже если обновляем только одну запись, то мне сложно представить ситуацию, когда после обновления записи InventSum нашим кодом, тут же запрашиваем её опять из базы данных, надеясь, что получим запись из кэша (ну, если это не обработка конфликта обновления, но даже в этом случае нам нужно явно не значение из кэша, да и транзакция в таком случае открыта).
В общем, смысла кэширования записей такой часто изменяющейся таблицы просто не вижу. Экспериментов не проводил, но подсознательно чувствую, что в таких случаях в недрах DAX часть времени тратится на то, чтобы определить не устарел ли кэш, не нужно ли его сбросить и т.п.

Последний раз редактировалось Raven Melancholic; 03.03.2018 в 15:08.
За это сообщение автора поблагодарили: Logger (3), gl00mie (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Оver-engineering - "зачем так сложно?" ax_mct DAX: Программирование 202 29.06.2017 13:08
зачем нужен ООП в управленческих системах lev DAX: Программирование 23 23.03.2012 15:36
ax2009. зачем нужно создавать индекс по recID, если включены CreatedDateTime или ModifiedDateTime? mazzy DAX: Программирование 1 17.07.2011 23:01
Документация - ясно как, но неясно зачем dreshkov DAX: Прочие вопросы 13 05.09.2003 17:26
Зачем таблице нужен релэйшн на саму себя? Artild DAX: Программирование 2 21.07.2003 11:52
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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