Как получить возвращаемое значение из 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
способ выполнения статического метода, сохраненного в классе Поскольку метод должен быть статическим, вы не передаете объект функции, а просто имя класса и имя метода, так как он выполняется в новом контексте.
Есть несколько вещей, чтобы рассмотреть
- Похоже, вы пытаетесь вызвать объекты Axapta из.Net, поэтому самый простой способ - использовать Business Connectory (Microsoft.Dynamics.BusinessConnectorNet)
- Создайте класс-оболочку со статическими методами, которые понимают, как создавать экземпляры буферов и выполнять необходимые вычисления (статический метод означает, что у вас нет записи / буфера для этой таблицы)
Это может выглядеть примерно так
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);
}