2013-02-20 8 views
0

В Dymanics AX 4.0, я хочу запустить некоторые методы под деревом объектов приложения (AOT)> Словарь данных> Таблицы>CustTable> Методы. (Может быть любая таблица)Как получить возвращаемое значение из IAxaptaRecord :: Call()?

Это в основном, чтобы получить некоторые пользовательские расчетные значения, а также в части, чтобы иметь дело с инъекцией SQL Axapta.ExecuteStmt - Is it safe?

Я нашел AxaptaRecord.Call документации здесь, но это не помогает много. Не уверен, что это правильный метод. Кроме того, каковы различия между вызовами метода в терминах типов функций? например общедоступные, статические, серверные, возвращаемые значения и т. д.

Надеясь на некоторые советы. Благодарю.

+0

Что вы хотите сделать? Вопрос в названии не совсем соответствует тому, что вы говорите. – SShaheen

ответ

0

Эти функции предназначены для решения различных задач в .NET, которые easilly могут быть решены с X ++:

  • Axapta.ExecuteStmt является способ отправки некоторые SQL (на X ++ внутреннего синтаксиса SQL) в базе данных, может быть select, update_recordset и т. д. Точно такая же функциональность и результат, если вы пишете команды SQL внутри кода X ++.

  • AxaptaRecord.Call - метод класса. Таким образом, с помощью этой функции вы можете запускать только методы записи, закодированные в X ++ внутри таблицы (те, которые находятся внутри узла на AOT, как и обычный метод .find()).

EDIT: Существует третий интересный метод:

  • Axapta.CallStaticClassMethod является способ выполнить статический метод, сохраненный в классе. Поскольку метод должен быть статическим, вы не передаете объект функции, а просто имя класса и имя метода, поскольку оно выполняется в новом контексте.
1

Есть несколько вещей, чтобы рассмотреть

  1. Похоже, вы пытаетесь вызвать объекты Axapta от .Net, поэтому самый простой способ заключается в использовании бизнес-Connectory (Microsoft.Dynamics.BusinessConnectorNet)
  2. Создайте класс-оболочки со статическими методами, которые понимают, как создавать экземпляры буферов и сделать расчеты, которые вы хотите (статический метод означает, что вы не имеете запись/буфера для этой таблицы реализованной)

Это может быть что-то вроде этого

Axapta ax = new Axapta(); 
    try 
    { 
     //Note this is getting UserId out of web.config for a web service 
     ax.LogonAs(ConfigurationManager.AppSettings["uid"], "contoso.com", null, null, null, null, ConfigurationManager.AppSettings["config"]); 

     string returnString = (string)ax.CallStaticClassMethod("WrapperClassName", "StaticMethodName", _parameterPassedToMethod); 
    } 
+0

В чем разница между Axapta.CallStaticClassMethod() и AxaptaRecord.Call()? Могу ли я использовать последнее для вызова статических методов? – Jake

+0

Нет, вы не можете. Вот почему существуют два метода. –

+0

Я отредактировал свой ответ с разницей (вполне очевидно, кстати). –