正如@Gagravarr指出的那樣,您無法通過共享層訪問siteService。
相反,您必須使用Alfresco的REST API。
感謝您指點我正確的方向。
我最終加入以下功能
function getUserSites()
{
// Call the repository for the site profile
var json = remote.call("/api/people/" + encodeURIComponent(user.name) + "/sites");
var userSites = null;
if (json.status == 200)
{
// Create javascript objects from the repo response
var obj = eval('(' + json + ')');
if (obj)
{
userSites = obj;
}
}
return userSites;
}
和改變generateAppItems到
function generateAppItems() {
var appItems = [
{
id: "HEADER_HOME",
name: "alfresco/menus/AlfMenuBarItem",
config: {
id: "HEADER_HOME",
label: "header.menu.home.label",
targetUrl: "user/" + encodeURIComponent(user.name) + "/dashboard"
}
}
];
var sites = getUserSites();
if(sites != null) {
for (var i=0; i<sites.length; i++)
{
var targetUrl = "site/" + sites[i].shortName + "/dashboard";
appItems.push({
id: "HEADER_SITE_" + sites[i].shortName.toUpperCase(),
name: "alfresco/menus/AlfMenuBarItem",
config: {
id: "HEADER_SITE_" + sites[i].shortName.toUpperCase(),
label: (sites[i].title) ? sites[i].title : sites[i].shortName,
targetUrl: targetUrl
}
});
}
}
appItems.push({
id: "HEADER_SITES_MENU",
name: "alfresco/header/AlfSitesMenu",
config: {
id: "HEADER_SITES_MENU",
label: "header.menu.sites.label",
currentSite: page.url.templateArgs.site,
currentUser: user.name
}
},
{
id: "HEADER_TASKS",
name: "alfresco/header/AlfMenuBarPopup",
config: {
id: "HEADER_TASKS",
label: "header.menu.tasks.label",
widgets: [
{
name: "alfresco/menus/AlfMenuGroup",
config: {
widgets: [
{
id: "HEADER_MY_TASKS",
name: "alfresco/header/AlfMenuItem",
config:
{
id: "HEADER_MY_TASKS",
label: "header.menu.mytasks.label",
iconClass: "alf-mytasks-icon",
targetUrl: "my-tasks#filter=workflows|active"
}
},
{
id: "HEADER_MY_WORKFLOWS",
name: "alfresco/header/AlfMenuItem",
config:
{
id: "HEADER_MY_WORKFLOWS",
label: "header.menu.myworkflows.label",
iconClass: "alf-myworkflows-icon",
targetUrl: "my-workflows#filter=workflows|active"
}
}
]
}
}
]
}
});
if (user.isAdmin || showRepositoryLink == "true")
{
appItems.push({
id: "HEADER_REPOSITORY",
name: "alfresco/menus/AlfMenuBarItem",
config: {
id: "HEADER_REPOSITORY",
label: "header.menu.repository.label",
targetUrl: "repository"
}
});
}
if (user.isAdmin)
{
appItems.push({
id: "HEADER_ADMIN_CONSOLE",
name: "alfresco/menus/AlfMenuBarItem",
config: {
id: "HEADER_ADMIN_CONSOLE",
label: "header.menu.admin.label",
targetUrl: "console/admin-console/application"
}
});
}
return appItems;
}
這將導致從共享標題菜單去掉了文件和共享文件,並添加所有該用戶所屬的網站是用於更快導航的菜單項。
根據[Alfresco JavaScript API文檔](http://docs.alfresco.com/4.0/references/API-JS-rootscoped.html),'siteService' JS對象僅適用於Repository(Alfresco webapp )腳本。它在共享層上不可用。爲什麼不簡單地調用其中一個Alfresco webscript(REST API)來獲取用戶的站點列表? – Gagravarr