SalesForceJdbc Treiber

Einleitung

Der SalesforceJdbc Treiber erlaubt es Objekte aus SalesForce über jdbc zu lesen. Mit Hilfe von SQL-Abfragen können damit Daten von einem SalesFoce Objekt genauso wie aus einer Datenbanktabelle extrahiert und weiterverarbeitet werden.

  • Schema: leer, public oder system
  • Tabelle: Bei leerem Schema oder public der Name eines SalesForce Objekts. Bei Schema system der Name einer Systemtabelle
  • Spalten: Die jeweiligen Spalten des Objekts beziehungsweise der Systemtabellen

Mit der nachfolgenden Query kann man zum Beispiel mit Hilfe des Treibers die ersten 10 Datensätze einiger Spalten des Account Objekts einlesen:

SELECT id
     , name
     , masterrecordid
     , isdeleted
     , lastactivitydate
     , lastvieweddate
  FROM public.account 
 FILTER limit 10

SQL Syntax

Abweichend zu der unter SQL-Parser vorgestellten SQL Syntax gibt es folgende Abweichung / Ergänzungen:

  • Die FILES() Funktionalität wird nicht unterstützt. Somit auch nichtdie Pseudospalten DIRECTORY und FILENAME.
  • Die angegebenen Keywörter COLUMNS, HEADLINE, SEPARATED BY, QUOTED BY und ENCODING werden nicht unterstützt.
  • Das FILTER Keywort wird unterstützt

Bei der Verwendung des FILTER Keyword wird jeglicher Code direkt hinter die FROM Sektion an die generierte SalesForce SOQL Abfrage angehängt.

Der FILTER Abschnitt wird derzeit nicht validiert.

Dieses ermöglicht die Vorzuselektion in SalesForce, bevor die WHERE-Bedingung im datasqill jdbc SQL evaluiert wird

Beispiele zum FILTER:

Begrenzung auf 10 Zeilen:

SELECT id
     , name
     , masterrecordid
     , isdeleted
     , lastactivitydate
     , lastvieweddate
  FROM public.account 
FILTER LIMIT 10

Effektive Abfrage an SalesForce via SOQL:

SELECT id
     , name
     , masterrecordid
     , isdeleted
     , lastactivitydate
     , lastvieweddate
  FROM public.account 
 LIMIT 10

Filtern auf alle Accounts, die mit a/A beginnen:

SELECT id
     , name
     , masterrecordid
     , isdeleted
     , lastactivitydate
     , lastvieweddate
  FROM public.account 
FILTER WHERE name LIKE 'a%'

Effektive Abfrage an SalesForce via SOQL:

SELECT id
     , name
     , masterrecordid
     , isdeleted
     , lastactivitydate
     , lastvieweddate
  FROM public.account 
 WHERE name LIKE 'a%'

SOQL LIKE unterscheidet nicht zwischen Groß- und Kleinbuchstaben.

Würde statt Verwendung der FILTER Bedingung folgendes SQL verwendet

SELECT id
     , name
     , masterrecordid
     , isdeleted
     , lastactivitydate
     , lastvieweddate
  FROM public.account 
 WHERE LOWER(name) LIKE 'a%'

dann käme das gleiche Ergebnis heraus aber es würden alle Daten vom account gelesen und dann erst vom datasqill jdbc SQL gefiltert.

Systemtabellen

Der Treiber unterstützt Systemtabellen. Diese erlauben Metadaten über Salesforce Objekte, Spalten, Primärschlüssel und Ausprägungen von Spaltenwerten zu laden. Die Systemtabellen liegen immer unter dem Schema system.

Die Metadaten der Systemtabellen selbst werden nicht bei den Abfragen der Systemtabellen oder der jdbc Metadatenmethoden getTables, getColumns und getPrimaryKeys zurückgeliefert.

Spaltenwerte für Katalog-, Schema-, Tabellen-, Spaltenbezeichner, usw. sind immer in Kleinbuchstaben.

Es gibt die folgenden Systemtabellen:

Schema Tabellenname Beschreibung
system table_list Eine Liste aller Objekte in Salesforce
system column_list Eine Liste aller Spalten von allen Objekten in Salesforce
system primary_key_list Eine Liste aller Primärschlüsselspalten von allen Objekten in Salesforce
system picklist_list Eine Liste aller möglichen Ausprägungen aller Spalten von allen Objekten in Salesforce

Liste der Tabellen

Hier werden die Metadaten aller verfügbaren Objekte in SalesForce zur Verfügung gestellt.

Die Menge der sichtbaren Objekte hängt von den Berechtigungen ab, die der technische User besitzt, mit dem die Verbindung aufgebaut wird. Dieses gilt auch für alle anderen Systemtabellen.

Die folgenden Metaddatenspalten stehen für die Selektion zur Verfügung:

Name Datentyp Wert Bemerkung
table_cat VARCHAR(100) datasqill Der Katalog des Objekts ist immer datasqill
table_schem VARCHAR(100) public Das Schema des Objekts ist immer public
table_name VARCHAR(100) Objektname Name des Objects in SalesForce
table_type VARCHAR(100) TABLE Hat immer den Wert TABLE
remarks VARCHAR(4000) Beschreibung Eine Beschreibung des SalesForce Objekts
type_cat VARCHAR(100) NULL Nicht unterstützt. Immer NULL
type_schem VARCHAR(100) NULL Nicht unterstützt. Immer NULL
type_name VARCHAR(100) NULL Nicht unterstützt. Immer NULL
self_referencing_col_name VARCHAR(100) NULL Nicht unterstützt. Immer NULL
ref_generation VARCHAR(20) NULL Nicht unterstützt. Immer NULL

Der gleiche ResultSet wird geliefert, falls man über das jdbc Interface java.sql.DatabaseMetaData getTables aufruft.

Liste der Spalten

Hier werden die Metadaten aller Spalten von allen verfügbaren Objekten in SalesForce zur Verfügung gestellt.

Die folgenden Metaddatenspalten stehen für die Selektion zur Verfügung:

Name Datentyp Wert Bemerkung
table_cat VARCHAR(100) datasqill Der Katalog des Objekts ist immer datasqill
table_schem VARCHAR(100) public Das Schema des Objekts ist immer public
table_name VARCHAR(100) Objektname Name des Objects in SalesForce
column_name VARCHAR(100) Spaltenname Name der Spalte in SalesForce
data_type Ganzzahlig JDBC-Datentyp Der jdbc-Datentyp (siehe java.sql.JDBCType)
type_name VARCHAR(100) Datentyp Der Name des Datentypen (siehe unten)
column_size Ganzzahlig Länge Die Länge der Spalte
buffer_length Ganzzahlig 0 Wird von jdbc nicht mehr unterstützt. Immer 0
decimal_digits Ganzzahlig Anzahl Nachkommastellen Nur bei Datentypen mit Nachkommastellen. Sonst NULL
num_prec_radix Ganzzahlig 10 Steht immer auf 10
nullable Ganzzahlig 2 Steht für unbekannt (columnNullableUnknown)
remarks VARCHAR(4000) Kommentar Spaltenkommentar
column_def VARCHAR(4000) NULL Default Wert (nicht unterstützt)
sql_data_type Ganzzahlig NULL nicht unterstützt
sql_datetime_sub Ganzzahlig NULL nicht unterstützt
char_octet_length Ganzzahlig NULL nicht unterstützt
ordinal_position Ganzzahlig Position Spaltennummer startend mit 1
is_nullable VARCHAR(18) leerer String nicht unterstützt
scope_schema VARCHAR(100) leerer String nicht unterstützt
scope_table VARCHAR(100) leerer String nicht unterstützt
source_data_type Ganzzahlig NULL nicht unterstützt
is_autoincrement VARCHAR(10) leerer String nicht unterstützt
is_generatedcolumn VARCHAR(10) leerer String nicht unterstützt

Verwendete Datentypen:

Name Länge Bemerkung
BIGINT 0 Ganzzahlig. Kann auch als Integer Datentyp verwendet werden
BOOLEAN 0 Boolscher Wert true / false
DATE 0 Datum
DECIMAL wie angegeben Zahl mit Vor und Nachkommastellen. Die Anzahl der Nachkommastellen steht in decimal_digits
TIMESTAMP 0 Zeitstempel. Der Zeitstempel ist immer in der native Zeitzone von SalesForce
VARCHAR wie angegeben Zeichenkette. Kann (empirisch) bis zu 3.145.728 Zeichen annehmen

Der gleiche ResultSet wird geliefert, falls man über das jdbc Interface java.sql.DatabaseMetaData getColumns aufruft.

Liste der Primärschlüssel

Hier werden die Metadaten aller Primärschlüsselspalten aller Objekte in SalesForce zur Verfügung gestellt.

Die folgenden Metaddatenspalten stehen für die Selektion zur Verfügung:

Name Datentyp Wert Bemerkung
table_cat VARCHAR(100) datasqill Der Katalog des Objekts ist immer datasqill
table_schem VARCHAR(100) public Das Schema des Objekts ist immer public
table_name VARCHAR(100) Objektname Name des Objects in SalesForce
column_name VARCHAR(100) Spaltenname Name der Spalte des Primärschlüssels
key_seq Ganzzahlig Position Position im Primärschlüssel startend mit 1
pk_name VARCHAR(100) = pk_$table_name Name des Primärschlüssels. Automisch generiert

Der gleiche ResultSet wird geliefert, falls man über das jdbc Interface java.sql.DatabaseMetaData getPrimaryKeys aufruft.

Liste der Spaltenausprägungen

Hier werden die Metadaten aller möglichen Ausprägungen der Spalten aller Objekte in SalesForce zur Verfügung gestellt.

Die folgenden Metaddatenspalten stehen für die Selektion zur Verfügung:

Name Datentyp Wert Bemerkung
table_cat VARCHAR(100) datasqill Der Katalog des Objekts ist immer datasqill
schema_name VARCHAR(100) public Das Schema des Objekts ist immer public
table_name VARCHAR(100) Objektname Name des Objects in SalesForce
column_name VARCHAR(100) Spaltenname Name der Spalte für die diese Ausprägung gilt
active BOOLEAN TRUE Ist dieses Element aktiv? Salesforce liefert nur aktive Elemente
default_value BOOLEAN IstDefault Gibt an, ob dieses Element der Defaultwert ist. Kann nur einmal pro Spalte TRUE sein
label VARCHAR(200) Name Anzeigename der Ausprägung
valid_for VARCHAR(100) Verwendung Bitkette die in SalesForce Informationen über die Verwendung angibt
value VARCHAR(8000) Wert Wert der Ausprägung

Derzeit ist der Label nur in Englisch.

Legacy Mode

Für eine aufwärtskompatible Nutzung des Salesforce Treiber gibt es einen Schalter "NullToEmptyStrings". Dieser kann gesetzt werden, um den Salesforce Treiber in einem Mode zu betreiben, bei dem statt typisierten Daten nur VARCHAR Spalten zurückgegeben werden.

Dazu wird der Schalter im Keyfile unter der dboptionlist ergänzt:

    SQTS_DB_44  jdbc:salesforce:https://myinstance.salesforce.com/services||dboptionlist={client_id=AAAAA,client_secret=XXXXX,NullToEmptyStrings=true}|

Damit verhält sich der Treiber in Bezug auf die zurückgelieferten Daten etwas anders:

  1. Boolean und Double Daten werden als VARCHAR zurückgegeben
  2. Null Werte werden zu leeren Strings konvertiert.