pentaho/pentaho-kettle · error · KettleException

PropertyInput.Log.NoField

Error message

PropertyInput.Log.NoField

What it means

In openNextFile(), when the step reads filenames from an incoming field ('File defined in a field?'), it throws this if the dynamic filename field name configured on the step is empty. The step cannot determine which incoming column holds the file path.

Solutions

  1. Open the step dialog and select the field containing the filename in 'Filename field'
  2. In code, call meta.setDynamicFilenameField("yourFieldName") when meta.setFileField(true)
  3. Ensure the transformation XML/repository record actually persisted the field-name attribute

Example fix

// before
PropertyInputMeta meta = new PropertyInputMeta();
meta.setFileField(true);
// after
meta.setFileField(true);
meta.setDynamicFilenameField("filename"); // column from the previous step
Defensive patterns

Strategy: validation

Validate before calling

if (meta.isFileField() && Utils.isEmpty(meta.getDynamicFilenameField())) {
  throw new IllegalStateException("Property Input: field-based files enabled but no filename field set");
}

Try / catch

try {
  transformation.execute(params);
} catch (KettleException e) {
  if (e.getMessage() != null && e.getMessage().contains("NoField")) {
    logError("Set the 'Filename field' on the Property Input step");
  } else { throw e; }
}

Prevention

When it happens

Trigger: meta.getDynamicFilenameField() is null or empty while meta.isFileField() is true — i.e. the user enabled field-based filenames but did not select the field in the 'Filename field' dropdown.

Common situations: Step copied/cloned programmatically without setting the field name; dialog saved with empty field selection; meta built in code via setFileField(true) but setDynamicFilenameField never called.

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/adc5de7a568e3f38. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInput.java:352

        if ( first ) {
          first = false;

          data.inputRowMeta = getInputRowMeta();
          data.outputRowMeta = data.inputRowMeta.clone();
          meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
            metaStore );

          // Get total previous fields
          data.totalpreviousfields = data.inputRowMeta.size();

          // Create convert meta-data objects that will contain Date & Number formatters
          data.convertRowMeta = data.outputRowMeta.cloneToType( ValueMetaInterface.TYPE_STRING );

          // Check is filename field is provided
          if ( Utils.isEmpty( meta.getDynamicFilenameField() ) ) {
            logError( BaseMessages.getString( PKG, "PropertyInput.Log.NoField" ) );
            throw new KettleException( BaseMessages.getString( PKG, "PropertyInput.Log.NoField" ) );
          }

          // cache the position of the field
          if ( data.indexOfFilenameField < 0 ) {
            data.indexOfFilenameField = getInputRowMeta().indexOfValue( meta.getDynamicFilenameField() );
            if ( data.indexOfFilenameField < 0 ) {
              // The field is unreachable !
              logError( BaseMessages.getString( PKG, "PropertyInput.Log.ErrorFindingField" )
                + '[' + meta.getDynamicFilenameField() + ']' );
              throw new KettleException( BaseMessages.getString(
                PKG, "PropertyInput.Exception.CouldnotFindField", meta.getDynamicFilenameField() ) );
            }
          }
        } // End if first

        String filename = getInputRowMeta().getString( data.readrow, data.indexOfFilenameField );
        if ( log.isDetailed() ) {
          logDetailed( BaseMessages.getString( PKG, "PropertyInput.Log.FilenameInStream", meta

View on GitHub (pinned to f3058517a1)