{"record":{"id":"0e2c4f7ac8b6de30","repo":"pentaho/pentaho-kettle","slug":"getsubfolders-log-nofield","errorCode":null,"errorMessage":"GetSubFolders.Log.NoField","messagePattern":"GetSubFolders\\.Log\\.NoField","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/getsubfolders/GetSubFolders.java","lineNumber":91,"sourceCode":"      data.readrow = getRow();\n    }\n\n    if ( first ) {\n      first = false;\n\n      if ( meta.isFoldernameDynamic() ) {\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        // Check is filename field is provided\n        if ( Utils.isEmpty( meta.getDynamicFoldernameField() ) ) {\n          logError( BaseMessages.getString( PKG, \"GetSubFolders.Log.NoField\" ) );\n          throw new KettleException( BaseMessages.getString( PKG, \"GetSubFolders.Log.NoField\" ) );\n        }\n\n        // cache the position of the field\n        if ( data.indexOfFoldernameField < 0 ) {\n          String realDynamicFoldername = environmentSubstitute( meta.getDynamicFoldernameField() );\n          data.indexOfFoldernameField = data.inputRowMeta.indexOfValue( realDynamicFoldername );\n          if ( data.indexOfFoldernameField < 0 ) {\n            // The field is unreachable !\n            logError( BaseMessages.getString( PKG, \"GetSubFolders.Log.ErrorFindingField\" )\n              + \"[\" + realDynamicFoldername + \"]\" );\n            throw new KettleException( BaseMessages.getString(\n              PKG, \"GetSubFolders.Exception.CouldnotFindField\", realDynamicFoldername ) );\n          }\n        }\n      } else {\n        // Create the output row meta-data\n        data.outputRowMeta = new RowMeta();\n        meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/getsubfolders/GetSubFolders.java#L73-L109","documentation":"GetSubFolders.processRow logs and throws KettleException 'GetSubFolders.Log.NoField' when the step is configured without a dynamic folder-name field. The step reads folder paths from an incoming field, so an empty dynamicFoldernameField makes execution impossible. It fails fast before processing any rows.","triggerScenarios":"processRow runs with meta.getDynamicFoldernameField() empty/null, i.e. 'Get foldername field' was left blank in the step dialog.","commonSituations":"Step added to transformation but not configured; field setting lost after editing/exporting the transformation; copy of a template step whose field no longer matches the upstream stream.","solutions":["Open the Get SubFolders step dialog and set 'Get foldername field' to an existing input field.","Ensure the upstream step actually outputs that field name.","Re-save the transformation after fixing the field setting.","Run the step's Validate/check to catch the missing field before execution."],"exampleFix":"// before\nstepMeta.setDynamicFoldernameField( \"\" );\n// after\nstepMeta.setDynamicFoldernameField( \"folder_path\" ); // existing input field","handlingStrategy":"validation","validationCode":"// Validate the step config before execution\nGetSubFoldersMeta m = (GetSubFoldersMeta) stepMeta.getStepMetaInterface();\nif ( m.getDynamicFoldernameField() == null || m.getDynamicFoldernameField().trim().isEmpty() )\n  throw new IllegalStateException( \"Get SubFolders: dynamic foldername field is not set\" );","typeGuard":null,"tryCatchPattern":"try {\n  trans.execute( null );\n} catch ( KettleException e ) {\n  if ( e.getMessage() != null && e.getMessage().contains( \"NoField\" ) ) {\n    // abort and prompt user to configure the folder field\n  } else throw e;\n}","preventionTips":["Always fill 'Get foldername field' when adding the step","Preview upstream rows to confirm the field exists","Include step configuration checks in CI jobs that run transformations","Avoid renaming upstream fields without auditing dependent steps"],"tags":["kettle","pdi","configuration","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"}