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

В бэк-офисе у меня есть два узла, как показано ниже. У меня есть только один Itemtype "умиротворение". Итак, как его отфильтровать и показать в бэк-офисе.

  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>

person user3809154    schedule 06.01.2020    source источник
comment
Код для справки 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›   -  person user3809154    schedule 06.01.2020
comment
Я добавил ваш код в ваш вопрос. В следующий раз предлагаю отредактировать ваш вопрос, чтобы сделать его более полным.   -  person Roberto Caboni    schedule 06.01.2020


Ответы (1)


У меня нет полного пошагового ответа, но в версии hybris 6.7 правила источника продвижения показывают два узла, один узел показывает все правила источника продвижения, а другой показывает только правила источника продвижения: опубликованный или неопубликованный (исключая неактивны, заархивированы и т. д.), поэтому между двумя узлами выполняется некоторая фильтрация. (чтобы увидеть в бэк-офисе, перейдите в раздел «Маркетинг -> Правила продвижения», и вы увидите два подузла) Примечание: в более поздних версиях это было снова изменено, и есть только один узел.

Если я правильно понимаю, «фильтрованное представление» работает, добавляя начальную конфигурацию расширенного поиска, которая отфильтровывает правила источника продвижения на основе его статуса. Вероятно, вы могли бы добиться чего-то подобного, скопировав и изменив подход.

Ключевые элементы конфигурации, похоже, находятся в /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 (объявление bean-компонента фильтрации):

<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"/>

Сам код bean-компонента таков:

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);
    }

}

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

person Sebastian    schedule 07.01.2020
comment
Я создаю свой собственный AdvancedSearchInitializer, но когда я нажимаю на узел, он никогда не попадает в AdvancedSearchInitializer. Я выполнил все шаги, упомянутые выше, также добавил ‹widget-connection sourceWidgetId = explorerTree outputId = nodeSelected targetWidgetId = initAppeasementAdvancedSearch inputId = nodeSelected /› ‹widget-connection source = initAppeasementAdvancedSearch outputId = outContext targetWidgetId = advancedSearch inputId = initContext / ›в файле custon widgets.xml. их какая-нибудь мысль отсутствует? - person user3809154; 10.01.2020