pentaho/pentaho-kettle · error · KettleException

ExecProcess.Error.ProcessFieldMissing

Error message

ExecProcess.Error.ProcessFieldMissing

What it means

The ExecProcess step throws this when the 'process field' setting is empty, meaning no incoming field was designated to supply the command to execute. The step cannot know what process to run, so it aborts the step.

Solutions

  1. Open the ExecProcess step dialog and select a valid 'Process field' from the incoming stream.
  2. Ensure the upstream step actually outputs the configured field.
  3. If constructing ExecProcessMeta in code, call setProcessField("fieldName") before execution.
  4. Run the transformation to a preview/log to confirm the field name spelling matches exactly.

Example fix

// before: meta without a process field
ExecProcessMeta meta = new ExecProcessMeta();
// after
ExecProcessMeta meta = new ExecProcessMeta();
meta.setProcessField("command");
Defensive patterns

Strategy: validation

Validate before calling

// before executing the transformation
ExecProcessMeta meta = (ExecProcessMeta) stepMeta.getStepMetaInterface();
if (meta.getProcessField() == null || meta.getProcessField().isEmpty()) {
  throw new IllegalStateException("ExecProcess: process field must be set");
}

Try / catch

try { trans.execute(); } catch (KettleException e) { if (e.getMessage().contains("ProcessFieldMissing")) { /* fix step config */ } }

Prevention

When it happens

Trigger: processRow on first row: meta.getProcessField() is null/empty because the 'Process field' dropdown in the ExecProcess step dialog was never set (or the field was removed from the stream upstream).

Common situations: Copying a step between transformations where the target stream lacks the field; renaming the upstream field without updating the step; building the step meta programmatically without calling setProcessField.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/e0fb3d50d9a5a730. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/execprocess/ExecProcess.java:80

    if ( r == null ) { // no more input to be expected...

      setOutputDone();
      return false;
    }

    if ( first ) {
      first = false;
      // get the RowMeta
      data.previousRowMeta = getInputRowMeta().clone();
      data.NrPrevFields = data.previousRowMeta.size();
      data.outputRowMeta = data.previousRowMeta;
      meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
        metaStore );

      // Check is process field is provided
      if ( Utils.isEmpty( meta.getProcessField() ) ) {
        logError( BaseMessages.getString( PKG, "ExecProcess.Error.ProcessFieldMissing" ) );
        throw new KettleException( BaseMessages.getString( PKG, "ExecProcess.Error.ProcessFieldMissing" ) );
      }

      // cache the position of the field
      if ( data.indexOfProcess < 0 ) {
        data.indexOfProcess = data.previousRowMeta.indexOfValue( meta.getProcessField() );
        if ( data.indexOfProcess < 0 ) {
          // The field is unreachable !
          logError( BaseMessages.getString( PKG, "ExecProcess.Exception.CouldnotFindField" )
            + "[" + meta.getProcessField() + "]" );
          throw new KettleException( BaseMessages.getString( PKG, "ExecProcess.Exception.CouldnotFindField", meta
            .getProcessField() ) );
        }
      }
      if ( meta.isArgumentsInFields() ) {
        if ( data.indexOfArguments == null ) {
          data.indexOfArguments = new int[meta.getArgumentFieldNames().length];
          for ( int i = 0; i < data.indexOfArguments.length; i++ ) {
            String fieldName = meta.getArgumentFieldNames()[i];

View on GitHub (pinned to f3058517a1)