Groovy scripts in SAP Commerce(Hybris)

Nuray Fahri
2 min readNov 5, 2020

--

Groovy is a script programming language based on Java, it is used in the Hybris world to create and run some very quick tasks, like cleaning and testing. Using Groovy , we can run the scripts inside Hybris without modifying the source code. It is used also for for debugging and fixing production issue without deployment, getting technical/business reports by executing the Groovy script and get result on the Output tab.

To run the Groovy script, navigate to http://localhost:9001/hac/console/scripting.

Make sure that script type: groovy is selected.

When executing scripts that need to persist data to database, change from ROLLBACK to COMMIT model; otherwise, data won’t be persisted.

  • Result : displays results returned by the script.
  • Output : displays outputs by the script.
  • Stack trace : displays errors thrown by the script.

Some example scripts:

  1. Clearing all product descriptions for all languages.
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.servicelayer.i18n.CommonI18NService
import de.hybris.platform.core.model.c2l.LanguageModel;
import de.hybris.platform.commerceservices.i18n.CommerceCommonI18NService
import de.hybris.platform.servicelayer.model.ModelService
final Map<String, Object> params = new HashMap<String, Object>();
List<Locale> locals = Arrays.asList(Locale.getAvailableLocales());
ArrayList<String> differentIsocodes = new ArrayList<>();
String query = "SELECT {p:pk} FROM {Product AS p}"
params = null;
FlexibleSearchService fss = spring.getBean("flexibleSearchService");
CommonI18NService commonI18NService = spring.getBean("commonI18NService");
CommerceCommonI18NService commerceCommonI18NService = spring.getBean("commerceCommonI18NService");
ModelService modelService=(ModelService)spring.getBean("modelService");
Collection<LanguageModel> languages = commonI18NService.getAllLanguages(); for (LanguageModel language : languages){
differentIsocodes.add(language.getIsocode());
}
final SearchResult<ProductModel> searchResult = fss.search(query, params);
for (final ProductModel product : searchResult.getResult()){ for (Locale locale : locals){

product.setDescription("", locale);
modelService.save(product)
} };

2. Displaying products without images:

import de.hybris.platform.servicelayer.search.FlexibleSearchServiceimport de.hybris.platform.servicelayer.search.SearchResultimport de.hybris.platform.core.model.product.ProductModelfinal Map<String, Object> params = new HashMap<String, Object>();String    query = "SELECT {p:pk} FROM {Product AS p}"params = null;FlexibleSearchService fss = spring.getBean("flexibleSearchService");final SearchResult<ProductModel> searchResult = fss.search(query, params);for (final ProductModel product : searchResult.getResult()){  if(product.getGalleryImages().size() == 0){    println product.getCode();  }};

3. Displaying all users with selected default view: “Short”.

import de.hybris.platform.servicelayer.search.FlexibleSearchServiceimport de.hybris.platform.servicelayer.search.SearchResultimport de.hybris.platform.b2b.model.B2BUnitModel;final Map<String, Object> params = new HashMap<String, Object>();String    query = "SELECT {p:pk} FROM {B2BUnit AS p}"params = null;FlexibleSearchService fss = spring.getBean("flexibleSearchService");final SearchResult<B2BUnitModel> searchResult = fss.search(query, params);for (final B2BUnitModel b2bunit : searchResult.getResult()){  if(b2bunit.getDefaultView().equals("shrt")){   println  b2bunit.getDefaultView() + " = "  + b2bunit.getUid();  }};

Make sure you give this post a clap and follow my blog if you find it helpful.

--

--

Nuray Fahri
Nuray Fahri

Written by Nuray Fahri

Software Development Factory Manager @Coca-Cola HBC

No responses yet