如何处理 Hybris 2105 的发布推广问题?
How to deal with publishing promotion issues Hybris 2105?
我们已将 SAP Hybris 从 2011 迁移到 2105。
发布新促销时会出现一些问题,这些问题似乎在较低的 version.When 我们发布促销时运行良好(甚至是 OOB 促销,如在 Conditions CMS 网站和 Action 购物车 10% 折扣)当我发布促销时,我收到如下错误:
ruleOrderEntryFixedDiscountAction.executeAction(new
DefaultDroolsRuleActionContext(variables, kcontext),
["value_uuid":"6e732228-89fe-4f4e-8dea-5235dee2ccd7",
"bundleSize":new Integer(4), "bundleSize_uuid":"49803399-
53a8-44b6-85cd-35c1b83235d7", "bundleLimit_uuid":"778299c6-
75bd-414e-97bb-3e5fe1aa0bf9", "bundleLimit":new Integer(2),
"value":new BigDecimal("50")]);
$groupExecution.trackRuleGroupExecution($config);:
[Error: unable to resolve method using strict-mode:
org.drools.core.spi.KnowledgeHelper.$groupExecution()]
这是由于 drools 规则引擎发生了一些变化。这会在解析较旧的 Drools 规则期间导致异常。
要解决这个问题,您可以
将所有 drools 规则的内容设为空白,并重新发布所有规则,以便为您的所有促销活动提供正确且有效的 drools 规则。脚本示例:您需要禁用拦截器,因为它们可能会阻止您更改规则内容
import de.hybris.platform.commerceservices.search.pagedata.PageableData
import de.hybris.platform.servicelayer.search.FlexibleSearchQuery
import com.google.common.collect.ImmutableMap;
import de.hybris.platform.servicelayer.interceptor.impl.InterceptorExecutionPolicy;
import de.hybris.platform.servicelayer.session.SessionExecutionBody;
import de.hybris.platform.servicelayer.session.SessionService;
import com.google.common.collect.ImmutableSet;
int start = 0
int pageSize = 1000
int total = pageSize
final FlexibleSearchQuery searchQuery = new FlexibleSearchQuery("select {PK} from {DroolsRule} ORDER BY {PK}")
searchQuery.setCount(pageSize)
searchQuery.setNeedTotal(true)
while (start < total) {
searchQuery.setStart(start)
def searchResult = flexibleSearchService.search(searchQuery)
searchResult.getResult().each {
final Map<String, Object> params = ImmutableMap.of(InterceptorExecutionPolicy.DISABLED_INTERCEPTOR_TYPES,
ImmutableSet.of(InterceptorExecutionPolicy.InterceptorType.PREPARE,InterceptorExecutionPolicy.InterceptorType.VALIDATE));
sessionService.executeInLocalViewWithParams(params, new SessionExecutionBody() {
@Override
public void executeWithoutResult() {
it.setRuleContent("");
modelService.save(it);
}
});
}
total = searchResult.getTotalCount()
start += pageSize
}
println "Script has been completed."
或
- 如果不再需要,请删除所有
DroolsRule
对象。请注意,删除这些旧规则可能会影响与该 Drools 规则相关的现有订单。促销结果仍将附上,但很难判断是什么促销触发了该结果。
我建议选择第一个选项,以免丢失任何数据
不要忘记在执行任一步骤后重新发布您的规则
我们已将 SAP Hybris 从 2011 迁移到 2105。
发布新促销时会出现一些问题,这些问题似乎在较低的 version.When 我们发布促销时运行良好(甚至是 OOB 促销,如在 Conditions CMS 网站和 Action 购物车 10% 折扣)当我发布促销时,我收到如下错误:
ruleOrderEntryFixedDiscountAction.executeAction(new
DefaultDroolsRuleActionContext(variables, kcontext),
["value_uuid":"6e732228-89fe-4f4e-8dea-5235dee2ccd7",
"bundleSize":new Integer(4), "bundleSize_uuid":"49803399-
53a8-44b6-85cd-35c1b83235d7", "bundleLimit_uuid":"778299c6-
75bd-414e-97bb-3e5fe1aa0bf9", "bundleLimit":new Integer(2),
"value":new BigDecimal("50")]);
$groupExecution.trackRuleGroupExecution($config);:
[Error: unable to resolve method using strict-mode:
org.drools.core.spi.KnowledgeHelper.$groupExecution()]
这是由于 drools 规则引擎发生了一些变化。这会在解析较旧的 Drools 规则期间导致异常。
要解决这个问题,您可以
将所有 drools 规则的内容设为空白,并重新发布所有规则,以便为您的所有促销活动提供正确且有效的 drools 规则。脚本示例:您需要禁用拦截器,因为它们可能会阻止您更改规则内容
import de.hybris.platform.commerceservices.search.pagedata.PageableData import de.hybris.platform.servicelayer.search.FlexibleSearchQuery import com.google.common.collect.ImmutableMap; import de.hybris.platform.servicelayer.interceptor.impl.InterceptorExecutionPolicy; import de.hybris.platform.servicelayer.session.SessionExecutionBody; import de.hybris.platform.servicelayer.session.SessionService; import com.google.common.collect.ImmutableSet; int start = 0 int pageSize = 1000 int total = pageSize final FlexibleSearchQuery searchQuery = new FlexibleSearchQuery("select {PK} from {DroolsRule} ORDER BY {PK}") searchQuery.setCount(pageSize) searchQuery.setNeedTotal(true) while (start < total) { searchQuery.setStart(start) def searchResult = flexibleSearchService.search(searchQuery) searchResult.getResult().each { final Map<String, Object> params = ImmutableMap.of(InterceptorExecutionPolicy.DISABLED_INTERCEPTOR_TYPES, ImmutableSet.of(InterceptorExecutionPolicy.InterceptorType.PREPARE,InterceptorExecutionPolicy.InterceptorType.VALIDATE)); sessionService.executeInLocalViewWithParams(params, new SessionExecutionBody() { @Override public void executeWithoutResult() { it.setRuleContent(""); modelService.save(it); } }); } total = searchResult.getTotalCount() start += pageSize } println "Script has been completed."
或
- 如果不再需要,请删除所有
DroolsRule
对象。请注意,删除这些旧规则可能会影响与该 Drools 规则相关的现有订单。促销结果仍将附上,但很难判断是什么促销触发了该结果。
我建议选择第一个选项,以免丢失任何数据
不要忘记在执行任一步骤后重新发布您的规则