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()
您可以在哪里指定不同的參數。例如,這個禁用了一些攔截器。
添加回答
舉報