The .getAll()
function in PnPjs is used to retrieve all items from a SharePoint list or library in a paginated manner. SharePoint lists often have a threshold limit (commonly 5000 items) that restricts how many items can be retrieved in a single request. .getAll()
overcomes this limitation by making multiple requests in the background and combining the results, so you can fetch large datasets seamlessly.
Key Features of .getAll()
- Paginated Retrieval: Automatically handles pagination to retrieve all items in batches.
- Customizable Batch Size: Allows you to specify the number of items per batch using the
requestSize
parameter. - Efficient Handling of Large Data: Designed for scenarios where you need to retrieve more than the SharePoint threshold.
Syntax
.getAll(requestSize?: number): Promise<T[]>
Parameters:
requestSize
(optional):- Specifies the number of items to fetch in each request.
- Default is
2000
. - Adjust this value based on your dataset size and server performance.
Returns:
- A
Promise
that resolves to an array of items (T[]
), whereT
is the type of the list items.
Example Usage
Basic Example:
Retrieve all items from a list with the default batch size (2000
items per request):
import { sp } from "@pnp/sp";
async function getAllItems() {
try {
const items = await sp.web.lists.getByTitle("MyList").items.getAll();
console.log(items); // Logs all items in the list
} catch (error) {
console.error("Error fetching items:", error);
}
}
Specify a Custom requestSize
:
Retrieve all items with a batch size of 500
items per request:
import { sp } from "@pnp/sp";
async function getAllItemsWithCustomBatchSize() {
try {
const items = await sp.web.lists.getByTitle("MyList").items.getAll(500);
console.log(items); // Logs all items in the list
} catch (error) {
console.error("Error fetching items:", error);
}
}
When to Adjust requestSize
?
- Keep Default (2000):
- Best for most scenarios as it balances performance and network overhead.
- Use this if you’re not experiencing timeout issues or performance problems.
- Best for most scenarios as it balances performance and network overhead.
- Increase Request Size (>2000):
- Consider increasing the size if your list contains many items and the server/network can handle larger payloads efficiently.
- Example: Use
5000
if your server has good performance and can handle it.
- Decrease Request Size (<2000):
- Use a smaller batch size for scenarios with limited server resources or if you’re running into timeout issues.
- Example: Use
500
if the list contains very large columns or attachments.
Practical Notes:
- Threshold Handling:
.getAll()
handles the 5000-item threshold automatically by making multiple requests. - Performance Considerations:
- Larger
requestSize
reduces the number of requests but increases the size of each response, which might cause timeouts or delays. - Smaller
requestSize
increases the number of requests but reduces the chance of timeouts.
- Larger
- Error Handling: Always wrap your
.getAll()
calls in atry-catch
block to handle network or SharePoint API errors gracefully. - Filtering and Select: Use
.select()
and.filter()
before.getAll()
to reduce the payload size:
const items = await sp.web.lists.getByTitle("MyList").items
.select("Title", "Id")
.filter("Status eq 'Active'")
.getAll(1000);
In summary
The .getAll()
function in PnPjs is a robust solution for handling large datasets in SharePoint by automating pagination and bypassing threshold limits. With features like customizable requestSize
, it offers flexibility to optimize performance for diverse scenarios. Whether you’re fetching a few thousand items or managing server-intensive tasks, this function simplifies the process while keeping your code clean and efficient.
Tips to Maximize Efficiency with .getAll()
- Start Simple: Stick with the default
requestSize
of 2000 unless specific conditions warrant a change. - Optimize Queries: Use
.select()
and.filter()
to limit the fields and data retrieved, reducing payload size and improving performance. - Plan for Errors: Wrap your
.getAll()
calls in atry-catch
block to handle potential API or network issues gracefully. - Test for Balance: Experiment with different
requestSize
values to find the sweet spot for your server’s performance and dataset size.
By following these tips, you can confidently leverage .getAll()
to enhance your SharePoint development projects. If you haven’t tried it yet, now’s the perfect time to experiment and see how it fits into your workflows!
References:
- PnPjs Documentation – Items.getAll
Learn more about the.getAll()
function and its parameters. - Handling SharePoint List Thresholds
Best practices for working with large lists and libraries in SharePoint. - Optimizing PnPjs Queries
Advanced techniques for optimizing queries in PnPjs.
Accounting.js Cascading StyleSheet Cheat Sheet Collaboration Competitors Connect Content Type CSS Currency Design Flows HTML5 Issues Javascript JavsScript Microsoft Teams NodeJs Numeral.js O365 Office 365 OneDrive Overflow PnP Power Automate PowerAutomate PowerShell Pwermissions ReactJs Rest Endpoint Send an HTTP Request to SharePoint SharePoint SharePoint Architecture SharePoint Designs SharePoint Modern SharePoint Online ShellScript SPFX SPO Styling Sync Tags Taxonomy Teams Teams App Transform JS