Как получить возвращаемое значение от IAxaptaRecord :: Call ()?

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

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

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

Надеюсь на совет. Спасибо.


person Jake    schedule 20.02.2013    source источник
comment
Какой у Вас вопрос? Вопрос в названии не совсем соответствует тому, что вы говорите.   -  person SShaheen    schedule 21.02.2013


Ответы (2)


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

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

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

РЕДАКТИРОВАТЬ: есть третий интересный метод:

  • Axapta.CallStaticClassMethod - это способ выполнить статический метод, сохраненный в классе. Поскольку метод должен быть статическим, вы не передаете в функцию объект, а только имя класса и имя метода, поскольку он выполняется в новом контексте.
person j.a.estevan    schedule 21.02.2013

Есть пара вещей, которые следует учитывать

  1. Похоже, вы пытаетесь вызвать объекты Axapta из .Net, поэтому проще всего использовать Business 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);
    }
person Sam    schedule 22.02.2013
comment
В чем разница между Axapta.CallStaticClassMethod () и AxaptaRecord.Call ()? Могу ли я использовать последний для вызова статических методов? - person Jake; 23.02.2013
comment
Нет, ты не можешь. Вот почему есть два метода. - person Jan B. Kjeldsen; 25.02.2013
comment
Я отредактировал свой ответ с разницей (кстати, довольно очевидной). - person j.a.estevan; 25.02.2013