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

  1. Bind 'Spreadsheet Url' to the full Google Sheets URL.
  2. Use the spreadsheet picker to populate the field.
  3. Trim and validate before run: {{ !!url.trim() && url.includes('/spreadsheets/d/') }}.
  4. 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

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.