{"record":{"id":"adc5de7a568e3f38","repo":"pentaho/pentaho-kettle","slug":"propertyinput-log-nofield","errorCode":null,"errorMessage":"PropertyInput.Log.NoField","messagePattern":"PropertyInput\\.Log\\.NoField","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInput.java","lineNumber":352,"sourceCode":"\n        if ( first ) {\n          first = false;\n\n          data.inputRowMeta = getInputRowMeta();\n          data.outputRowMeta = data.inputRowMeta.clone();\n          meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,\n            metaStore );\n\n          // Get total previous fields\n          data.totalpreviousfields = data.inputRowMeta.size();\n\n          // Create convert meta-data objects that will contain Date & Number formatters\n          data.convertRowMeta = data.outputRowMeta.cloneToType( ValueMetaInterface.TYPE_STRING );\n\n          // Check is filename field is provided\n          if ( Utils.isEmpty( meta.getDynamicFilenameField() ) ) {\n            logError( BaseMessages.getString( PKG, \"PropertyInput.Log.NoField\" ) );\n            throw new KettleException( BaseMessages.getString( PKG, \"PropertyInput.Log.NoField\" ) );\n          }\n\n          // cache the position of the field\n          if ( data.indexOfFilenameField < 0 ) {\n            data.indexOfFilenameField = getInputRowMeta().indexOfValue( meta.getDynamicFilenameField() );\n            if ( data.indexOfFilenameField < 0 ) {\n              // The field is unreachable !\n              logError( BaseMessages.getString( PKG, \"PropertyInput.Log.ErrorFindingField\" )\n                + '[' + meta.getDynamicFilenameField() + ']' );\n              throw new KettleException( BaseMessages.getString(\n                PKG, \"PropertyInput.Exception.CouldnotFindField\", meta.getDynamicFilenameField() ) );\n            }\n          }\n        } // End if first\n\n        String filename = getInputRowMeta().getString( data.readrow, data.indexOfFilenameField );\n        if ( log.isDetailed() ) {\n          logDetailed( BaseMessages.getString( PKG, \"PropertyInput.Log.FilenameInStream\", meta","sourceCodeStart":334,"sourceCodeEnd":370,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInput.java#L334-L370","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nPropertyInputMeta meta = new PropertyInputMeta();\nmeta.setFileField(true);\n// after\nmeta.setFileField(true);\nmeta.setDynamicFilenameField(\"filename\"); // column from the previous step","handlingStrategy":"validation","validationCode":"if (meta.isFileField() && Utils.isEmpty(meta.getDynamicFilenameField())) {\n  throw new IllegalStateException(\"Property Input: field-based files enabled but no filename field set\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  transformation.execute(params);\n} catch (KettleException e) {\n  if (e.getMessage() != null && e.getMessage().contains(\"NoField\")) {\n    logError(\"Set the 'Filename field' on the Property Input step\");\n  } else { throw e; }\n}","preventionTips":["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"],"tags":["kettle","configuration","missing-field"],"backgroundTag":"missing-required-config-field","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}