{"record":{"id":"64e95e90700e47c6","repo":"pentaho/pentaho-kettle","slug":"salesforceinput-error-gettingmodulefields","errorCode":null,"errorMessage":"SalesforceInput.Error.GettingModuleFields","messagePattern":"SalesforceInput\\.Error\\.GettingModuleFields","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/salesforce/core/src/main/java/org/pentaho/di/trans/steps/salesforce/SalesforceConnection.java","lineNumber":737,"sourceCode":"\n  public Field[] getObjectFields( String objectName ) throws KettleException {\n    DescribeSObjectResult describeSObjectResult = null;\n    try {\n      // Get object\n      describeSObjectResult = getBinding().describeSObject( objectName );\n      if ( describeSObjectResult == null ) {\n        return null;\n      }\n\n      if ( !describeSObjectResult.isQueryable() ) {\n        throw new KettleException( BaseMessages.getString(\n          PKG, \"SalesforceInputDialog.ObjectNotQueryable\", this.module ) );\n      } else {\n        // we can query this object\n        return describeSObjectResult.getFields();\n      }\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"SalesforceInput.Error.GettingModuleFields\", this.module ), e );\n    } finally {\n      if ( describeSObjectResult != null ) {\n        describeSObjectResult = null;\n      }\n    }\n  }\n\n  /**Returns only updatable object fields and ID field if <b>excludeNonUpdatableFields</b> is true,\n   * otherwise all object field\n   * @param objectName the name of Saleforce object\n   * @param excludeNonUpdatableFields the flag that indicates if non-updatable fields should be excluded or not\n   * @return the list of object fields depending on filter or not non-updatable fields.\n   * @throws KettleException if any exception occurs\n   */\n  public Field[] getObjectFields( String objectName, boolean excludeNonUpdatableFields ) throws KettleException {\n    Field[] fieldList = getObjectFields( objectName );\n    if ( excludeNonUpdatableFields ) {","sourceCodeStart":719,"sourceCodeEnd":755,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/salesforce/core/src/main/java/org/pentaho/di/trans/steps/salesforce/SalesforceConnection.java#L719-L755","documentation":"KettleException thrown when describeSObject() (field metadata retrieval for the current module) fails. The message key 'SalesforceInput.Error.GettingModuleFields' includes the module name and the underlying cause. It wraps both the SOAP call failure and any other exception raised while resolving the object's fields.","triggerScenarios":"describeSObject call failing for the configured module: invalid session, network error, object name typo / object deleted from org, or insufficient permission to describe the object. Note the non-queryable branch throws its own error (3714) before this wrap.","commonSituations":"Renamed or deleted custom object after the step was configured, API user lost read access to the object, expired session on a long-running transformation, wrong API version lacking the object.","solutions":["Check the cause: INVALID_FIELD / Entity type does not exist means fix the object name in the step settings","Re-connect if the session expired, then retry getFields()","Verify the integration user can read/describe the object (object permissions, API enabled)","Confirm the object still exists in the org and its API name matches exactly (case-sensitive custom objects end in __c)","Align the configured Salesforce API version with the org"],"exampleFix":"// before\nconnection.setModule(\"Accout__c\");\nString[] fields = connection.getFields();\n// after\nconnection.setModule(\"Account__c\"); // correct API name\nString[] fields = connection.getFields();","handlingStrategy":"validation","validationCode":"String apiName = module == null ? null : module.trim(); if (apiName == null || apiName.isEmpty()) throw new IllegalArgumentException(\"Module name required before getFields()\"); if (!connection.testConnection()) connection.connect();","typeGuard":"boolean moduleLooksValid(String m) { return m != null && m.matches(\"[A-Za-z][A-Za-z0-9_]*(__c)?\"); }","tryCatchPattern":"try { fields = connection.getFields(module); } catch (KettleException e) { log.logError(\"Cannot describe \" + module + \": \" + e.getCause(), e); throw e; }","preventionTips":["Copy object API names exactly (custom objects end in __c, case-sensitive)","Verify the object still exists after org changes/renames","Keep the session alive; reconnect before metadata calls in long jobs","Confirm field-level read access for the integration user"],"tags":["salesforce","metadata","fields","configuration"],"backgroundTag":"entity-not-found","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"}