2012-03-16 1 views
0

У меня есть некоторый код в C#, который использует разъем AX бизнес, и его так:Ошибка выполнения кода: Неверный тип аргумента для функции

AxaptaRecord OrderRecord = (AxaptaRecord)ax.CallStaticClassMethod("BTNOnlineOrder", "getSalesOrder", salesRef); 

if (OrderRecord.Found) 
{ 
    AxaptaObject Lines = (AxaptaObject)OrderRecord.Call("querySalesLine"); 
    AxaptaObject qrLines = (AxaptaObject)ax.CreateAxaptaObject("QueryRun", Lines); 

    while ((bool)qrLines.Call("next")) 
    { 
      int tableid = (int)ax.CallStaticClassMethod("Global", "tableName2Id", "InventTable"); 
      AxaptaRecord r = (AxaptaRecord)qrLines.Call("get", tableid); 
    } 
} 

Я получаю следующее сообщение об ошибке при попытке вызвать «получить "метод:

Ошибка при выполнении кода: неправильный тип аргумента для функции.

tableid возвращает значение int, 175, поэтому это не связано с тем, что tableid является нулевым или чем-то.

Любая помощь будет оценена

+0

Запрос, который возвращается querySalesLine - это пользовательский запрос или запрос SalesLine по умолчанию предоставляется Ax? Я просто хотел убедиться, что у запроса есть источник данных, указывающий на InventTable. – armasanea

ответ

0

Я получил это для работы с использованием метода getNo и передачи 1 в качестве параметра. Я не уверен, если это правильный путь или нет, но он работал на меня:

http://msdn.microsoft.com/en-us/library/aa612609(v=ax.50).aspx

+1

Итак, я полагаю, вам нужен только источник данных SalesLine. Использование getNo сделает это, единственный риск состоит в том, что какое-то другое решение Ax может изменить порядок данных, и вы можете получить неправильный источник данных. Если вы замените «InventTable» на «SalesLine» в вашем исходном коде, вы получите ту же функциональность. Конечно, этот подход зависит от имени источника данных, но, как правило, вы можете рассчитывать на то, что имя останется таким же, как и порядок данных. – armasanea

+0

Вы правы, это сработало, и я использую мой оригинальный способ - лучший способ сделать это? – CallumVass

+0

К сожалению, ответ «это зависит». Оба подхода могут сломаться. Это вопрос оценки того, какой подход имеет наименьшие шансы на разрыв - и у меня нет жестких данных для поддержки одного над другим. Вот еще одна тема с некоторыми мнениями: https://community.dynamics.com/product/ax/f/33/p/66715/121651.aspx – armasanea

2

Если запрос, который вы используете, не имеет источника данных, указывающей на InventTable вы получите это (запутанный) ошибку. Я проверил, что этот код генерирует это исключение в запросе SalesLine по умолчанию в слое Ax Sys. Я согласен, это путаная ошибка.

Если вам требуется InventTable в вашем коде потребления, вам нужно будет определить пользовательский запрос и вернуть его из метода querySalesLine.

 Смежные вопросы

  • Нет связанных вопросов^_^