【问题标题】:Hybris Impex import based on PKs obtained from FlexQuery基于从 FlexQuery 获得的 PK 导入 Hybris Impex
【发布时间】:2021-07-19 12:18:52
【问题描述】:

我想要达到的目标:

对于第三个属性 a3 具有特定枚举值的任何产品,我想将两个属性 a1 和 a2 的值设置为 null。

我目前所拥有的:

我有一个 flexquery,它获取满足 a3 要求的产品的 PK 列表。我现在需要使用这些特定键设置产品的属性。查询如下:

SELECT {p.pk} FROM {Product AS p JOIN ProductOrigin AS o ON {o.pk} = {p.origin}} WHERE {o.code} = 'MARKETPLACE'

我需要什么帮助:

我不知道如何将 flexquery 的结果与典型的 impex 操作结合起来。我理想中想要的是能够简单地将 PK 列表传递给 INSERT_UPDATE,如下所示:

INSERT_UPDATE Product; pk         ; a1  ; a2  ;
                       queryResult; null; null;

我不知道这是否可能。如果有一种我没有想到的更简单的方法来做到这一点,那就更好了。

【问题讨论】:

    标签: hybris impex


    【解决方案1】:

    嗨,Erik,即使不使用 Impex 标头并使用 groovy,您也可以实现此目的,步骤如下。

    1. 创建 groovy

      #%impex.enableCodeExecution(true);

      "#%groovy%

       def queryCreditCardsToRemove = ''' SELECT {p.pk} FROM {Product AS p JOIN ProductOrigin AS o ON {o.pk} = {p.origin}} WHERE {o.code} = 'MARKETPLACE''''
      
       def products = (Collection<ProductModel>)flexibleSearchService.search(queryCreditCardsToRemove).result
       products.stream()
                .each{
                modelService
                }
       modelService.removeAll(cardsToRemove)
      

      ";

    2. 将文件另存为 impex

    3.# 禁用遗留脚本(使 groovy 在 impex 工作) impex.legacy.scripting=false---> 你可以通过 hac 动态更改-->configuration 或者添加 local.properties

    【讨论】:

      【解决方案2】:

      这是一个 beanshell 脚本,从 hac -> 控制台 -> 脚本语言执行它!

      在下面的脚本中,您需要输入可以为您提供预期结果的查询,并在该结果脚本上执行将空值保存到属性的进一步操作!

      import de.hybris.platform.servicelayer.search.FlexibleSearchService
      import de.hybris.platform.servicelayer.search.SearchResult;
      import de.hybris.platform.core.model.product.ProductModel
      import de.hybris.platform.variants.model.VariantProductModel;
      
      final Map<String, Object> params = new HashMap<String, Object>();
      String query = "-------------- query to check condition of third (a3) attribute 
                                with specific enum value ----------------------"
      params = -----------if any need to be passed in query ------------------;
      
      FlexibleSearchService fss = spring.getBean("flexibleSearchService")
      final SearchResult<ProductModel> searchResult = fss.search(query, params);
      
      for (final ProductModel product : searchResult.getResult()) {
          // set attributes a1 and a2 to null 
          // save product model using modelService
      }
      

      【讨论】:

        猜你喜欢
        • 2017-05-06
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多