问题:
当SharePoint List里的数据超过5000时,如果使用常用的rest api去获取数据,例如
await this.sp.web.lists.getByTitle('Document Library').rootFolder.files.select('*, listItemAllFields').expand('listItemAllFields').filter(`listItemAllFields/testID eq '1111'`)()或await this.sp.web.lists.getByTitle('xxx').items.filter(`Status eq '${status}'`).top(5000)()
Api会报错,提示list里的数据超过5000
解决方法:
使用renderListDataAsStream() 方法,用xml语句的形式获取数据。
import { IRenderListDataParameters } from '@pnp/sp/lists';const query: IRenderListDataParameters = {ViewXml: `<View><RowLimit Paged="TRUE">5000</RowLimit><Query><Where><And><Or><Contains><FieldRef Name='Title'/><Value Type='Text'>${title}</Value></Contains><Contains><FieldRef Name='ID'/><Value Type='Text'>${id}</Value></Contains></Or><Eq><FieldRef Name='Status'/><Value Type='Text'>${status}</Value></Eq></And></Where></Query></View>`,Paging:lastHref ? lastHref.substring(1):undefined }return this._web.lists.getByTitle('xxx').renderListDataAsStream(query).then(async (result:any) => {return result.Row});
注意事项:
如果获取数据有filter条件,需要将检索的参数设置index,
设置index的方式可以参考下方官方文档
Add an index to a list or library column - Microsoft Support