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