我们正在尝试使用以下代码从CatalogCategoryBO中获取所有ProductBO:
google.com
但这并不总是能按预期工作。调试后,我发现主要原因是BusinessObjectRepositoryContext:
final CatalogBORepository catalogBORepository = applicationBO.getRepository("CatalogBORepository");
final CatalogCategoryBO catalogCategoryBO = catalogBORepository.getCatalogBOByCatalogName(catalogName).getCatalogCategoryBOByName(catalogCategoryName);
final CatalogCategoryBOCommonProductAssignmentExtension assignmentExtension = catalogCategoryBO.getExtension(CatalogCategoryBOCommonProductAssignmentExtension.class);
return assignmentExtension.getSortedProducts(applicationBO.getDefaultLocale());
根据调用给定方法(组织或渠道)的位置而有所不同。
此处描述了相同的问题:https://support.intershop.com/kb/index.php/Display/IS-22604
是否有一些解决方法或更好的方法来从CatalogCategoryBO中获取所有已分配的ProductBO?
我们正在使用Intershop B2C版本7.9.1.2。
答案 0 :(得分:1)
一种可能性是按照Willem Evertse的建议调用获取产品的管道,另一种可能性是在以下代码块中获取CatalogBORepository和CatalogCategoryBO:
try (ApplicationContext applicationContext = application.forceApplicationContext()) {
// your code here
}
答案 1 :(得分:0)
是的,这是因为业务对象可以根据上下文(应用程序)具有不同的实现。
如果您查看rest api的工作方式(请参阅ProductListResource
),则它们将调用ProductHandler
(请参阅ProductHandlerImpl
)方法:
getProducts(Domain currentChannel, CatalogCategoryBO category, String searchTerm, String localeId,...)
似乎只有类别参数是强制性的,其他参数可以为null。另一个好处是该代码将调用Solr索引(如果已启用它),因此它的性能应比在数据库上运行查询更好(这也是可能的)。