{"record":{"id":"40a8020f3dd22387","repo":"pentaho/pentaho-kettle","slug":"sftpput-error-remotefoldernamefieldmissing","errorCode":null,"errorMessage":"SFTPPut.Error.RemoteFolderNameFieldMissing","messagePattern":"SFTPPut\\.Error\\.RemoteFolderNameFieldMissing","errorType":"exception","errorClass":"KettleStepException","httpStatus":null,"severity":"error","filePath":"plugins/sftpput/impl/src/main/java/org/pentaho/di/trans/steps/sftpput/SFTPPut.java","lineNumber":286,"sourceCode":"      // source filename field is missing\n      throw new KettleStepException( BaseMessages.getString( PKG, \"SFTPPut.Error.SourceFileNameFieldMissing\" ) );\n    }\n\n    data.indexOfSourceFileFieldName = getInputRowMeta().indexOfValue( sourceFilenameFieldName );\n    if ( data.indexOfSourceFileFieldName == -1 ) {\n      // source filename field is missing\n      throw new KettleStepException( BaseMessages.getString(\n        PKG, \"SFTPPut.Error.CanNotFindField\", sourceFilenameFieldName ) );\n    }\n  }\n\n  @VisibleForTesting\n  void checkRemoteFoldernameField( String remoteFoldernameFieldName, SFTPPutData data ) throws KettleStepException {\n    // Remote folder fieldname\n    remoteFoldernameFieldName = environmentSubstitute( remoteFoldernameFieldName );\n    if ( Utils.isEmpty( remoteFoldernameFieldName ) ) {\n      // remote folder field is missing\n      throw new KettleStepException( BaseMessages.getString( PKG, \"SFTPPut.Error.RemoteFolderNameFieldMissing\" ) );\n    }\n\n    data.indexOfRemoteDirectory = getInputRowMeta().indexOfValue( remoteFoldernameFieldName );\n    if ( data.indexOfRemoteDirectory == -1 ) {\n      // remote foldername field is missing\n      throw new KettleStepException( BaseMessages.getString(\n        PKG, \"SFTPPut.Error.CanNotFindField\", remoteFoldernameFieldName ) );\n    }\n  }\n\n  @VisibleForTesting\n  void checkRemoteFilenameField( String remoteFilenameFieldName, SFTPPutData data )\n    throws KettleStepException {\n    remoteFilenameFieldName = environmentSubstitute( remoteFilenameFieldName );\n    if ( !Utils.isEmpty( remoteFilenameFieldName ) ) {\n      data.indexOfRemoteFilename = getInputRowMeta().indexOfValue( remoteFilenameFieldName );\n      if ( data.indexOfRemoteFilename == -1 ) {\n        // remote file name field is set, but was not found","sourceCodeStart":268,"sourceCodeEnd":304,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/sftpput/impl/src/main/java/org/pentaho/di/trans/steps/sftpput/SFTPPut.java#L268-L304","documentation":"Thrown by checkRemoteFoldernameField when the configured remote folder field name is empty after environment substitution. When the remote directory is supplied per-row via a field, that field name must be specified. Raised during pre-flight validation from processRow.","triggerScenarios":"The remote folder fieldname setting is blank (or its variable substitutes to empty) while the step expects a remote directory field, so checkRemoteFoldernameField throws.","commonSituations":"User left 'Remote folder field' unset in the dialog; variable for the field name undefined; configuration reset after migrating the transformation; stream mode switching cleared settings.","solutions":["Set the remote folder field in the SFTPPut dialog (or supply a static remote folder if per-row folders are not needed).","Define the variable used for the field name so it substitutes to a real column name.","Use 'Get Fields' to pick the correct column.","Review the step's XML/ktr to confirm the setting survived save/load."],"exampleFix":"// before\nremoteFolderField = \"\"; // unset\n// after\nremoteFolderField = \"remote_dir\";","handlingStrategy":"validation","validationCode":"String fieldName = environmentSubstitute(remoteFolderFieldSetting);\nif (fieldName == null || fieldName.isEmpty()) {\n  throw new IllegalStateException(\"SFTPPut: remote folder field must be configured\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  transform.execute();\n} catch (KettleStepException e) {\n  if (e.getMessage().contains(\"RemoteFolderNameFieldMissing\")) {\n    log.error(\"Set the remote folder field in the SFTPPut dialog\");\n  } else { throw e; }\n}","preventionTips":["Configure all required fields during initial step setup.","Define variables used in field-name settings before running.","Validate the saved ktr content after migration between environments."],"tags":["kettle","pentaho","sftp","missing-field","configuration"],"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"}