我已使用以下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}}}]";;;
答案 0 :(得分:0)
你是通过hac进行导入还是作为系统init / update的一部分进行导入?
RuleEngineSystemSetup中的逻辑仅适用于系统初始化或系统更新的上下文。 如果您查看默认实现,您将看到:
ddof
所以在impex和对public class DefaultRuleEngineSystemSetup extends AbstractEventListener<AfterInitializationEndEvent>
的调用期间,规则仅被注册用于发布,并且一旦registerSourceRuleForDeployment
被触发(在初始化/更新之后由平台),则发布所收集的规则。 / p>
如果你在hac的上下文中运行这个脚本,你可以使用beanshell代码来调用一个常规的AfterInitializationEndEvent
方法来初始化你的模块,或者你可以尝试调用{{1}传入一个“假”非空事件的方法来触发系统设置类中的逻辑(它需要一个非空事件来记录我相信哪个事件,但除此之外没有使用该事件)
我还没试过的最后一件事,都需要在你的impex脚本中添加一些脚本。
希望这有帮助, 塞巴斯蒂安
答案 1 :(得分:0)
下面的提示将用于编制和发布促销规则
$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);
";