gpt4 book ai didi

java - 如何将 RepositoryItem 转换为 ATG 上的订单

转载 作者:行者123 更新时间:2023-12-01 12:41:09 25 4
gpt4 key购买 nike

我是 ATG 新手,我无法做一些看起来相当简单的事情。

我正在尝试通过订单号在数据库中获取订单。但这个数字不是 orderId,所以我不能只使用 OrderManager.loadOrder 方法。

这是我到目前为止的代码:

Repository orderRepository = getOrderManager().getOrderTools().getOrderRepository();
RepositoryView view = orderRepository.getView("order");

RqlStatement statement = RqlStatement.parseRqlStatement("orderNumber EQUALS ?0");
Object params[] = { pOrderNumber };
RepositoryItem items[] = statement.executeQuery(view, params);

RepositoryItem order = null;
if( (items != null) && (items.length > 0) ) {
order = items[0];
}

//Now I want to convert this order of type "RepositoryItem" to an actual Order object

我可以通过获取存储库 ID 并从 OrderManager 调用 loadOrder 来完成此操作,但这似乎需要返回数据库并再次查找我手中已有的内容。

是否有另一种方法可以从此 RepositoryItem 对象中获取实际的 Order 对象?

最佳答案

如果您只需要订单项本身的属性,那么您可以使用 getPropertyValue 方法直接从 RepositoryItem 检索它们。如果您发现想要利用 OrderImpl 包装器及其关联的便捷方法,那么您应该通过 OrderManager.loadOrder()< 检索 Order 对象实例 正如您所建议的方法。虽然这需要应用程序稍微做更多的工作来构造 Order 包装器,但这并不一定意味着对订单表进行另一次数据库调用。假设您没有禁用订单项的存储库缓存,那么 ATG 在为您构建 OrderImpl 包装器时将利用已缓存的订单存储库项。当您按 orderNumber 对订单进行 RQL 查找时,此项将被缓存,因此不会执行冗余的数据库调用。

请注意,如果相关订单项目尚未缓存(即付款组、运输组、商业项目等),则可能需要额外的数据库调用来检索这些项目。

关于java - 如何将 RepositoryItem 转换为 ATG 上的订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25086110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com