我正在尝试使用@ pnp / sp库从SPFX的Sharepoint列表的特定视图中获取项目,但无法这样做。我能够获取列表的视图属性和字段。我没有找到任何东西来获取该视图的项目。我将如何实现相同的目标,并且我的列表也包含Lookup列。
[不支持直接从特定视图获取项目的直接功能。相反,有必要从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;
})
}
这里有一个类似的线程供您参考: