Search code examples
intershop

Getting ProjectBOs from CatalogCategoryBO returns different results based on BusinessObjectRepositoryContext


We are trying to get all ProductBOs from CatalogCategoryBO with following code:

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());

But this does not always work as expected. After debugging I found out that main reason is BusinessObjectRepositoryContext:

((BusinessObjectRepositoryContext)catalogCategoryBO.getContext().getVariable("CurrentBusinessObjectRepositoryContext");

which is different based on location from which we call given method (organization or channel).

The same problem is described here: https://support.intershop.com/kb/index.php/Display/IS-22604

Is there some workaround or better way to get all assigned ProductBOs from CatalogCategoryBO?

We are using Intershop B2C version 7.9.1.2.


Solution

  • One possibility is to call pipeline for getting products as suggested by Willem Evertse, another one is to fetch CatalogBORepository and CatalogCategoryBO within block of:

    try (ApplicationContext applicationContext = application.forceApplicationContext()) {
        // your code here
    }
    

    https://support.intershop.com/kb/index.php/Display/2X3516#Concept-ApplicationFramework-TheExecutionContextofanApplication