我需要获取存储在SharePoint列表中的用户的信息,例如title,id和loginName。
基本上我的情况是这样的:我有一个"组织联系人"包含特定用户的Office365Account的列表,以及与该用户关联的Manager。这两个字段都是SharePoint" Person"字段。
以下代码是我尝试:
我知道我尝试的技术有什么问题,因为当以var managerName
开头的行被取消注释时应用会冻结。 Chrome Dev工具似乎告诉我所有其他行都在工作,或者至少没有导致错误,因此我预计问题出在var managerName
行。
function getManagerNameforModal() {
var hostUrl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));
var hostContext = new SP.AppContextSite(currentContext, hostUrl);
var hostweb = hostContext.get_web();
var list = hostweb.get_lists().getByTitle(contactsListName);
//A caml query to get manager name for the record where user is equal to current user.
var queryXml = "<View><Query><Where><Eq><FieldRef Name='Office365Account' /><Value Type='Integer'><UserID /></Value></Eq></Where></Query></View>"
var query = new SP.CamlQuery();
query.set_viewXml(queryXml);
var items = list.getItems(query);
var managerName = items.get_item["Manager"].get_title(); //This doesn't work.
currentContext.load(items);
currentContext.executeQueryAsync(onGetManagerNameSuccess, onGetManagerNameFail);
答案 0 :(得分:2)
您的示例包含以下问题/拼写错误:
首先,items
是SP.ListItemCollection,因此为了获取项目,您可以使用以下示例:
for(var i = 0;i < items.get_count();i++) {
var item = items.getItemAtIndex(i);
}
其次,在JSOM中访问SP.ListItem.item Property的适当语法是:
var managerName = item.get_item("Manager"); //not a square brackets
第三,由于JSOM是异步 API,因此必须先使用SP.ClientContext.executeQueryAsync
方法请求列表项集合,然后才能使用successHandler
访问它:< / p>
context.executeQueryAsync(function(){
for(var i = 0;i < items.get_count();i++) {
var item = items.getItemAtIndex(i);
var managerName = item.get_item("Manager");
}
},
function(){
console.log('Error');
});
Forth,managerName
属于SP.FieldUserValue
类型,不包含属性Title
var hostUrl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));
var hostContext = new SP.AppContextSite(currentContext, hostUrl);
var hostweb = hostContext.get_web();
var list = hostweb.get_lists().getByTitle(contactsListName);
//A caml query to get manager name for the record where user is equal to current user.
var queryXml = "<View><Query><Where><Eq><FieldRef Name='Office365Account' /><Value Type='Integer'><UserID /></Value></Eq></Where></Query></View>"
var query = new SP.CamlQuery();
query.set_viewXml(queryXml);
var items = list.getItems(query);
currentContext.load(items);
currentContext.executeQueryAsync(function(){
for(var i = 0;i < items.get_count();i++) {
var item = items.getItemAtIndex(i);
var managerName = item.get_item("Manager").get_lookupValue();
}
},
function(sender,args){
console.log(args.get_message());
});