如何获取atg中特定订单ID的存储库项?

时间:2014-06-05 04:32:46

标签: atg atg-dynamo

我的任务是获取特定订单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"对象中,我拥有所有存储库项目,因此我必须从此对象中获取所有传送组和付款组。

请帮帮我..

先谢谢..

2 个答案:

答案 0 :(得分:0)

对于订单,当您的起点为ShippingGroup

时,有两种方法可以到达PaymentGrouporderId

让我们从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();

现在,您可以更轻松地访问送货组和付款组中的大多数内容。请注意,虽然您的存储库自定义操作不会自动显示在这些内容中,但您必须扩展OrderOrderImpl类才能执行此操作(同样适用于ShippingGroupPaymentGroup

答案 1 :(得分:0)

ATG代表两个不同级别的订单 - 作为存储库项目(因此在数据库中)和订单对象。

强烈建议您与对象级别的订单进行交互,而不是与存储库级别进行交互。

OrderManager组件提供了按ID加载订单所需的API。

Order order = orderManager.loadOrder(orderId);

其中orderManager是保存对/atg/commerce/order/OrderManager Nucleus组件的引用的变量。

此API隐藏了从存储库加载订单及其相关数据实体所需的所有代码。