2 回答
TA贡献1887条经验 获得超5个赞
CMSNavigationService 提供了两种获取根导航节点的方法:
一种是不接受任何参数,另一种是接受目录版本作为参数。当您传递目录版本时,该服务将搜索此特定目录版本中的导航节点。
当您不指定时,它将在会话目录版本中搜索。hybris 不会在会话中为 cronjobs 设置目录版本。所以你不应该找到导航节点。当您手动将目录版本设置到会话中时(使用您问题中的代码段),它将再次起作用。
我希望我正确理解了这个问题。
TA贡献1831条经验 获得超4个赞
一般来说,如果没有目录版本,您将无法获得导航节点,因为它们可以识别目录,这意味着您有一个 NavigationNode 的多个实例。在这种情况下,Hybris 无法知道您到底需要哪个。但是,您可以以更好的方式处理您的变通方法。当您的代码中的某些内容需要特定用户时,您可以像这样使用它。可以肯定的是,您可以在 execute() 中添加一个 try - finally 块,并在 try 中设置您的参数并在 finally 中删除它们。
private Object myMethod()
{
return getSessionService().executeInLocalView(new SessionExecutionBody()
{
@Override
public Object execute()
{
// Your code for an isolated session. Set session params here, remove restrictions and so on.
//searchRestrictionService.disableSearchRestrictions(); for example
return new Object();
}
}, userService.getAdminUser()); // You can also specify as which user you want to execute the code
}
另一个有趣的事情是这个。
final Map<String, Object> params = ImmutableMap.of(InterceptorExecutionPolicy.DISABLED_INTERCEPTOR_TYPES,
ImmutableSet.of(InterceptorExecutionPolicy.InterceptorType.VALIDATE));
sessionService.executeInLocalViewWithParams(params, new SessionExecutionBody()
您可以在哪里指定不同的参数。例如,这个禁用了一些拦截器。
添加回答
举报