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
- Open the step dialog and select the field containing the filename in 'Filename field'
- In code, call meta.setDynamicFilenameField("yourFieldName") when meta.setFileField(true)
- 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
- Whenever calling setFileField(true) in code, immediately call setDynamicFilenameField(...)
- Verify saved .ktr XML contains the field-name attribute
- Preview the step dialog before saving to catch empty field selection
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
- ChangeFileEncoding.Error.FilenameFieldMissing
- ChangeFileEncoding.Error.TargetFilenameFieldMissing
- ColumnExists.Error.TablenameFieldMissing
- GetFilesRowsCount.Log.NoField
- GetTableNames.Log.NoSchemaField
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", metaView on GitHub (pinned to f3058517a1)