Возможности выполнения groovy-скрипта с помощью Hybris в java-коде (без hAC)

Мне интересно, есть ли способ выполнить отличный скрипт с помощью Hybris. Я знаю, как groovy-скрипты выполняются с помощью консоли администрирования Hybris (hAC), но мне нужно решение для выполнения такого скрипта из java-кода. Желательно с помощью @SystemSetup Patching Framework, но не обязательно. (https://help.sap.com/docs/SAP_COMMERCE/d0224eca81e249cb821f2cdf45a82ace/5db22427a1d541669bc4d12793a7b672.html?locale=en-US)

Я ищу метод, аналогичный импорту Impex (например, из основного расширения):

@SystemSetup(extension = SampleCoreConstants.EXTENSIONNAME)
public class CoreSystemSetup extends AbstractSystemSetup {

public static final String IMPORT_ACCESS_RIGHTS = "accessRights";

@SystemSetup(type = Type.ESSENTIAL, process = Process.ALL)
public void createEssentialData(final SystemSetupContext context)
{
    importImpexFile(context, "/samplecore/import/common/file-name.impex");
}

@Override
@SystemSetupParameterMethod
public List<SystemSetupParameter> getInitializationOptions()
{
    final List<SystemSetupParameter> params = new ArrayList<>();

    params.add(createBooleanSystemSetupParameter(IMPORT_ACCESS_RIGHTS, "Import Users & Groups", true));

    return params;
}

Здесь то же самое с SQL: https://www.stackextend.com/hybris/run-native-sql-query-hybris/

Так что любой, кто может помочь мне с решением (или с четким ответом, возможно это или нет), приветствуется.

Спасибо!

из java вы можете запускать отличный код.

daggett 17.05.2022 06:55

Выполнение должно быть возможно без какого-либо groovy-инструмента, такого как groovy shell или зависимости groovy-all.

samicic 17.05.2022 10:22

У вас должна быть заводная зависимость, если ее нет в hybris.

daggett 17.05.2022 10:26
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
1
3
31
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В вашем коде можно запустить groovy. Даже в SystemSetup.

Вы можете воспользоваться сервисом hybris (spring bean) de.hybris.platform.scripting.engine.ScriptingLanguagesService это доступно в расширении processing

В коде это может быть что-то вроде

final ClassPathResource resource = new ClassPathResource("location.groovy");
final ResourceScriptContent content = new ResourceScriptContent(resource);

ScriptExecutable groovyScript = scriptingLanguagesService.getExecutableByContent(content);

ScriptExecutionResult result = groovyScript.execute();

Это выполнит скрипт в указанном месте в вашем пути к классам. Если у вас нет groovy в файле в пути к классам, возможны другие типы содержимого. Например: SimpleScriptContent

Спасибо. Именно то, что я искал. Вы знаете что-то подобное с SQL? Например, scriptingLanguagesService.getExecutableByContent(contentWith‌​SQL);

samicic 17.05.2022 17:41

Да, есть боб/класс HybrisJdbcTemplate. С помощью этого компонента вы можете выполнять sql-запросы => template.execute

Yoni 17.05.2022 18:02

Мы можем использовать простой метод, как показано ниже, для достижения.

Вот пример кода:

import groovy.lang.Binding;
import groovy.lang.GroovyShell;



GroovyShell groovy = new GroovyShell(new Binding());
groovy.setVariable("text","Hello World!"); // you can variables here as many you needed
groovy.evaluate("println text"); // you can pass file as well instead of text

Если вам нужен OOB, ScriptingJobPerformable — это класс OOB, на который вы можете ссылаться.

final ScriptExecutable executable = scriptingLanguagesService.getExecutableByURI(dynamicScriptingJob.getScriptURI());

    LOG.info("### Starting executing script : " + dynamicScriptingJob.getScriptURI() + " ###");
    final Map<String, Object> params = ImmutableMap.<String, Object>builder()//
                                                                             .put("cronjob", cronJob) //
                                                                             .put("log", LOG) //
                                                                             .build();
    final ScriptExecutionResult result = executable.execute(params);

Другие вопросы по теме