读取存储在SharePoint列表中的用户

时间:2014-06-12 16:27:59

标签: javascript sharepoint-2013 sharepoint-online

我需要获取存储在SharePoint列表中的用户的信息,例如title,id和loginName。

基本上我的情况是这样的:我有一个"组织联系人"包含特定用户的Office365Account的列表,以及与该用户关联的Manager。这两个字段都是SharePoint" Person"字段。

以下代码是我尝试:

  1. 查询列表以获取与当前用户匹配的Office365Account的项目(行)。
  2. 从该项目(行)中读取经理字段。
  3. 我知道我尝试的技术有什么问题,因为当以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);
    

1 个答案:

答案 0 :(得分:2)

您的示例包含以下问题/拼写错误:

首先,itemsSP.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());
});