在Hybris backoffice中,如何显示两个具有相同项目类型但状态不同(例如状态:-待定、已完成)的节点项目?

在Hybris backoffice中,如何显示两个具有相同项目类型但状态不同(例如状态:-待定、已完成)的节点项目?,hybris,backoffice,Hybris,Backoffice,在backoffice中,我有两个节点,如下所示。我只有一个项目类型“绥靖”。所以如何在后台过滤和显示它 code=“PendingAppeaments”id=“PendingAppeaments” code=“completedappeaements”id=“completedappeaements” 参考代码: custome_backoffice_config.xml :- <context component="explorer-tree" merge-by="module"&g

在backoffice中,我有两个节点,如下所示。我只有一个项目类型“绥靖”。所以如何在后台过滤和显示它

  • code=“PendingAppeaments”id=“PendingAppeaments”
  • code=“completedappeaements”id=“completedappeaements”
  • 参考代码:

    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>
    
    custome\u backoffice\u config.xml:-
    
    我没有完整的分步回答,但在6.7版的hybris中,促销源规则显示两个节点,一个节点显示所有促销源规则,另一个节点仅显示状态为已发布或未发布的促销源规则(不包括非活动、已存档等),因此,在两个节点之间进行了一些过滤。 (要在backoffice中查看,请导航到营销->促销规则,您将看到两个子节点) 注意:在以后的版本中,这一点再次更改,并且只有一个节点

    如果我理解正确,“过滤视图”的工作原理是添加一个初始高级搜索配置,根据其状态过滤出促销源规则。 通过复制和调整方法,您可能会获得类似的结果

    关键配置元素似乎位于/promotionenginebackoffice/resources/promotionenginebackoffice-backoffice-config.xml中(声明两个资源管理器树节点):

    
    
    在/promotionenginebackoffice/resources/promotionenginebackoffice-backoffice-widgets.xml(声明过滤bean)中:

    
    
    执行过滤的bean(在前面的代码段中引用)在中定义:

    <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);
        }
    
    }
    
    公共类SourceRuleAdvancedSearchInitializer实现AdvancedSearchInitializer
    {
    私有静态最终字符串STATUS=“STATUS”;
    @凌驾
    public void addSearchDataConditions(最终AdvancedSearchData搜索数据,最终可选导航节点)
    {
    if(非空(搜索数据))
    {
    移除现有状态条件(searchData);
    searchData.addConditionList(ValueComparisonOperator.OR,createStatusSearchConditions());
    }
    }
    受保护的无效删除现有状态条件(最终高级搜索数据搜索数据)
    {
    最终列表条件=searchData.getConditions(状态);
    如果(isNotEmpty(条件))
    {
    条件。清除();
    }
    }
    受保护列表createStatusSearchConditions()
    {
    返回newArrayList(createStatusConditionsList());
    }
    受保护的SearchConditionDataList CreateStatusConditionList()
    {
    最终FieldType状态=createStausField();
    最终列表状态列表=新的ArrayList();
    statusConditionsList.add(createCondition(status,RuleStatus.UNPUBLISHED));
    statusConditionsList.add(createCondition(status,RuleStatus.PUBLISHED));
    返回SearchConditionDataList.or(状态条件列表);
    }
    受保护的字段类型createStausField()
    {
    最终字段类型状态=新字段类型();
    status.setDisabled(Boolean.FALSE);
    status.setSelected(Boolean.TRUE);
    status.setName(status);
    返回状态;
    }
    受保护的SearchConditionData createCondition(最终字段类型状态、最终规则状态谓词)
    {
    返回新的SearchConditionData(状态、谓词、ValueComparisonOperator.EQUALS);
    }
    }
    

    希望这有帮助:)

    参考代码custome\u backoffice\u config.xml:-我在您的问题中添加了您的代码。下次我建议编辑您的问题以使其更完整。我创建了自己的AdvancedSearchInitializer,但当我单击节点时,它不会进入AdvancedSearchInitializer,我遵循了上面提到的所有步骤,这些步骤也添加到了custon widgets.xml文件中。他们的想法缺失了吗?
    <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);
        }
    
    }