2

我需要获取存储在 SharePoint 列表中的用户的信息,例如标题、ID 和登录名。

基本上我的情况是这样的:我有一个“组织联系人”列表,其中包括特定用户的 Office365Account,以及与该用户关联的经理。这两个字段都是 SharePoint“人员”字段。

下面的代码是我的尝试:

  1. 查询列表以获取具有与当前用户匹配的 Office365Account 的项目(行)。
  2. 从该项目(行)中读取经理字段。

我知道我正在尝试的技术有问题,因为当var managerName未注释开头的行时应用程序会冻结。Chrome 开发工具似乎告诉我所有其他线路都在工作,或者至少不会导致错误,所以我认为问题出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);
4

1 回答 1

2

您的示例包含以下问题/错别字:

首先,items是一个SP.ListItemCollection,因此为了获取项目,您可以使用以下示例:

for(var i = 0;i < items.get_count();i++) {
    var item = items.getItemAtIndex(i); 
}  

其次,在 JSOM 中访问SP.ListItem.item 属性的适当语法是:

var managerName = item.get_item("Manager");  //not a square brackets

第三,由于 JSOM 是一个异步API,列表项集合必须首先使用SP.ClientContext.executeQueryAsync方法请求,然后才能使用successHandler

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');
    }); 

第四,managerNameSP.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());
});
于 2014-06-14T10:46:01.693 回答