我的任务是获取特定订单ID的存储库项目(“就像发货组和付款组详细信息”),现在我获得了一个对象中的所有存储库项目。
但问题是我不知道如何从这个对象获取这些存储库项目(传送组和支付组)
这是我试过的代码..
Repository connection;
connection=/atg/commerce/order/OrderRepository-->this i putted in my property file
Repository repository = (Repository)getConnection();
RepositoryItem Item = (RepositoryItem)
Repository.getItem(getOrderId());
在这个"repositoryItem"
对象中,我拥有所有存储库项目,因此我必须从此对象中获取所有传送组和付款组。
请帮帮我..
先谢谢..
答案 0 :(得分:0)
对于订单,当您的起点为ShippingGroup
PaymentGroup
和orderId
让我们从Repository
方式开始:
RepositoryItem order = getConnection().getItem(getOrderId(), "order"); //The getConnection().getItem(getOrderId()) method is deprecated. Make sure you pass the itemDescriptor in with your query
List<RepositoryItem> shippingGroups = (List<RepositoryItem>) order.getPropertyValue("shippingGroups");
List<RepositoryItem> paymentGroups = (List<RepositoryItem>) order.getPropertyValue("paymentGroups");
然而,对于某些对象,ATG提供了一些辅助方法来简化操作。因此,使用开箱即用的OrderManager
代码可能会让您更轻松:
Order order = getOrderManager().loadOrder(getOrderId());
List<ShippingGroup> shippingGroups = order.getShippingGroups();
List<PaymentGroup> paymentGroups = order.getPaymentGroups();
现在,您可以更轻松地访问送货组和付款组中的大多数内容。请注意,虽然您的存储库自定义操作不会自动显示在这些内容中,但您必须扩展Order
和OrderImpl
类才能执行此操作(同样适用于ShippingGroup
和PaymentGroup
。
答案 1 :(得分:0)
ATG代表两个不同级别的订单 - 作为存储库项目(因此在数据库中)和订单对象。
强烈建议您与对象级别的订单进行交互,而不是与存储库级别进行交互。
OrderManager
组件提供了按ID加载订单所需的API。
Order order = orderManager.loadOrder(orderId);
其中orderManager
是保存对/atg/commerce/order/OrderManager
Nucleus组件的引用的变量。
此API隐藏了从存储库加载订单及其相关数据实体所需的所有代码。