Groovy scripts in SAP Commerce(Hybris)
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:
- 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.