Salesforce Einstein Analytics Cloud Connector 3.3 | MuleSoft Documentation
# Salesforce Einstein Analytics Cloud Connector 3.3
Anypoint Connector for Salesforce Einstein Analytics Cloud (Salesforce Analytics Connector) enables you to connect to the Salesforce Analytics Cloud application using the Salesforce External Data API. The connector exposes convenient methods for creating, deleting, and populating datasets into the Salesforce Analytics Cloud system. Load data into Salesforce Einstein Analytics Cloud from many different data sources whether they are on-premise or on the cloud. Go beyond .csv files with this connector.
For software requirements and compatibility information, see Salesforce Einstein Analytics Connector Release Notes.
## Before You Begin
To use this connector, you must be familiar with:
  * The Salesforce Einstein Analytics API
  * Anypoint connectors
  * Mule runtime engine (Mule)
  * Elements in a Mule flow
  * Global elements
  * How to create a Mule app using Anypoint Studio


Before creating an app, you must have login credentials to test your connection to your target resource.
## POM File Information
The Apache Maven `pom.xml` file generated by Anypoint Studio contains dependencies for a Mule app. If you code a Mule app manually, include this XML snippet in your `pom.xml` file to enable access to this connector:
```
<dependency>
 <groupId>com.mulesoft.connectors</groupId>
 <artifactId>mule-sfdc-analytics-connector</artifactId>
 <version>x.x.x</version>
 <classifier>mule-plugin</classifier>
</dependency>
```

Replace `x.x.x` with the version that corresponds to the connector you are using.
To obtain the most up-to-date `pom.xml` file information:
  1. Go to Anypoint Exchange.
  2. In Exchange, click **Login** and supply your Anypoint Platform username and password.
  3. In Exchange, search for `<connector-name>`.
  4. Select the connector.
  5. Click **Dependency Snippets** near the upper right of the screen.


### Required Parameters for Basic Username Password Authentication
  * Username Salesforce Einstein Analytics username
  * Password Password that corresponds with the Salesforce Einstein Analytics username
  * Security Token Corresponding security token


### Required Parameters for the OAuth 2.0 Configuration
  * Consumer Key Consumer key for the Salesforce connected app.
  * Consumer Secret Consumer secret for the connector to access Salesforce.


### Required Parameters for the OAuth 2.0 JWT Bearer Configuration
  * Consumer Key Consumer key for the Salesforce connected app
  * Keystore File See Generating a Keystore File
  * Store Password Password for the keystore
  * Principal Salesforce username


#### Required Parameters for the OAuth 2.0 SAML Bearer Configuration
  * Consumer Key Consumer key for the Salesforce connected app.
  * Keystore File Path to the keystore used to sign data during authentication. Note that only the Java keystore format is allowed.
  * Store Password Keystore password.
  * Principal Salesforce username.


#### Generating a Keystore File
The Keystore is the path to the keystore used to sign data during authentication. The following example shows how to generate a JKS file:
  1. Go to your Mule workspace, and open the command prompt (for Windows) or Terminal (for Mac).
  2. Type `keytool -genkeypair -alias salesforce-cert -keyalg RSA -keystore salesforce-cert.jks` and press enter.
  3. Enter the following details:
     * Password for the keystore
     * Your first name and last name
     * Your organization unit
     * Name of your city, state, and the two letter code of your county
The system generates a Java keystore file containing a private or public key-pair in your workspace.
  4. Provide the file path for the keystore in your connector configuration.
Type `keytool -exportcert -alias salesforce-cert -file salesforce-cert.crt -keystore salesforce-cert.jks` and press enter.
The system now exports the public key from the keystore into the workspace. This is the public key that you need to enter in your Salesforce instance.
  5. Verify that you have both the keystore (`salesforce-cert.jks`) and the public key (`salesforce-cert.crt`) files in your workspace.


## Add the Connector in Studio
  1. In Studio, create a Mule project.
  2. In the Mule Palette view, click **(X) Search in Exchange**.
  3. In **Add Modules to Project** , type "analytics" in the search field.
  4. Click this connector’s name in **Available modules**.
  5. Click **Add**.
  6. Click **Finish**.


### Configure the Connector in Studio
  1. Drag the desired Salesforce Analytics operation to the Studio canvas.
  2. To create a global element for the connector, on the **General** tab, configure the authentication as described in the authentication sections.
The following authentication connection types are available:
     * Username Password
     *      *      * OAuth 2.0 SAML Bearer
  3. Configure these fields to upload external data into new dataset and start the processing operation:
     * Type Type of the records to insert. Select a JSON file representing the schema of the dataset to create.
     * Records DataSense expression; the records to insert.
     * Operation Specify the operation to use when you’re loading data into a dataset.
     * Description
     * Label


### Username Password
On the **General** tab of the **Global Element Properties** screen, enter the following information to configure Basic authentication:
  * **Username** Enter the Salesforce username.
  * **Password** Enter the corresponding password.
  * **Security Token** Enter the corresponding security token.


The following screenshot shows an example of configuring Basic authentication:
Figure 1. Basic authentication fields
### OAuth 2.0
On the **General** tab of the **Global Element Properties** screen, enter the following information to configure OAuth 2.0 authentication:
  * **Consumer Key** Consumer key for the Salesforce connected app.
  * **Consumer Secret** Consumer secret for the connector to access Salesforce.


The following screenshot shows an example of configuring the OAuth 2.0 authentication:
Figure 2. OAuth 2.0 authentication fields
### OAuth 2.0 JWT
On the **General** tab of the **Global Element Properties** screen, enter the following information to configure OAuth 2.0 JWT authentication:
  * **Consumer Key** Consumer key for the Salesforce connected app
  * **Keystore File** See Generating a Keystore File
  * **Store Password** Password for the keystore
  * **Principal** Salesforce username


Figure 3. OAuth 2.0 JWT authentication fields
### OAuth 2.0 SAML Bearer
On the **General** tab of the **Global Element Properties** screen, enter the following information to configure OAuth 2.0 SAML Bearer authentication:
  * **Consumer Key** Consumer key for the Salesforce connected app
  * **Keystore File** See Generating a Keystore File
    * **Store Password** Password for the keystore.
    * Principal Salesforce username


Figure 4. OAuth 2.0 SAML Bearer authentication fields
## Use Case: Studio
This use case provides an example of how to use the Salesforce Einstein Analytics Connector and contains this end to end flow:
  * Uses an HTTP Listener as the input source.
  * Configures a connection using a username, password, and the security token.
  * Uses a Salesforce Analytics operation with the parameters to use.


The example that follows contains these components:
  * HTTP Listener, which accepts data from HTTP requests.
  * Transform Message, which provides the records input data required by Salesforce Einstein Analytics connector.


```
%dw 2.0
output application/java
---
[
	{
		"Id": 1,
		"Country": "Country",
		"City": "City",
		"Year": 428742153,
		"Distance": 284644936,
		"Currencies":
		[
			"EUR",
			"USD"
		],
		"CreationDate": "20/12/2017" as Date {format: "dd/MM/yyyy"}
	},
	{
		"Id": 2,
		"Country": "Country",
		"City": "City",
		"Year": 1432651434,
		"Distance": 1336594394,
		"Currencies":
		[
			"EUR",
			"USD",
			"HUF"
		],
		"CreationDate": "20/12/2017" as Date {format: "dd/MM/yyyy"}
	}
]
```

  * Salesforce Analytics Connector, which connects with Salesforce, and performs an operation to push data into Salesforce Einstein Analytics Cloud.
The example that follows contains these components:
  * HTTP Listener, which accepts data from HTTP requests.
  * Transform Message, which provides the records input data required by Salesforce Einstein Analytics connector.


```
%dw 2.0
output application/java
---
[
	{
		"Id": 1,
		"Country": "Country",
		"City": "City",
		"Year": 428742153,
		"Distance": 284644936,
		"Currencies":
		[
			"EUR",
			"USD"
		],
		"CreationDate": "20/12/2017" as Date {format: "dd/MM/yyyy"}
	},
	{
		"Id": 2,
		"Country": "Country",
		"City": "City",
		"Year": 1432651434,
		"Distance": 1336594394,
		"Currencies":
		[
			"EUR",
			"USD",
			"HUF"
		],
		"CreationDate": "20/12/2017" as Date {format: "dd/MM/yyyy"}
	}
]
```

  * Salesforce Analytics Connector, which connects with Salesforce, and performs an operation to push data into Salesforce Einstein Analytics Cloud.


## Use Case: XML
Paste the XML code provided in this example into the Configuration XML tab in Anypoint Studio to experiment with the flow described in the previous section.
Keep in mind that you must still provide the `metadata.json` file describing the schema of the dataset to be created.
```
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:salesforce-analytics="http://www.mulesoft.org/schema/mule/salesforce-analytics"
xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:file="http://www.mulesoft.org/schema/mule/file"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core
http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/file
http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core
http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/salesforce-analytics
http://www.mulesoft.org/schema/mule/salesforce-analytics/current/mule-salesforce-analytics.xsd">
 	<configuration-properties file="mule-app.properties" />
	<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config" >
		<http:listener-connection host="0.0.0.0" port="8081" />
	</http:listener-config>
	<salesforce-analytics:salesforce-analytics-config
	 name="Salesforce_Analytics_Salesforce_Analytics"
	 doc:name="Salesforce Analytics Salesforce Analytics" >
		<salesforce-analytics:basic-connection username="${salesforce.username}"
		  password="${salesforce.password}" securityToken="${salesforce.securityToken}"
		  url="${salesforce.url}"/>
	</salesforce-analytics:salesforce-analytics-config>
	<flow name="upload-all-in-one-with-append" >
		<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="append"/>
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
[
	{
		"Id": 1,
		"Country": "Country",
		"City": "City",
		"Year": 428742153,
		"Distance": 284644936,
		"Currencies":
		[
			"EUR",
			"USD"
		],
		"CreationDate": "20/12/2017" as Date {format: "dd/MM/yyyy"}
	},
	{
		"Id": 2,
		"Country": "Country",
		"City": "City",
		"Year": 1432651434,
		"Distance": 1336594394,
		"Currencies":
		[
			"EUR",
			"USD",
			"HUF"
		],
		"CreationDate": "20/12/2017" as Date {format: "dd/MM/yyyy"}
	}
]]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<salesforce-analytics:upload-external-data-into-new-data-set-and-start-processing
		 doc:name="Upload external data into new data set and start processing"
		 config-ref="Salesforce_Analytics_Salesforce_Analytics" operation="APPEND"
		 description="${allInOne.dataSetDescription}" label="${allInOne.dataSetLabel}"
		 dataSetName="${allInOne.dataSetName}" edgemartContainer="${allInOne.dataSetContainerName}"
		 type="metadata.json" notificationSent="ALWAYS" notificationEmail="${notification.email}"/>
	</flow>
</mule>
```

## See Also
  * Introduction to Anypoint Connectors
  * Salesforce Einstein Analytics Connector on Exchange
  * Salesforce External Data API.
  * For Required Parameters for Basic Username Password Authentication see Salesforce Basic Authentication
  * For Required Parameters for the OAuth 2.0 Configuration see Salesforce OAuth 2.0
  * For Required Parameters for the OAuth 2.0 JWT Bearer Configuration see Salesforce OAuth 2.0 JWT Bearer
  * For Required Parameters for the OAuth 2.0 SAML Bearer Configuration see Salesforce OAuth 2.0 SAML Bearer
  * MuleSoft Help Center