正如@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