02.03.2016, 12:58 | #1 |
Участник
|
Влияние selectLocked(false) на возвращаемый курсор
Добрый день, коллеги!
Столкнулись с непонятным. Имеем запись в SalesTable и поле в ней (поле добавленное, не из стандарта). Визуально: - Смотрим через обозреватель таблицы - видим значение в поле. - Смотрим через форму - видим значение в поле. - Смотрим через "Паспорт записи" - видим значение в поле. В коде: - Ищем запись через SalesTable::findRecId() - видим значение поля. - Ищем запись через SalesTable::find() - не видим значение поля. Раскопки привели к тому, что SalesTable::findRecId() не использует salesTable.selectLocked(). То есть, используется значение по-умолчанию (true). А вот SalesTable::find() использует, причём выставляет этот флаг равным false. Имитация на уровне запроса SQL напрямую с NOLOCK и без этой инструкции всегда возвращают корректное значение поля (как и ожидается). Кто-нибудь сталкивался в подобными странностями? И как их обойти?
__________________
MS Dynamics AX 2009 Kernel 5.0.1600.4110 Application 5.0.1500.6491 |
|
02.03.2016, 13:09 | #2 |
Гость
|
А традиционные чистки кэшей и перезапуски аосов не помогают?
|
|
|
За это сообщение автора поблагодарили: Sergey Petrov (1). |
02.03.2016, 13:17 | #3 |
Участник
|
Похоже кеширование влияет. Рассинхронизация кеша и реальных данных.
Когда вы ищете SalesTable::find() то идет запрос по первичному ключу и в ax3.0 должно сработать кеширование. Во всех остальных случаях оно не работает. Попробуйте еще у полученного буфера вызвать info(strFMT(' SalesTable.wasCached() = %1 ', SalesTable.wasCached())); он вам покажет был ли использован кеш и какой вид кеша использовался. можно также вырубить кеш SalesTable.disableCache(true) прямо перед запросом и посмотреть результат. |
|
|
За это сообщение автора поблагодарили: AlGol (2), Sergey Petrov (1), S.Kuskov (2). |
02.03.2016, 13:41 | #4 |
Участник
|
Коллеги, спасибо за оперативный совет! find() действительно берёт курсор из кэша, а findRecId() - напрямую.
__________________
MS Dynamics AX 2009 Kernel 5.0.1600.4110 Application 5.0.1500.6491 |
|