AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 29.05.2018, 10:09   #1  
DaxDeveloper is offline
DaxDeveloper
Участник
 
22 / 13 (1) ++
Join Date: 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.

Last edited by DaxDeveloper; 29.05.2018 at 10:21. Reason: Уточнение версии приложнения
Old 29.05.2018, 11:49   #2  
dech is offline
dech
Участник
dech's Avatar
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Join Date: 25.06.2009
Location: Омск
Blog Entries: 3
БД Аксапты не содержит значения null за исключением "больших" полей типа container. Для начала, убедитесь, что стороннее приложение в принципе находит запись, затем проверьте container-поля на наличие данных. В случае чего надо вести отладку стороннего приложения при наличии такой возможности.
__________________
// no comments
This post has been rated by: ax_mct (2), DaxDeveloper (1).
Old 30.05.2018, 11:54   #3  
DaxDeveloper is offline
DaxDeveloper
Участник
 
22 / 13 (1) ++
Join Date: 03.09.2015
Исключение вызывается даже в отладочном методе, содержащем код:
X++:
select RecId from salesTable
  where salesTable.RecId == problemSalesRecId;
Где problemSalesRecId - RecId проблемного заказа. По идее мы не выбираем null-значения, но ошибка воспроизводится.
Old 30.05.2018, 12:10   #4  
fed is offline
fed
Moderator
fed's Avatar
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Join Date: 13.03.2002
Location: Hüfingen,DE
Quote:
Originally Posted by DaxDeveloper View Post
Исключение вызывается даже в отладочном методе, содержащем код:
X++:
select RecId from salesTable
  where salesTable.RecId == problemSalesRecId;
Где problemSalesRecId - RecId проблемного заказа. По идее мы не выбираем null-значения, но ошибка воспроизводится.
А попробуйте перед этим вызовом поставить salesTable.disableCache(true). Просто есть шансы что это какие-то странные глюки кэширования. То есть - из таблицы вытаскиваются корректные данные, но где-то по пути между БД, кэшем и приложением, часть полей заменяется мусором.
This post has been rated by: DaxDeveloper (1).
Old 31.05.2018, 03:59   #5  
DaxDeveloper is offline
DaxDeveloper
Участник
 
22 / 13 (1) ++
Join Date: 03.09.2015
Денис, спасибо.
X++:
salesTable.disableCache(true);
Это помогло. Думал обратить внимание в сторону кэша, но смутил момент, что даже после рестарта AOS-а проблема оставалась.
Денис, еще вопрос.
Как отключить кэширование в запросах (Query)? Сходу не нашел...
Old 31.05.2018, 18:22   #6  
fed is offline
fed
Moderator
fed's Avatar
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Join Date: 13.03.2002
Location: Hüfingen,DE
Quote:
Originally Posted by DaxDeveloper View Post
Денис, еще вопрос.
Как отключить кэширование в запросах (Query)? Сходу не нашел...
Не знаю такого способа, к сожалению.
Вообще я бы посоветовал просто всю проблемную логику перетащить на сервер (в смысле - поставить у классов RunOn=Server и server перед static-методами). Просто .net BC вообще мало кто пользуется. Из за этого там много не выловленых багов, которые просто некому было в MS отрепортить. А серверная компонента используется очень активно, соответственно - баги там исправлены.

Можно еще побаловаться с cross company query. Насколько я помню, кэширование работает если в списке компаний для запроса указана только одна компания. Так что можно попробовать указать реальную компанию+dat. Но вообще, эти самые cross company query временами тормозят, так что лекарство может оказаться хуже болезни...
This post has been rated by: sukhanchik (2), alex55 (3).
Old 31.05.2018, 22:32   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Raven Melancholic's Avatar
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Join Date: 21.03.2005
Location: Москва-Петушки
Quote:
Originally Posted by DaxDeveloper View Post
Как отключить кэширование в запросах (Query)? Сходу не нашел...
У QueryRun есть метод setCursor(...). То есть можно объявить курсоры нужных таблиц, настроить параметры этих курсоров и подсунуть их в QueryRun перед запуском выборки queryRun.moveNext(). Не пробовал устанавливать у таких курсоров disableCache, но несколько других свойств таким образом подхватывались.
This post has been rated by: sukhanchik (2).
Old 01.06.2018, 07:50   #8  
dech is offline
dech
Участник
dech's Avatar
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Join Date: 25.06.2009
Location: Омск
Blog Entries: 3
А если просто кэш почистить? Чтобы аксапта null вернула нужно сильно постараться. Налицо видна переделка таблицы, скорее всего изменения связаны с контейнерным полем, например каким-то образом сменили id, либо меняли тип, а id остался прежним. Очистка кэша на всех клинтах поможет справиться с проблемой. И не надо ничего воротить лишнего.
__________________
// no comments
Old 01.06.2018, 12:17   #9  
DaxDeveloper is offline
DaxDeveloper
Участник
 
22 / 13 (1) ++
Join Date: 03.09.2015
Коллеги, помог перевод выполнения классов на стороне сервера.
Всем огромное спасибо за помощь, особенно Денису )
Вопрос закрыт.
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 15:40.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.