我正在尝试使用 @pnp/sp 库从 SPFX 中 Sharepoint 列表的特定视图中获取项目,但我无法这样做。我能够获取列表的视图属性和字段。我没有找到任何东西来获取该视图的项目。我将如何能够实现相同的目标,并且我的列表也包含查找列。
问问题
1210 次
1 回答
0
没有支持从特定视图获取项目的直接功能。相反,需要从 ListView 获取 CAML Query,然后根据 CAML Query 获取项目,这里有一个代码片段供您参考:
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;
})
}
这是一个类似的线程供您参考:
于 2020-06-08T08:52:59.647 回答