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.
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
Abweichend zu der unter SQL-Parser vorgestellten SQL Syntax gibt es folgende Abweichung / Ergänzungen:
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.
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 |
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.
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.
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.
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.
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: