无法让Axapta.CreateAxaptaObject()工作

时间:2012-02-27 15:49:56

标签: asp.net-mvc-3 axapta

我的ASP.NET MVC 3应用程序的Web服务在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对象添加更多方法,我不想在我的Web服务上用1方法调用它们

1 个答案:

答案 0 :(得分:3)

当您调用order方法时AxaptaStop对象有点关闭,这将永远不会有效。

我建议您创建一个实现IDisposable的类,然后在AxaptaStop方法中调用DisposeAxaptaStart调用可以转到构造函数。这将允许您对AX上下文进行范围调整,如:

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

using statement会自动调用Dispose