如何从SPFX中的Sharepoint列表的特定视图中获取项目?

问题描述 投票:0回答:1

我正在尝试使用@ pnp / sp库从SPFX的Sharepoint列表的特定视图中获取项目,但无法这样做。我能够获取列表的视图属性和字段。我没有找到任何东西来获取该视图的项目。我将如何实现相同的目标,并且我的列表也包含Lookup列。

listview sharepoint sharepoint-2013 spfx pnp-js
1个回答
0
投票

[不支持直接从特定视图获取项目的直接功能。相反,有必要从ListView获取CAML查询,然后基于CAML查询获取项目,这是一个代码段供您参考:

import { sp } from "@pnp/sp";
import "@pnp/sp/webs";
import "@pnp/sp/lists";
import "@pnp/sp/views";
import "@pnp/sp/items";
import { SPHttpClient, SPHttpClientConfiguration, SPHttpClientResponse,
  ISPHttpClientConfiguration } from '@microsoft/sp-http';

  public getListViewData():void{
    let listName = "JqueryList"; //The display name of the sharepoint list.
    let viewName = "All Items"; //The View Name

    HelloWorldWebPart.getViewQueryForList(listName,viewName).then((res:any) => {
        HelloWorldWebPart.getItemsByViewQuery(listName,res).then((items:any[])=>{
            items.forEach((item:any) => {
                console.log(item);
            });
        })
    }).catch(console.error);
}

//First method that retrieves the View Query
public static getViewQueryForList(listName:string,viewName:string):Promise<any> {
    let listViewData = "";
    if(listName && viewName){
        return sp.web.lists.getByTitle(listName).views.getByTitle(viewName).select("ViewQuery").get().then(v => {
            return v.ViewQuery;
        });
    } else {
        console.log('Data insufficient!');
        listViewData = "Error";
    }
}


//Second method that retrieves the View data based on the View Query and List name
public static getItemsByViewQuery(listName:string, query:string):Promise<any> {
    const xml = '<View><Query>' + query + '</Query></View>';
    return sp.web.lists.getByTitle(listName).getItemsByCAMLQuery({'ViewXml':xml}).then((res:SPHttpClientResponse) => {
        return res;
    })
}

这里有一个类似的线程供您参考:

How get sharepoint list items by view(s) in spfx?

© www.soinside.com 2019 - 2024. All rights reserved.