我有一个HTML页面,作为一个web部件嵌入在Sharepoint (on-prem)。
该页由Categories
列表和每个类别的Requests
列表组成。
如
1. Category Name: "Cat 1"
- Request Name: "Req 1"
- Request Name: "Req 2"
2. Category Name: "Cat 2"
- Request Name: "Req 3"
直到现在,每个用户都可以看到所有的类别和所有的请求。现在我想隐藏一些类别/请求取决于当前登录的用户是否是一个名为testGroup
的组的成员。
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function () {
var context = SP.ClientContext.get_current();
var oGroup = context.get_web().get_siteGroups().getByName("testGroup");
var oUsers = oGroup.get_users();
var isMember = false;
context.load(oUsers);
context.executeQueryAsync(Function.createDelegate(this, onGroupSuccess), Function.createDelegate(this, onError));
function onError(sender, args) {
alert("error: " + args.get_message());
}
function onRequestByCategorySuccess(sender, args) {
var html ="";
for (var i = 0; i < requests.get_count() ; i++) {
var request = requests.getItemAtIndex(i);
var entry = {
id:request.get_id(),
title: request.get_item('Title'),
link: request.get_item('Link') == null ? "" : request.get_item('Link').get_url()
};
if(isMember && entry.id === someOtherReqId) {
// append to HTML
}
}
}
function onCategorySuccess(sender, args) {
var html ="";
for (var i = 0; i < categories.get_count() ; i++) {
var category = categories.getItemAtIndex(i);
var entry = {
id:category.get_id(),
title: category.get_item('Title'),
image: category.get_item('Image') == null ? "" : category.get_item('Image').get_url()
};
if(isMember && entry.id === someOtherCategoryId) {
// append to html
}
var list = context.get_web().get_lists().getByTitle("RequestsList");
var query = new SP.CamlQuery();
query.set_viewXml("<View><Query><Where><Eq><FieldRef Name='Category' LookupId='TRUE'/><Value Type='Lookup'>" +entry.id + "</Value></Eq></Where></Query></View>");
var requests = list.getItems(query);
context.load(requests);
context.executeQueryAsync(Function.createDelegate(this, onRequestByCategorySuccess), Function.createDelegate(this, onError));
}
}
function onGroupSuccess(sender, args) {
var oEnumerator = oUsers.getEnumerator();
while (oEnumerator.moveNext()) {
var oUser = oEnumerator.get_current();
if(oUser.get_id() === _spPageContextInfo.userId)
isMember = true;
}
var list = context.get_web().get_lists().getByTitle("CategoriesList");
var query = new SP.CamlQuery();
query.set_viewXml("<View><Query></Query></View>");
var categories = list.getItems(query);
context.load(categories);
context.executeQueryAsync(Function.createDelegate(this, onCategorySuccess), Function.createDelegate(this, onError));
}
});
抛出一个异常,说明get_count()
未定义。我认为这是因为categories
变量为空。我的问题是为什么?它和委托函数有关吗?但话又说回来,为什么onGroupSuccess
被调用时oUsers
不是空的?
因为oUsers
变量在全局作用域中,而categories
不在。