Datenexport aus Salesforce CRM

Im vorliegenden Beitrag soll der Datenexport aus Salesforce CRM mit Hilfe der Salesforce-API beschrieben werden, wenn kein direkter Zugriff auf die Datenbank möglich ist. Zusätzlich wird eine Konsolenanwendung auf Basis .NET Core vorgestellt über welche der Datenexport automatisiert angesteuert werden kann.

Grundlage

Salesforce CRM ist nach eigenen Angaben die weltweit führende CRM-Plattform mit mehr als 150.000 Kunden.

Salesforce CRM2 bietet verschiedene API3-Varianten für das Lesen, Einfügen, Modifizieren und Löschen der enthaltenen CRM-Daten über den Zugriff aus externen Systemen an. Zum Export von Daten eignet sich eine SOAP4-API, welche mittels WSDL5 die Kommunikation zwischen API und Client herstellt.

Salesforce bietet zwei Versionen von WSDL, Unternehmens WSDL und Partner WSDL. Für den vorliegenden Anwendungsfall ist die Unternehmens WSDL vorzuziehen, da sie für die Verwendung mit nur einer Salesforce-Organisation optimiert wurde.

Die Unternehmens WSDL lässt sich im Salesforce-Portal unter Setup -> API -> Generate Enterprise WSDL -> Generate WSDL erzeugen. In dieser WSDL befindet sich die strukturelle Beschreibung der Datenbankobjekte der verwendeten Salesforce Instanz.

Weiterführende Informationen zu Inhalten und Verwendung von SOAP-API und WSDL in Salesforce CRM sind hier zu finden.

In Salesforce wird bei API-Logins ein Benutzername und als Passwort eine Kombination aus Passwort und Sicherheitstoken verwendet. Der Sicherheitstoken wird in Salesforce durch einen Klick auf das Nutzerbild/-Avatar (oben rechts) -> Einstellungen -> Mein Sicherheitstoken zurücksetzen -> Sicherheitstoken zurücksetzen erzeugt und kann dort auch zurückgesetzt werden.

Der Sicherheitstoken wird per E-Mail versandt und kann anschließend an das Ende des Passworts gesetzt werden.

Der Login über die SOAP-API wird über die oben aufgeführten Zugangsdaten aus Benutzername, Passwort und Sicherheitstoken in Kombination mit dem aus der Login-Methode zurückgelieferten Endpoint realisiert.

Konsolenanwendung auf Basis .NET Core

Zur Ansteuerung des automatischen Exports von Daten aus Salesforce CRM wurde eine Konsolenanwendung auf Basis .NET Core erstellt, welche den Download einer Exportdatei im CSV-Format anstößt. Die Anwendung besteht aus einer ausführbaren Datei „Salesforce.exe“, verschiedenen DLL-Anwendungserweiterungen, einer PDB-Datei und mehreren JSON-Dateien. Zudem wird ein Textdokument benötigt in welchem die SQL-Abfrage an die Datenbank hinterlegt ist.

Des Weiteren gehört zur Konsolenanwendung eine Batchdatei, in welcher die Salesforce.exe über die folgenden Parameter angesprochen wird:

download für Export aus Salesforce CRM (upsert noch nicht final implementiert)

  • q Angabe des Dateipfads des Textdokuments mit der SQL-Abfrage
  • f Angabe des Dateipfads der Export-CSV-Datei
  • h oder – ? um Kommandozeilenoptionen auszulesen

Der Inhalt der Batchdatei kann exemplarisch wie folgt aussehen:

„D:\DeltaMasterProjects\Download Salesforce\publish\Salesforce.exe“ download -q „D:\DeltaMasterProjects\Download Salesforce\Query.txt“ -f „D:\DeltaMasterProjects\Download Salesforce\Salesforce Kundenstamm.csv“

Zur Verwendung der Konsolenwendung in Projekten, in welchen Daten aus einem Salesforce CRM exportiert werden sollen, sind die folgenden Anpassungen vorzunehmen:

  1. Generierung der Unternehmens WSDL in Salesforce CRM und Kompilierung dieser WSDL in Visual Studio.
  2. Hinterlegung von Benutzername, Passwort und Sicherheitstoken in Datei appsettings.json (Für eine geschützte Ablage der Zugangsdaten könnten die Credentials zukünftig in Azure Key Vault oder Ähnlichem hinterlegt werden).
  3. Ablage eines Textdokuments, welches die SQL-Abfrage (SELECT-Statement) an die Datenbank enthält.
  4. Anpassung der Pfade des Textdokuments mit der SQL-Abfrage und der Export-CSV-Datei in der oben beschriebenen Batchdatei.

Ein typischer Projektordner mit allen benötigten Dateien in den richtigen Formaten kann bei Bissantz angefragt werden.

Programmablauf:

Die Ansteuerung der Salesforce.exe über den Parameter download führt im ersten Schritt den Login mit den oben aufgeführten Credentials in Kombination mit dem aus der Login-Methode zurückgelieferten Endpoint aus.

Im nächsten Schritt wird die SQL-Abfrage aus dem Textdokument aus Parameter -q an die Methode queryAsync des SoapClients gesendet.

Das Resultat wird dann in der in Parameter -f hinterlegten CSV-Datei gespeichert, wobei die Spaltennamen dynamisch aus dem zurückgegebenen Objekt extrahiert werden.

Zum Schluss erfolgt der Logout.

Die zeitliche Ausführung der Batchdatei kann z.B. über die Windows Aufgabenplanung oder den SQL Server-Agent implementiert werden.

Nachfolgend in Abbildung 1 die Ausgabe der Batchdatei bei erfolgreicher Ausführung.


Abbildung 1: Ausgabe der Batchdatei bei erfolgreicher Ausführung

Schreibe einen Kommentar