Не удается заставить Axapta.CreateAxaptaObject () работать - PullRequest
1 голос
/ 27 февраля 2012

У меня есть веб-служба для моего приложения ASP.NET MVC 3, которая создает новый заказ на продажу в AX.В AX я создал класс OnlineOrder, который на данный момент имеет 1 метод.Это создать ссылку на продажу.Ниже приведен код в моем веб-сервисе:

public AxaptaObject order;

        public void CreateOrder()
        {
            AxaptaStart();
            order = Axapta.CreateAxaptaObject("OnlineOrder");
            AxaptaStop();
        }

        public string GetSalesRef(string username, string delivery, string reference)
        {

            AxaptaStart();
            string number = order.Call("orderCreate", username, delivery, reference).ToString();
            AxaptaStop();
            return number;
        }

Затем в моем контроллере я вызываю эти методы:

            client.CreateOrder();

            string number = client.GetSalesRef(user.Username, order.deliverymethod, order.custorder).ToString();

Это не работает, и нет информации об исключении для отображения,это просто пустое сообщение.Я считаю, что order AxaptaObject не относится к типу OnlineOrder, поэтому он не может вызывать эти методы.Как мне создать экземпляр объекта для использования метода orderCreate?

РЕДАКТИРОВАТЬ:

Если я сделаю:

        public string CreateOrder(string username, string delivery, string reference)
        {
            AxaptaStart();
            order = Axapta.CreateAxaptaObject("OnlineOrder");
            string number = order.Call("orderCreate", username, delivery, reference).ToString();
            AxaptaStop();
            return number;
        }

Это работает, но это неправильное решение, так как я хотел бы добавить больше методов к моему объекту OnlineOrder в будущем, и я не хочу вызывать их все в одном методе на моем веб-сервисе

1 Ответ

3 голосов
/ 28 февраля 2012

Это никогда не будет работать, поскольку объект order закрывается при вызове метода AxaptaStop.

Я предложу создать класс, реализующий IDisposable , а затем вызвать AxaptaStop в методе Dispose.Вызов AxaptaStart может перейти к конструктору.Это позволит вам определить контекст AX следующим образом:

using (var axWrap = new AxWrap())
{
    var order = axWrap.onlineOrder();
    var number = axWrap.orderCreate(order, username, delivery, reference);
}

Dispose автоматически вызывается оператором using .

...