问题描述
我有一个 HTML 页面,它作为 Webpart 嵌入 Sharepoint(本地)中。
该页面包含一个 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
的组的成员来隐藏一些类别/请求。
这是我的JS代码:
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),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),onError));
}
});
抛出异常,指出 get_count()
未定义。我认为这是因为 categories
变量为空。
我的问题是为什么?它与委托功能有关吗?
但是话又说回来,为什么在调用 oUsers
时 onGroupSuccess
不为 null?
解决方法
因为 oUsers
变量在全局范围内,而 categories
不在。