sharepoint 获取具有查找列的列表项

示例

有时,您的列表结构可能如下所示:

动物清单表

名称类型描述
标题字串(文字)动物的名字
年龄动物多大了
货币动物的价值
类型查找(动物类型表)查找字段(从“动物类型”表中选择下拉菜单)

动物类型表

名称类型描述
标题字串(文字)物种名称/动物类型(例如猪)
坚果动物的腿数

可能不是最严重的示例,但是这里的问题仍然有效。当您使用常规请求从SharePoint列表中检索值时,对于Type动物的,您将仅取回TypeIdJSON响应中称为的字段。为了仅通过单个AJAX调用即可扩展这些项目,URL参数中需要一些额外的标记。

这个例子不仅适用于查找列。当您使用People/Groups列,他们基本上只是查找为好,这样可以拉动项目,如Title,EMail和其他人很容易。

范例程式码

重要说明:定义要从查询列中取回的字段时,必须在原始表中以该字段的名称为前缀。例如,如果NumLegs要从查找列取回属性,则必须键入Type/NumLegs。

的JavaScript

// webUrl: The url of the site (ex. https://www.contoso.com/sites/animals)
// listTitle:要查询的列表的名称
// selectFields:您要取回的特定字段
// expandFields:需要从查找表中拉出的字段的名称
// callback:成功时回调函数的名称
function getItems(webUrl,listTitle,selectFields, expandFields, callback){
    var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items";
    endpointUrl+= '?$select=' + selectFields.join(",");
    endpointUrl+= '&$expand=' + expandFields.join(",");
    return executeRequest(endpointUrl,'GET', callback);
}

function executeRequest(url,method,callback,headers,payload) 
{
    if (typeof headers == 'undefined'){
        headers = {};
    }
    headers["Accept"] = "application/json;odata=verbose";
    if(method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   

    var ajaxOptions = 
    {       
    url: url,   
    type: method,  
    contentType: "application/json;odata=verbose",
    headers: headers,
    success: function (data) { callback(data) }
    };
    if(method == "POST") {
   ajaxOptions.data= JSON.stringify(payload);
    }  

    return $.ajax(ajaxOptions);
}

// 通过将所有参数设置为getItems函数来设置ajax请求
function getAnimals() {
    var url = "https://www.contoso.com/sites/animals";
    var listTitle = "AnimalListing";
    
    var selectFields = [
        "Title",
        "Age",
        "Value",
        "Type/Title",
        "Type/NumLegs"
    ];

    var expandFields = [
        "Type/Title",
        "Type/NumLegs"
    ];

    getItems(url, listTitle, selectFields, expandFields, processAnimals);
}

// 回调功能
// 数据:返回SharePoint提供的数据
function processAnimals(data) {
    console.log(data);
    // 在这里处理数据
}

// 开始整个过程
getAnimals();