В бэк-офисе Hybris как отобразить два узла одного и того же типа элемента, но с разным статусом (например, статус: - ожидающий, завершенный) элементов? - PullRequest
0 голосов
/ 06 января 2020

В backoffice у меня есть два узла, как показано ниже. У меня есть только один тип элемента "Умиротворение". Так как фильтровать и показывать его в backoffice.

  1. code = "PendingAppeasements" id = "PendingAppeasements"
  2. code = "CompletedAppeasements" id = "CompletedAppeasements"

Код для справки:

custome_backoffice_config.xml :- 
<context component="explorer-tree" merge-by="module">
  <explorer-tree:explorer-tree xmlns:explorer-tree="hybris.com/cockpitng/config/explorertree">
    <explorer-tree:navigation-node id="AppeasementsDetails">
      <explorer-tree:type-node code="PendingAppeasements" id="PendingAppeasements" />
      <explorer-tree:type-node code="CompletedAppeasements" id="CompletedAppeasements" />
    </explorer-tree:navigation-node>
  </explorer-tree:explorer-tree>
</context>

1 Ответ

0 голосов
/ 07 января 2020

У меня нет полного пошагового ответа, но в версии 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);
    }

}

Надеюсь, это поможет :)

...