appsmithorg/appsmith · error · AppsmithPluginException
PLUGIN_EXECUTE_ARGUMENT_ERROR
PLUGIN_EXECUTE_ARGUMENT_ERROR
Error message
Missing required field 'Spreadsheet Url'
What it means
Thrown by SheetDeleteMethod.validateExecutionMethodRequest (line 39, the 'Delete Sheet' action) when MethodConfig.spreadsheetId is null or blank - i.e. the spreadsheet URL was missing or did not parse to an id. Note the listed code is PLUGIN_EXECUTE_ARGUMENT_ERROR (the enum name), which is the same family as PE-ARG-5000. Message: MISSING_SPREADSHEET_URL_ERROR_MSG = "Missing required field 'Spreadsheet Url'".
Source
Thrown at app/server/appsmith-plugins/googleSheetsPlugin/src/main/java/com/external/config/SheetDeleteMethod.java:39
import java.util.Map;
import java.util.Set;
/**
* API reference: https://developers.google.com/sheets/api/guides/migration#delete_a_sheet
*/
public class SheetDeleteMethod implements ExecutionMethod {
ObjectMapper objectMapper;
public SheetDeleteMethod(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);
}
return true;
}
@Override
public Mono<Object> executePrerequisites(MethodConfig methodConfig, OAuth2 oauth2) {
WebClient client =
WebClientUtils.builder().exchangeStrategies(EXCHANGE_STRATEGIES).build();
UriComponentsBuilder uriBuilder = getBaseUriBuilder(this.BASE_SHEETS_API_URL, methodConfig.getSpreadsheetId())
.queryParam("includeGridData", false);
View on GitHub (pinned to 8cd9021c24)
Solutions
- Bind 'Spreadsheet Url' to the full Google Sheets URL.
- Use the spreadsheet picker to populate the field.
- Trim and validate before run: {{ !!url.trim() && url.includes('/spreadsheets/d/') }}.
- Make the run conditional on a non-empty, well-formed URL.
Example fix
// Before
{{ url }}
// After
{{ url?.trim() }}
// conditional run
{{ !!url && url.includes('/spreadsheets/d/') }} Defensive patterns
Strategy: validation
Validate before calling
const url = (formValues.url || '').trim();
if (!url || !/\/spreadsheets\/d\//.test(url)) {
showAlert('A valid Google Sheets URL is required', 'error');
} else {
DeleteSheet.run({ spreadsheetUrl: url });
} Type guard
function isGoogleSheetsUrl(v) {
return typeof v === 'string' && /\/spreadsheets\/d\/[A-Za-z0-9_-]+/.test(v.trim());
} Prevention
- Populate the URL via the picker.
- Trim whitespace and validate the /spreadsheets/d/ segment.
- Make delete actions conditional on a valid URL; they are destructive.
When it happens
Trigger: Delete Sheet action run with the 'Spreadsheet URL' field unbound or empty; the URL was malformed so the id parser returned blank.
Common situations: Datasource-level URL is set but the per-action URL field is empty; URL pasted without the /spreadsheets/d/<id>/ segment; trailing whitespace; binding returns '' on first render.
Related errors
AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12).
Data as JSON: /api/errors/9862c58e9e1cf673.
Report an issue: GitHub.