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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.05.2018, 10:09   #1  
DaxDeveloper is offline
DaxDeveloper
Участник
 
22 / 13 (1) ++
Регистрация: 03.09.2015
Ошибка работы .Net business connector при выборке заказов на продажу
Добрый день, коллеги!

При выполнении запроса из стороннего приложения через .net business connector получаю такую ошибку:

Microsoft.Dynamics.BusinessConnectorNet.XppException: Невозможно выбрать запись в Заказы на продажу (SalesTable).
Из базы данных выбрано нулевое значение (NULL), которое не поддерживается.
at Microsoft.Dynamics.BusinessConnectorNet.Axapta.CallStaticClassMethod(String className, String methodName, Object param1)
at DynamicsWebService2012.BCProxyAxapta2012.CallStaticClassMethod(String className, String methodName, String param)
В Аксапте логика отрабатывает нормально.

Опытным путем установили, что ошибка валится на методе find() для определенных заказов на продажу.

Ошибка также может генерироваться в конструкциях while select, в попытке получения заказов через запрос (метод queryRun.next())

Подскажите, пожалуйста, как с этим бороться?

Та же самая логика из аксапты отрабатывает нормально, ошибок синхронизации данных нет. Проблемные заказы (таких примерно около 1% от общего количества заказов) ничем особым не отличаются от остальных, полей со значениями NULL не обнаружено.

Дополнительная информация: MS DAX 2012 R3 (Версия приложения 6.3.164.0), MS SQL Server 2012.

Последний раз редактировалось DaxDeveloper; 29.05.2018 в 10:21. Причина: Уточнение версии приложнения
Старый 29.05.2018, 11:49   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
БД Аксапты не содержит значения null за исключением "больших" полей типа container. Для начала, убедитесь, что стороннее приложение в принципе находит запись, затем проверьте container-поля на наличие данных. В случае чего надо вести отладку стороннего приложения при наличии такой возможности.
__________________
// no comments
За это сообщение автора поблагодарили: ax_mct (2), DaxDeveloper (1).
Старый 30.05.2018, 11:54   #3  
DaxDeveloper is offline
DaxDeveloper
Участник
 
22 / 13 (1) ++
Регистрация: 03.09.2015
Исключение вызывается даже в отладочном методе, содержащем код:
X++:
select RecId from salesTable
  where salesTable.RecId == problemSalesRecId;
Где problemSalesRecId - RecId проблемного заказа. По идее мы не выбираем null-значения, но ошибка воспроизводится.
Старый 30.05.2018, 12:10   #4  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от DaxDeveloper Посмотреть сообщение
Исключение вызывается даже в отладочном методе, содержащем код:
X++:
select RecId from salesTable
  where salesTable.RecId == problemSalesRecId;
Где problemSalesRecId - RecId проблемного заказа. По идее мы не выбираем null-значения, но ошибка воспроизводится.
А попробуйте перед этим вызовом поставить salesTable.disableCache(true). Просто есть шансы что это какие-то странные глюки кэширования. То есть - из таблицы вытаскиваются корректные данные, но где-то по пути между БД, кэшем и приложением, часть полей заменяется мусором.
За это сообщение автора поблагодарили: DaxDeveloper (1).
Старый 31.05.2018, 03:59   #5  
DaxDeveloper is offline
DaxDeveloper
Участник
 
22 / 13 (1) ++
Регистрация: 03.09.2015
Денис, спасибо.
X++:
salesTable.disableCache(true);
Это помогло. Думал обратить внимание в сторону кэша, но смутил момент, что даже после рестарта AOS-а проблема оставалась.
Денис, еще вопрос.
Как отключить кэширование в запросах (Query)? Сходу не нашел...
Старый 31.05.2018, 18:22   #6  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Цитата:
Сообщение от DaxDeveloper Посмотреть сообщение
Денис, еще вопрос.
Как отключить кэширование в запросах (Query)? Сходу не нашел...
Не знаю такого способа, к сожалению.
Вообще я бы посоветовал просто всю проблемную логику перетащить на сервер (в смысле - поставить у классов RunOn=Server и server перед static-методами). Просто .net BC вообще мало кто пользуется. Из за этого там много не выловленых багов, которые просто некому было в MS отрепортить. А серверная компонента используется очень активно, соответственно - баги там исправлены.

Можно еще побаловаться с cross company query. Насколько я помню, кэширование работает если в списке компаний для запроса указана только одна компания. Так что можно попробовать указать реальную компанию+dat. Но вообще, эти самые cross company query временами тормозят, так что лекарство может оказаться хуже болезни...
За это сообщение автора поблагодарили: sukhanchik (2), alex55 (3).
Старый 31.05.2018, 22:32   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от DaxDeveloper Посмотреть сообщение
Как отключить кэширование в запросах (Query)? Сходу не нашел...
У QueryRun есть метод setCursor(...). То есть можно объявить курсоры нужных таблиц, настроить параметры этих курсоров и подсунуть их в QueryRun перед запуском выборки queryRun.moveNext(). Не пробовал устанавливать у таких курсоров disableCache, но несколько других свойств таким образом подхватывались.
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 01.06.2018, 07:50   #8  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
А если просто кэш почистить? Чтобы аксапта null вернула нужно сильно постараться. Налицо видна переделка таблицы, скорее всего изменения связаны с контейнерным полем, например каким-то образом сменили id, либо меняли тип, а id остался прежним. Очистка кэша на всех клинтах поможет справиться с проблемой. И не надо ничего воротить лишнего.
__________________
// no comments
Старый 01.06.2018, 12:17   #9  
DaxDeveloper is offline
DaxDeveloper
Участник
 
22 / 13 (1) ++
Регистрация: 03.09.2015
Коллеги, помог перевод выполнения классов на стороне сервера.
Всем огромное спасибо за помощь, особенно Денису )
Вопрос закрыт.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
X++: Using EDT array elements from Proxies or from the .NET Business Connector for AX Blog bot DAX Blogs 0 17.03.2016 08:12
При отключении доступа к .Net Business Connector все равно удается подключиться к AX Mikky DAX: Программирование 6 20.10.2015 11:21
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
.NET Business Connector for Dynamics AX ошибка подсоеденения Deza DAX: Программирование 2 27.12.2011 19:05
C# and AX Development: Using the .NET Business Connector for Dynamics AX / Axapta Blog bot DAX Blogs 0 18.12.2007 04:00

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

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

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