#hybris #promotions
#sap-commerce-cloud #Рекламные акции
Вопрос:
Я создал рекламную акцию в hybris 1808, но когда я пытаюсь опубликовать рекламную акцию, она терпит неудачу. Такое же продвижение работает в 1808 Vanilla Hybris
Я добавил следующие свойства в localextension.xml и пытался, но все еще сталкивался с той же проблемой
- promotionenginesamplesaddon
- promotionengineatddtests
Я ожидал, что статус продвижения будет опубликован, но при публикации происходит сбой со следующими журналами ошибок :
19.04.23 17:54:40:527 INFO *************************************
19.04.23 17:54:40:535 INFO Starting RuleEngineCompilePublishJob
19.04.23 17:54:40:535 INFO *************************************
19.04.23 17:54:44:903 ERROR The rule compilation finished with errors
19.04.23 17:54:44:910 ERROR Exception caught - de.hybris.platform.servicelayer.exceptions.ModelSavingException: [de.hybris.platform.droolsruleengineservices.interceptors.DroolsRuleValidateInterceptor@3d9f547f]:rule(code:testPromotion) The drl content does not contain the matching rule declaration with the value of your hybris rule's uuid attribute. Please adjust the uuid of your hybris rule and/or add: rule "2e0e0ac2-7475-44c1-9114-07a0d7174534" (i.e. putting the rule uuid in double-quotes) in your drl content.
19.04.23 17:54:44:915 INFO *************************************
19.04.23 17:54:44:915 INFO RuleEngineCompilePublishJob finished with errors
19.04.23 17:54:44:915 INFO *************************************
Комментарии:
1. Пожалуйста, дайте мне знать, если потребуется какая-либо другая информация
Ответ №1:
Какую версию hybris вы используете?
Потому что я столкнулся с этим при обновлении с 6.3 до 6.7 при публикации рекламной акции.
Я переопределил метод в своем пользовательском классе в версии 6.3, который выглядит следующим образом:
@Override
protected String generateRuleContentRule(final DroolsRuleGeneratorContext context, final String actions, final String metadata)
{
final AbstractRuleModel rule = context.getRuleCompilerContext().getRule();
final Map variables = context.getVariables();
final StringBuilder buffer = new StringBuilder(4096);
buffer.append("rule "").append(rule.getUuid()).append(""n");
buffer.append("@ruleCode("").append(rule.getCode()).append("")n");
buffer.append(metadata);
buffer.append("dialect "mvel" n");
buffer.append("salience ").append(rule.getPriority()).append('n');
…
Этот переопределенный метод из класса DEFAULTDROLSRULETARGETCODEGENERATOR пришлось изменить, чтобы включить droolRule uuid вместо rule uuid, что является изменением, включенным в класс OOTB DEFAULTDROLSRULETARGETCODEGENERATOR DEFAULTВ 6.7
protected String generateRuleContentRule(DroolsRuleGeneratorContext context, String actions, String metadata) {
AbstractRuleModel rule = context.getRuleCompilerContext().getRule();
DroolsRuleModel droolsRule = context.getDroolsRule();
StringBuilder buffer = new StringBuilder(4096);
buffer.append("rule "").append(droolsRule.getUuid()).append(""n");
buffer.append("@ruleCode("").append(rule.getCode()).append("")n");
buffer.append("@moduleName("").append(context.getRuleCompilerContext().getModuleName()).append("")n");
buffer.append(metadata);
buffer.append("dialect "mvel" n");
Это устранило ошибку, описанную выше.
Надеюсь, это поможет. Удачного кодирования.