appsmithorg/appsmith · error · AppsmithPluginException
PE-ARG-5000
PE-ARG-5000
Error message
Missing required field 'Spreadsheet Url'
What it means
Thrown by RowsBulkUpdateMethod.validateExecutionMethodRequest when methodConfig.getSpreadsheetId() is null or blank. Code PE-ARG-5000 (PLUGIN_EXECUTE_ARGUMENT_ERROR). The spreadsheet URL is the first mandatory field for bulk update; without it the plugin cannot target a spreadsheet.
Source
Thrown at app/server/appsmith-plugins/googleSheetsPlugin/src/main/java/com/external/config/RowsBulkUpdateMethod.java:49
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
/**
* API reference: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/update
*/
public class RowsBulkUpdateMethod implements ExecutionMethod {
ObjectMapper objectMapper;
public RowsBulkUpdateMethod(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
@Override
public boolean validateExecutionMethodRequest(MethodConfig methodConfig) {
if (methodConfig.getSpreadsheetId() == null
|| methodConfig.getSpreadsheetId().isBlank()) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR, ErrorMessages.MISSING_SPREADSHEET_URL_ERROR_MSG);
}
if (methodConfig.getSheetName() == null || methodConfig.getSheetName().isBlank()) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR,
ErrorMessages.MISSING_SPREADSHEET_NAME_ERROR_MSG);
}
if (methodConfig.getTableHeaderIndex() != null
&& !methodConfig.getTableHeaderIndex().isBlank()) {
try {
if (Integer.parseInt(methodConfig.getTableHeaderIndex()) <= 0) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR,
ErrorMessages.INVALID_TABLE_HEADER_INDEX);
}
} catch (NumberFormatException e) {
throw new AppsmithPluginException(
AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR,View on GitHub (pinned to 8cd9021c24)
Solutions
- Set 'Spreadsheet Url' to a valid https://docs.google.com/spreadsheets/d/.../ URL.
- If bound dynamically, ensure the source is populated before the query runs.
- Re-authorize the datasource if the OAuth token expired.
Example fix
// before
Spreadsheet Url: {{ }}
// after
Spreadsheet Url: https://docs.google.com/spreadsheets/d/1AbC.../edit Defensive patterns
Strategy: validation
Validate before calling
// Check spreadsheet URL/id for bulk update
String id = methodConfig.getSpreadsheetId();
if (id == null || id.isBlank()) {
throw new IllegalArgumentException("'Spreadsheet Url' is required");
} Type guard
boolean hasSpreadsheetId(com.external.config.MethodConfig mc) {
return mc.getSpreadsheetId() != null && !mc.getSpreadsheetId().isBlank();
} Prevention
- Treat the spreadsheet URL as hard-required in the form.
- Gate Run on a non-empty URL.
- Re-authorize the datasource when OAuth expires.
When it happens
Trigger: Running a 'Bulk Update Rows' query with the 'Spreadsheet Url' field empty or a binding that resolved to empty. The null/blank check throws MISSING_SPREADSHEET_URL_ERROR_MSG.
Common situations: Datasource misconfiguration, cleared URL field, or a dynamic binding to an empty widget/property.
Related errors
AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12).
Data as JSON: /api/errors/ce6ed3e7bbafd02a.
Report an issue: GitHub.