pentaho/pentaho-kettle · error · KettleException
LDAPInput.Error.DynamicFilterFieldMissing
LDAPInput.Error.DynamicFilterFieldMissing
Error message
LDAPInput.Error.DynamicFilterFieldMissing
What it means
LDAPInput.dynamicSearch() throws this when 'Use dynamic filter' is enabled but the 'dynamic filter field' name is empty. The per-row LDAP filter value must come from a named input field. This is a first-row configuration validation check, mirroring the dynamic search base check.
Solutions
- Select the field that holds the filter value in the 'Dynamic filter field' dropdown of the LDAP Input step.
- Verify the upstream step emits that field and that it is a String.
- Uncheck 'Use dynamic filter' if per-row filters are not needed.
Example fix
// before <use_dynamic_filter>Y</use_dynamic_filter> <dynamic_filter_fieldname/> // after <use_dynamic_filter>Y</use_dynamic_filter> <dynamic_filter_fieldname>myFilterField</dynamic_filter_fieldname>
Defensive patterns
Strategy: validation
Validate before calling
if (meta.isDynamicFilter() && (meta.getDynamicFilterFieldName() == null || meta.getDynamicFilterFieldName().isEmpty())) {
throw new IllegalStateException("Dynamic filter is enabled but no dynamic filter field is set");
} Try / catch
try { row = getOneRow(); } catch (KettleException e) { if (e.getMessage().contains("DynamicFilterFieldMissing")) { logError("Select a dynamic filter field in the LDAP Input dialog"); } throw e; } Prevention
- Select the filter field whenever 'Use dynamic filter' is checked
- Confirm the upstream step still emits the filter field after edits
- Validate step metadata programmatically before scheduling transformations
When it happens
Trigger: meta.isDynamicFilter() is true and Utils.isEmpty(meta.getDynamicFilterFieldName()); i.e. the checkbox is on in the step dialog but no filter field was selected.
Common situations: Enabling dynamic filtering in a cloned step after the source field was renamed; a partially configured step saved before choosing the field.
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
- LDAPInput.Error.DynamicSearchFieldMissing
- A connection of type PALO is expected
- A server socket allocation always has to accompanied by…
- DimensionLookupMeta.Error.NoTechnicalKeySpecified
- DimensionLookupMeta.Exception.UnableToFindReturnField
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/54c582e684eb117f.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/ldap/impl/src/main/java/org/pentaho/di/trans/steps/ldapinput/LDAPInput.java:146
// Get row from input rowset & set row busy!
if ( data.readRow == null ) {
if ( log.isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "LDAPInput.Log.FinishedProcessing" ) );
}
setOutputDone();
return false;
}
if ( first ) {
first = false;
if ( meta.isDynamicSearch() ) {
if ( Utils.isEmpty( meta.getDynamicSearchFieldName() ) ) {
throw new KettleException( BaseMessages.getString( PKG, "LDAPInput.Error.DynamicSearchFieldMissing" ) );
}
}
if ( meta.isDynamicFilter() ) {
if ( Utils.isEmpty( meta.getDynamicFilterFieldName() ) ) {
throw new KettleException( BaseMessages.getString( PKG, "LDAPInput.Error.DynamicFilterFieldMissing" ) );
}
}
// Create the output row meta-data
data.nrIncomingFields = getInputRowMeta().size();
data.outputRowMeta = getInputRowMeta().clone();
meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
metaStore );
// Create convert meta-data objects that will contain Date & Number formatters
//
data.convertRowMeta = data.outputRowMeta.cloneToType( ValueMetaInterface.TYPE_STRING );
if ( meta.isDynamicSearch() ) {
data.indexOfSearchBaseField = getInputRowMeta().indexOfValue( meta.getDynamicSearchFieldName() );
if ( data.indexOfSearchBaseField < 0 ) {
// The field is unreachable !
throw new KettleException( BaseMessages.getString( PKG, "LDAPInput.Exception.CouldnotFindField", metaView on GitHub (pinned to f3058517a1)