This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git


The following commit(s) were added to refs/heads/main by this push:
     new 678337b790 fixes Salesforce get fields and MDI issues #6054 #6121 
(#6124)
678337b790 is described below

commit 678337b790a50cf931146e88398fc2127b8ffd47
Author: Bart Maertens <[email protected]>
AuthorDate: Fri Dec 5 13:56:36 2025 +0100

    fixes Salesforce get fields and MDI issues #6054 #6121 (#6124)
    
    * get fields, edit mapping and other connection dialog fixes. #6121
    
    * MDI and i18n fixes. #6054
---
 .../salesforce/SalesforceTransformMeta.java        |  4 +-
 .../salesforcedelete/SalesforceDeleteDialog.java   | 35 +++++++---
 .../salesforceinput/SalesforceInputDialog.java     | 65 ++++++++++++++----
 .../salesforceinput/SalesforceInputField.java      | 19 ++++--
 .../salesforceinsert/SalesforceInsertDialog.java   | 40 ++++++++---
 .../salesforceupdate/SalesforceUpdateDialog.java   | 78 +++++++++++++++------
 .../salesforceupsert/SalesforceUpsertDialog.java   | 79 +++++++++++++++++-----
 .../messages/messages_en_US.properties             |  2 +
 8 files changed, 250 insertions(+), 72 deletions(-)

diff --git 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforce/SalesforceTransformMeta.java
 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforce/SalesforceTransformMeta.java
index 4b9cf6b9d4..94d101476d 100644
--- 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforce/SalesforceTransformMeta.java
+++ 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforce/SalesforceTransformMeta.java
@@ -58,7 +58,7 @@ public abstract class SalesforceTransformMeta<
   @HopMetadataProperty(
       key = "password",
       injectionKey = "SALESFORCE_PASSWOR",
-      injectionKeyDescription = 
"SalesforceInputMeta.Injection.SALESFORCE_PASSWOR",
+      injectionKeyDescription = 
"SalesforceInputMeta.Injection.SALESFORCE_PASSWORD",
       password = true)
   private String password;
 
@@ -87,7 +87,7 @@ public abstract class SalesforceTransformMeta<
   @HopMetadataProperty(
       key = "salesforce_connection",
       injectionKey = "SALESFORCE_CONNECTION",
-      injectionKeyDescription = "SalesforceInputMeta.SALESFORCE_CONNECTION")
+      injectionKeyDescription = 
"SalesforceInputMeta.Injection.SALESFORCE_CONNECTION")
   private String salesforceConnection;
 
   @Override
diff --git 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforcedelete/SalesforceDeleteDialog.java
 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforcedelete/SalesforceDeleteDialog.java
index 7ec6db4943..bfc0c865cd 100644
--- 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforcedelete/SalesforceDeleteDialog.java
+++ 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforcedelete/SalesforceDeleteDialog.java
@@ -581,19 +581,38 @@ public class SalesforceDeleteDialog extends 
SalesforceTransformDialog {
       try {
         SalesforceDeleteMeta meta = new SalesforceDeleteMeta();
         getInfo(meta);
-        String url = variables.resolve(meta.getTargetUrl());
 
         String selectedField = wModule.getText();
         wModule.removeAll();
 
-        // Define a new Salesforce connection
-        connection =
-            new SalesforceConnection(
-                log,
-                url,
-                variables.resolve(meta.getUsername()),
-                Utils.resolvePassword(variables, meta.getPassword()));
         int realTimeOut = Const.toInt(variables.resolve(meta.getTimeout()), 0);
+
+        // Check if a Salesforce Connection metadata is selected
+        String connectionName = 
variables.resolve(meta.getSalesforceConnection());
+        if (!Utils.isEmpty(connectionName)) {
+          // Use Salesforce Connection metadata
+          org.apache.hop.metadata.salesforce.SalesforceConnection 
connectionMeta =
+              metadataProvider
+                  
.getSerializer(org.apache.hop.metadata.salesforce.SalesforceConnection.class)
+                  .load(connectionName);
+
+          if (connectionMeta == null) {
+            throw new HopException(
+                "Salesforce Connection '" + connectionName + "' not found in 
metadata");
+          }
+
+          // Create connection using metadata
+          connection = connectionMeta.createConnection(variables, log);
+        } else {
+          // Use inline username/password configuration (backward 
compatibility)
+          String url = variables.resolve(meta.getTargetUrl());
+          connection =
+              new SalesforceConnection(
+                  log,
+                  url,
+                  variables.resolve(meta.getUsername()),
+                  Utils.resolvePassword(variables, meta.getPassword()));
+        }
         connection.setTimeOut(realTimeOut);
         // connect to Salesforce
         connection.connect();
diff --git 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinput/SalesforceInputDialog.java
 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinput/SalesforceInputDialog.java
index 66d71c0bcb..bbc175025f 100644
--- 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinput/SalesforceInputDialog.java
+++ 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinput/SalesforceInputDialog.java
@@ -1471,14 +1471,33 @@ public class SalesforceInputDialog extends 
SalesforceTransformDialog {
 
       // get real values
       String realModule = variables.resolve(meta.getModule());
-      String realURL = variables.resolve(meta.getTargetUrl());
       int realTimeOut = Const.toInt(variables.resolve(meta.getTimeout()), 0);
 
-      // Username/Password connection
-      String realUsername = variables.resolve(meta.getUsername());
-      String realPassword = Utils.resolvePassword(variables, 
meta.getPassword());
+      // Check if a Salesforce Connection metadata is selected
+      String connectionName = 
variables.resolve(meta.getSalesforceConnection());
+      if (!Utils.isEmpty(connectionName)) {
+        // Use Salesforce Connection metadata
+        org.apache.hop.metadata.salesforce.SalesforceConnection connectionMeta 
=
+            metadataProvider
+                
.getSerializer(org.apache.hop.metadata.salesforce.SalesforceConnection.class)
+                .load(connectionName);
+
+        if (connectionMeta == null) {
+          throw new HopException(
+              "Salesforce Connection '" + connectionName + "' not found in 
metadata");
+        }
+
+        // Create connection using metadata
+        connection = connectionMeta.createConnection(variables, log);
+      } else {
+        // Use inline username/password configuration (backward compatibility)
+        String realURL = variables.resolve(meta.getTargetUrl());
+        String realUsername = variables.resolve(meta.getUsername());
+        String realPassword = Utils.resolvePassword(variables, 
meta.getPassword());
+
+        connection = new SalesforceConnection(log, realURL, realUsername, 
realPassword);
+      }
 
-      connection = new SalesforceConnection(log, realURL, realUsername, 
realPassword);
       connection.setTimeOut(realTimeOut);
       String[] fieldsName = null;
       if (meta.isSpecifyQuery()) {
@@ -1996,15 +2015,33 @@ public class SalesforceInputDialog extends 
SalesforceTransformDialog {
       try {
         SalesforceInputMeta meta = new SalesforceInputMeta();
         getInfo(meta);
-        String url = variables.resolve(meta.getTargetUrl());
-
-        // Define a new Salesforce connection
-        connection =
-            new SalesforceConnection(
-                log,
-                url,
-                variables.resolve(meta.getUsername()),
-                Utils.resolvePassword(variables, meta.getPassword()));
+
+        // Check if a Salesforce Connection metadata is selected
+        String connectionName = 
variables.resolve(meta.getSalesforceConnection());
+        if (!Utils.isEmpty(connectionName)) {
+          // Use Salesforce Connection metadata
+          org.apache.hop.metadata.salesforce.SalesforceConnection 
connectionMeta =
+              metadataProvider
+                  
.getSerializer(org.apache.hop.metadata.salesforce.SalesforceConnection.class)
+                  .load(connectionName);
+
+          if (connectionMeta == null) {
+            throw new HopException(
+                "Salesforce Connection '" + connectionName + "' not found in 
metadata");
+          }
+
+          // Create connection using metadata
+          connection = connectionMeta.createConnection(variables, log);
+        } else {
+          // Use inline username/password configuration (backward 
compatibility)
+          String url = variables.resolve(meta.getTargetUrl());
+          connection =
+              new SalesforceConnection(
+                  log,
+                  url,
+                  variables.resolve(meta.getUsername()),
+                  Utils.resolvePassword(variables, meta.getPassword()));
+        }
         // connect to Salesforce
         connection.connect();
 
diff --git 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinput/SalesforceInputField.java
 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinput/SalesforceInputField.java
index 1680065ec7..7f360517b7 100644
--- 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinput/SalesforceInputField.java
+++ 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinput/SalesforceInputField.java
@@ -19,7 +19,6 @@ package org.apache.hop.pipeline.transforms.salesforceinput;
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.hop.core.injection.Injection;
 import org.apache.hop.core.row.IValueMeta;
 import org.apache.hop.core.row.value.ValueMetaFactory;
 import org.apache.hop.i18n.BaseMessages;
@@ -62,7 +61,7 @@ public class SalesforceInputField implements Cloneable {
   @HopMetadataProperty(
       key = "type",
       injectionKey = "TYPE",
-      injectionKeyDescription = "SalesforceInputMeta.Injection.FIELD")
+      injectionKeyDescription = "SalesforceInputMeta.Injection.TYPE")
   private String type;
 
   private int typeCode;
@@ -118,7 +117,7 @@ public class SalesforceInputField implements Cloneable {
   @HopMetadataProperty(
       key = "idlookup",
       injectionKey = "ISIDLOOKUP",
-      injectionKeyDescription = "SalesforceInputMeta.Injection.ISLOOKUP")
+      injectionKeyDescription = "SalesforceInputMeta.Injection.ISIDLOOKUP")
   private boolean idLookup;
 
   @HopMetadataProperty(key = "samples")
@@ -200,11 +199,21 @@ public class SalesforceInputField implements Cloneable {
     this.typeCode = typeCode;
   }
 
-  @Injection(name = "TYPE", group = "FIELDS")
+  //  @Injection(name = "TYPE", group = "FIELDS")
   public void setTypeCode(String typeDesc) {
     this.typeCode = ValueMetaFactory.getIdForValueMeta(typeDesc);
   }
 
+  // Override Lombok-generated setType to also update typeCode when type is 
set via metadata
+  // injection
+  public void setType(String type) {
+    this.type = type;
+    // Also update typeCode when type is set via metadata injection
+    if (type != null && !type.isEmpty()) {
+      this.typeCode = ValueMetaFactory.getIdForValueMeta(type);
+    }
+  }
+
   public void setSamples(String[] samples) {
     this.samples = samples;
   }
@@ -221,7 +230,7 @@ public class SalesforceInputField implements Cloneable {
     return getTrimTypeDesc(trimType);
   }
 
-  @Injection(name = "TRIM_TYPE", group = "FIELDS")
+  //  @Injection(name = "TRIM_TYPE", group = "FIELDS")
   public void setTrimTypeDesc(String trimTypeDesc) {
     this.trimType = SalesforceInputField.getTrimTypeByDesc(trimTypeDesc);
   }
diff --git 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinsert/SalesforceInsertDialog.java
 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinsert/SalesforceInsertDialog.java
index fae5f71be4..5c267e1346 100644
--- 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinsert/SalesforceInsertDialog.java
+++ 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceinsert/SalesforceInsertDialog.java
@@ -803,6 +803,10 @@ public class SalesforceInsertDialog extends 
SalesforceTransformDialog {
 
   // check if module, username is given
   private boolean checkUser() {
+    // If a metadata connection is selected, username is not required
+    if (!Utils.isEmpty(wSalesforceConnection.getText())) {
+      return true;
+    }
 
     if (Utils.isEmpty(wUserName.getText())) {
       MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
@@ -817,15 +821,35 @@ public class SalesforceInsertDialog extends 
SalesforceTransformDialog {
   }
 
   private SalesforceConnection getConnection() throws HopException {
-    String url = variables.resolve(wURL.getText());
-    // Define a new Salesforce connection
-    SalesforceConnection connection =
-        new SalesforceConnection(
-            log,
-            url,
-            variables.resolve(wUserName.getText()),
-            Utils.resolvePassword(variables, wPassword.getText()));
     int realTimeOut = Const.toInt(variables.resolve(wTimeOut.getText()), 0);
+
+    // Check if a Salesforce Connection metadata is selected
+    String connectionName = variables.resolve(wSalesforceConnection.getText());
+    SalesforceConnection connection;
+    if (!Utils.isEmpty(connectionName)) {
+      // Use Salesforce Connection metadata
+      org.apache.hop.metadata.salesforce.SalesforceConnection connectionMeta =
+          metadataProvider
+              
.getSerializer(org.apache.hop.metadata.salesforce.SalesforceConnection.class)
+              .load(connectionName);
+
+      if (connectionMeta == null) {
+        throw new HopException(
+            "Salesforce Connection '" + connectionName + "' not found in 
metadata");
+      }
+
+      // Create connection using metadata
+      connection = connectionMeta.createConnection(variables, log);
+    } else {
+      // Use inline username/password configuration (backward compatibility)
+      String url = variables.resolve(wURL.getText());
+      connection =
+          new SalesforceConnection(
+              log,
+              url,
+              variables.resolve(wUserName.getText()),
+              Utils.resolvePassword(variables, wPassword.getText()));
+    }
     connection.setTimeOut(realTimeOut);
     // connect to Salesforce
     connection.connect();
diff --git 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceupdate/SalesforceUpdateDialog.java
 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceupdate/SalesforceUpdateDialog.java
index 4ce4dcd522..f73ca7a21a 100644
--- 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceupdate/SalesforceUpdateDialog.java
+++ 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceupdate/SalesforceUpdateDialog.java
@@ -722,6 +722,10 @@ public class SalesforceUpdateDialog extends 
SalesforceTransformDialog {
 
   // check if module, username is given
   private boolean checkUser() {
+    // If a metadata connection is selected, username is not required
+    if (!Utils.isEmpty(wSalesforceConnection.getText())) {
+      return true;
+    }
 
     if (Utils.isEmpty(wUserName.getText())) {
       MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
@@ -740,25 +744,43 @@ public class SalesforceUpdateDialog extends 
SalesforceTransformDialog {
     getInfo(meta);
 
     SalesforceConnection connection = null;
-    String url = variables.resolve(meta.getTargetUrl());
+    String selectedModule = variables.resolve(meta.getModule());
     try {
-      String selectedModule = variables.resolve(meta.getModule());
-
-      // Define a new Salesforce connection
-      connection =
-          new SalesforceConnection(
-              log,
-              url,
-              variables.resolve(meta.getUsername()),
-              Utils.resolvePassword(variables, meta.getPassword()));
       int realTimeOut = Const.toInt(variables.resolve(meta.getTimeout()), 0);
+
+      // Check if a Salesforce Connection metadata is selected
+      String connectionName = 
variables.resolve(meta.getSalesforceConnection());
+      if (!Utils.isEmpty(connectionName)) {
+        // Use Salesforce Connection metadata
+        org.apache.hop.metadata.salesforce.SalesforceConnection connectionMeta 
=
+            metadataProvider
+                
.getSerializer(org.apache.hop.metadata.salesforce.SalesforceConnection.class)
+                .load(connectionName);
+
+        if (connectionMeta == null) {
+          throw new HopException(
+              "Salesforce Connection '" + connectionName + "' not found in 
metadata");
+        }
+
+        // Create connection using metadata
+        connection = connectionMeta.createConnection(variables, log);
+      } else {
+        // Use inline username/password configuration (backward compatibility)
+        String url = variables.resolve(meta.getTargetUrl());
+        connection =
+            new SalesforceConnection(
+                log,
+                url,
+                variables.resolve(meta.getUsername()),
+                Utils.resolvePassword(variables, meta.getPassword()));
+      }
       connection.setTimeOut(realTimeOut);
       // connect to Salesforce
       connection.connect();
       // return fieldsname for the module
       return connection.getFields(selectedModule);
     } catch (Exception e) {
-      throw new HopException("Error getting fields from module [" + url + 
"]!", e);
+      throw new HopException("Error getting fields from module [" + 
selectedModule + "]!", e);
     } finally {
       if (connection != null) {
         try {
@@ -939,18 +961,36 @@ public class SalesforceUpdateDialog extends 
SalesforceTransformDialog {
       try {
         SalesforceUpdateMeta meta = new SalesforceUpdateMeta();
         getInfo(meta);
-        String url = variables.resolve(meta.getTargetUrl());
 
         String selectedField = meta.getModule();
         wModule.removeAll();
 
-        // Define a new Salesforce connection
-        connection =
-            new SalesforceConnection(
-                log,
-                url,
-                variables.resolve(meta.getUsername()),
-                Utils.resolvePassword(variables, meta.getPassword()));
+        // Check if a Salesforce Connection metadata is selected
+        String connectionName = 
variables.resolve(meta.getSalesforceConnection());
+        if (!Utils.isEmpty(connectionName)) {
+          // Use Salesforce Connection metadata
+          org.apache.hop.metadata.salesforce.SalesforceConnection 
connectionMeta =
+              metadataProvider
+                  
.getSerializer(org.apache.hop.metadata.salesforce.SalesforceConnection.class)
+                  .load(connectionName);
+
+          if (connectionMeta == null) {
+            throw new HopException(
+                "Salesforce Connection '" + connectionName + "' not found in 
metadata");
+          }
+
+          // Create connection using metadata
+          connection = connectionMeta.createConnection(variables, log);
+        } else {
+          // Use inline username/password configuration (backward 
compatibility)
+          String url = variables.resolve(meta.getTargetUrl());
+          connection =
+              new SalesforceConnection(
+                  log,
+                  url,
+                  variables.resolve(meta.getUsername()),
+                  Utils.resolvePassword(variables, meta.getPassword()));
+        }
         // connect to Salesforce
         connection.connect();
         // return
diff --git 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceupsert/SalesforceUpsertDialog.java
 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceupsert/SalesforceUpsertDialog.java
index e3c7aeb54b..1423be523e 100644
--- 
a/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceupsert/SalesforceUpsertDialog.java
+++ 
b/plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforceupsert/SalesforceUpsertDialog.java
@@ -877,6 +877,10 @@ public class SalesforceUpsertDialog extends 
SalesforceTransformDialog {
 
   // check if module, username is given
   private boolean checkUser() {
+    // If a metadata connection is selected, username is not required
+    if (!Utils.isEmpty(wSalesforceConnection.getText())) {
+      return true;
+    }
 
     if (Utils.isEmpty(wUserName.getText())) {
       MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
@@ -901,16 +905,36 @@ public class SalesforceUpsertDialog extends 
SalesforceTransformDialog {
     getModulesListError = true;
     SalesforceUpsertMeta meta = new SalesforceUpsertMeta();
     getInfo(meta);
-    String url = variables.resolve(meta.getTargetUrl());
     String selectedModule = variables.resolve(meta.getModule());
-    // Define a new Salesforce connection
-    SalesforceConnection connection =
-        new SalesforceConnection(
-            log,
-            url,
-            variables.resolve(meta.getUsername()),
-            Utils.resolvePassword(variables, meta.getPassword()));
     int realTimeOut = Const.toInt(variables.resolve(meta.getTimeout()), 0);
+
+    // Check if a Salesforce Connection metadata is selected
+    String connectionName = variables.resolve(meta.getSalesforceConnection());
+    SalesforceConnection connection;
+    if (!Utils.isEmpty(connectionName)) {
+      // Use Salesforce Connection metadata
+      org.apache.hop.metadata.salesforce.SalesforceConnection connectionMeta =
+          metadataProvider
+              
.getSerializer(org.apache.hop.metadata.salesforce.SalesforceConnection.class)
+              .load(connectionName);
+
+      if (connectionMeta == null) {
+        throw new HopException(
+            "Salesforce Connection '" + connectionName + "' not found in 
metadata");
+      }
+
+      // Create connection using metadata
+      connection = connectionMeta.createConnection(variables, log);
+    } else {
+      // Use inline username/password configuration (backward compatibility)
+      String url = variables.resolve(meta.getTargetUrl());
+      connection =
+          new SalesforceConnection(
+              log,
+              url,
+              variables.resolve(meta.getUsername()),
+              Utils.resolvePassword(variables, meta.getPassword()));
+    }
     connection.setTimeOut(realTimeOut);
     Cursor busy = new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT);
     try {
@@ -936,6 +960,11 @@ public class SalesforceUpsertDialog extends 
SalesforceTransformDialog {
   }
 
   private boolean skipFetchModules() {
+    // If a metadata connection is selected, don't skip based on 
username/password fields
+    if (!Utils.isEmpty(wSalesforceConnection.getText())) {
+      return getModulesListError;
+    }
+    // Otherwise, check for username/password fields
     return Utils.isEmpty(wURL.getText())
         || Utils.isEmpty(wUserName.getText())
         || Utils.isEmpty(wPassword.getText())
@@ -1109,18 +1138,36 @@ public class SalesforceUpsertDialog extends 
SalesforceTransformDialog {
       try {
         SalesforceUpsertMeta meta = new SalesforceUpsertMeta();
         getInfo(meta);
-        String url = variables.resolve(meta.getTargetUrl());
 
         String selectedField = wModule.getText();
         wModule.removeAll();
 
-        // Define a new Salesforce connection
-        connection =
-            new SalesforceConnection(
-                log,
-                url,
-                variables.resolve(meta.getUsername()),
-                Utils.resolvePassword(variables, meta.getPassword()));
+        // Check if a Salesforce Connection metadata is selected
+        String connectionName = 
variables.resolve(meta.getSalesforceConnection());
+        if (!Utils.isEmpty(connectionName)) {
+          // Use Salesforce Connection metadata
+          org.apache.hop.metadata.salesforce.SalesforceConnection 
connectionMeta =
+              metadataProvider
+                  
.getSerializer(org.apache.hop.metadata.salesforce.SalesforceConnection.class)
+                  .load(connectionName);
+
+          if (connectionMeta == null) {
+            throw new HopException(
+                "Salesforce Connection '" + connectionName + "' not found in 
metadata");
+          }
+
+          // Create connection using metadata
+          connection = connectionMeta.createConnection(variables, log);
+        } else {
+          // Use inline username/password configuration (backward 
compatibility)
+          String url = variables.resolve(meta.getTargetUrl());
+          connection =
+              new SalesforceConnection(
+                  log,
+                  url,
+                  variables.resolve(meta.getUsername()),
+                  Utils.resolvePassword(variables, meta.getPassword()));
+        }
         // connect to Salesforce
         connection.connect();
         // return
diff --git 
a/plugins/tech/salesforce/src/main/resources/org/apache/hop/pipeline/transforms/salesforceinput/messages/messages_en_US.properties
 
b/plugins/tech/salesforce/src/main/resources/org/apache/hop/pipeline/transforms/salesforceinput/messages/messages_en_US.properties
index 4589676351..96b0305122 100644
--- 
a/plugins/tech/salesforce/src/main/resources/org/apache/hop/pipeline/transforms/salesforceinput/messages/messages_en_US.properties
+++ 
b/plugins/tech/salesforce/src/main/resources/org/apache/hop/pipeline/transforms/salesforceinput/messages/messages_en_US.properties
@@ -198,6 +198,8 @@ SalesforceInputMeta.Injection.TYPE=The data type of the 
field
 SalesforceInputMeta.Injection.URL_FIELDNAME=Specify the field to use when 
including the URL in your output.
 SalesforceInputMeta.Injection.USE_COMPRESSION=Select this option to compress 
data in .gzip format when connecting between Apache Hop and Salesforce.
 SalesforceInputMeta.Injection.USE_SPECIFIED_QUERY=Select this option to 
manually execute a query based on your own Salesforce Object Query Language 
(SOQL) statements.
+SalesforceInputMeta.Injection.USE_FIELD_API_NAMES=Use field API names
+SalesforceInputMeta.Injection.SALESFORCE_CONNECTION=The Salesforce connection 
name to use
 SalesforceInputMeta.keyword=SalesForce,input
 SalesforceInputMeta.recordsFilter.All=All
 SalesforceInputMeta.recordsFilter.Deleted=Deleted

Reply via email to