У меня нет полного пошагового ответа, но в версии 6.7 hybris правила источника продвижения показывают два узла: один узел показывает все правила источника продвижения, а другой - только правила источника статуса, опубликованные или не опубликованные. (исключая неактивные, заархивированные и т. д. c), поэтому между двумя узлами выполняется некоторая фильтрация. (чтобы увидеть в backoffice перейдите к Маркетинг -> Правила продвижения, и вы увидите два подузла) Примечание: В более поздних версиях это было изменено снова, и есть только один узел.
Если я правильно понимаю, " фильтрованное представление »работает путем добавления начальной конфигурации расширенного поиска, которая отфильтровывает исходные правила продвижения на основе его статуса. Вероятно, вы могли бы добиться чего-то подобного, скопировав и скорректировав подход.
Ключевые элементы конфигурации, по-видимому, находятся в /promotionenginebackoffice/resources/promotionenginebackoffice-backoffice-config.xml (объявляя два узла дерева проводника):
<explorer-tree:explorer-tree xmlns:explorer-tree="http://www.hybris.com/cockpitng/config/explorertree">
<explorer-tree:navigation-node id="hmc_treenode_marketing">
<explorer-tree:navigation-node id="hmc_type_tree_abstractpromotion" merge-mode="remove" />
<explorer-tree:navigation-node id="hmc_typenode_promotion_rules">
<explorer-tree:type-node id="hmc_published_and_unpublished_promotion_rules_only" code="PromotionSourceRule"/>
<explorer-tree:type-node id="hmc_all_promotion_rules_only" code="PromotionSourceRule"/>
</explorer-tree:navigation-node>
<explorer-tree:type-node id="hmc_typenode_promotion_rule_templates" code="PromotionSourceRuleTemplate"/>
<explorer-tree:type-node id="hmc_type_tree_promotiongroup" code="PromotionGroup"/>
<explorer-tree:type-node id="hmc_typenode_promotion_modules" code="DroolsKIEModule"/>
</explorer-tree:navigation-node>
</explorer-tree:explorer-tree>
</context>
и в /promotionenginebackoffice/resources/promotionenginebackoffice-backoffice-widgets.xml (объявляющий фильтрующий компонент):
<widget id="initPromotionSourceRuleAdvancedSearch" widgetDefinitionId="com.hybris.cockpitng.widgets.common.advancedsearchengine.genericinitializer"
slotId="cockpitWidgetChildrenInvisible" template="false">
<setting key="requiredTypeCode" type="String" value="PromotionSourceRule"/>
<setting key="navigationNodeId" type="String" value="hmc_published_and_unpublished_promotion_rules_only"/>
<setting key="handlerBeanId" type="String" value="sourceRuleAdvancedSearchInitHandler"/>
<virtual-sockets/>
</widget>
Компонент, выполняющий фильтрацию (см. В предыдущий фрагмент) определен в:
<alias name="defaultSourceRuleAdvancedSearchInitHandler" alias="sourceRuleAdvancedSearchInitHandler"/>
<bean id="defaultSourceRuleAdvancedSearchInitHandler" class="de.hybris.platform.ruleenginebackoffice.handlers.SourceRuleAdvancedSearchInitializer"/>
Сам код компонента:
public class SourceRuleAdvancedSearchInitializer implements AdvancedSearchInitializer
{
private static final String STATUS = "status";
@Override
public void addSearchDataConditions(final AdvancedSearchData searchData, final Optional<NavigationNode> navigationNode)
{
if (nonNull(searchData))
{
removeExistingStatusCondition(searchData);
searchData.addConditionList(ValueComparisonOperator.OR, createStatusSearchConditions());
}
}
protected void removeExistingStatusCondition(final AdvancedSearchData searchData)
{
final List<SearchConditionData> conditions = searchData.getConditions(STATUS);
if (isNotEmpty(conditions))
{
conditions.clear();
}
}
protected List<SearchConditionData> createStatusSearchConditions()
{
return newArrayList(createStatusConditionsList());
}
protected SearchConditionDataList createStatusConditionsList()
{
final FieldType status = createStausField();
final List statusConditionsList = new ArrayList();
statusConditionsList.add(createCondition(status, RuleStatus.UNPUBLISHED));
statusConditionsList.add(createCondition(status, RuleStatus.PUBLISHED));
return SearchConditionDataList.or(statusConditionsList);
}
protected FieldType createStausField()
{
final FieldType status = new FieldType();
status.setDisabled(Boolean.FALSE);
status.setSelected(Boolean.TRUE);
status.setName(STATUS);
return status;
}
protected SearchConditionData createCondition(final FieldType status, final RuleStatus predicate)
{
return new SearchConditionData(status, predicate, ValueComparisonOperator.EQUALS);
}
}
Надеюсь, это поможет :)