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

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

  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);
    }
Другие вопросы по тегам