如何通过Impex发布PromotionSourceRule?

时间:2018-03-26 12:20:26

标签: hybris impex

我已使用以下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}}}]";;;

2 个答案:

答案 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);
";