0

我已使用以下impEx内容创建基于优惠券的促销规则。规则已成功创建,但促销模块未部署到它。

INSERT_UPDATE PromotionSourceRule;code[unique=true];priority;maxAllowedRuns;stackable[default=false];ruleGroup(code);conditions;actions;website(Identifier)[default=$defaultPromoGrp];status(code)[default=$defaultRuleStatus];excludeFromStorefrontDisplay[default=false]

"#% beforeEach:
if(de.hybris.platform.personalizationsampledataaddon.util.CxAddOnSampleDataUtils.isPromotionSourceRuleUnmodifiable(line.get(new Integer(1)))){
    line.clear();
}";
"#% afterEach: de.hybris.platform.core.Registry.getApplicationContext().getBean(""ruleEngineSystemSetup"").registerSourceRuleForDeployment(impex.getLastImportedItem(), new String[]{$promotionModule, $promotionPreviewModule});"
;coupon_code_20_percentage_cart_discount;25;1;true;couponPromotionRuleGroup;"[{""definitionId"":""y_qualifying_coupons"",""parameters"":{""coupons"":{""uuid"":""COUPON20"",""type"":""List(ItemType(AbstractCoupon))"",""value"":[""COUPON20""]}},""children"":[]}]";"[{""definitionId"":""y_order_percentage_discount"",""parameters"":{""value"":{""uuid"":""20"",""type"":""java.math.BigDecimal"",""value"":20}}}]";;;
4

2 回答 2

0

以下 impex 将用于编译和发布促销规则

$defaultPromoGrp = <promo-group>
$promotionSourceRulesQuery="select {psr.pk} from {PromotionSourceRule as psr},{PromotionGroup as pg} where {psr.code} in ('<Promotion Code with comma separated>') and {pg.Identifier}='$defaultPromoGrp' and {psr.website}={pg.pk}"

"#%groovy% ruleCompilerService = spring.getBean('ruleCompilerService');

platformRuleEngineService = spring.getBean('platformRuleEngineService');

flexibleSearchService = spring.getBean('flexibleSearchService');

List sourceRules = flexibleSearchService.search($promotionSourceRulesQuery).getResult();

spring.getBean('ruleMaintenanceService').compileAndPublishRules(sourceRules, ""promotions-module"", false);
";
于 2019-11-14T05:35:26.150 回答
0

您是通过 hac 还是作为系统初始化/更新的一部分进行导入的?

RuleEngineSystemSetup 中的逻辑仅适用于系统初始化或系统更新的上下文。如果您查看默认实现,您将看到:

public class DefaultRuleEngineSystemSetup extends AbstractEventListener<AfterInitializationEndEvent>

所以在 impex 和对registerSourceRuleForDeployment规则的调用仅注册发布,一旦AfterInitializationEndEvent被触发(由平台在初始化/更新后),收集的规则就会被发布。

如果您在 hac 的上下文中运行此脚本,您可以使用 beanshell 代码调用常规RuleEngineService方法之一来初始化您的模块,或者您可以尝试调用DefaultRuleEngineSystemSetup.onEvent(final AfterInitializationEndEvent event)传递“假”非空事件的方法触发系统设置类中的逻辑(它需要一个非空事件来记录我相信哪个事件,但除此之外没有使用该事件)我没有尝试过的最后一件事,两者都需要更多的脚本你的 impex 脚本。

希望这会有所帮助,塞巴斯蒂安

于 2018-03-27T08:27:09.867 回答