Sharepoint中的异步查询委托函数



我有一个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的组的成员。

这是我的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), 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不在。

最新更新