With the Salesforce Listener Block, you can configure your flow to ingest files stored in Salesforce for processing within the Hyperscience application.
The Salesforce Listener Block is available in both SaaS and on-premise versions of the Hyperscience application.
Sample use cases
Clients attach files to the records of specific objects in Salesforce. Hyperscience ingests all of these client files automatically for processing. You can then use these files to update client records using the Salesforce Notifier Block.
Block settings table
Name | Required? | Description |
---|---|---|
Topic Name | Yes | The name of the topic you configured in Salesforce for the Salesforce Listener |
Associated Username | Yes | The username associated with the Salesforce Connected App |
Consumer Key | Yes | The Consumer Key from the Salesforce Connected App |
Private Key | Yes | The key generated during the creation of the Salesforce Connected App The private key is a long string that begins with ----BEGIN PRIVATE KEY----\ and ends with \n----END PRIVATE KEY----\n. Include both of these tags and all characters between them when entering the private key. |
Sandbox Environment | Yes | Indicates whether the connected Salesforce instance is a sandbox environment |
Setting up Salesforce Listener
Setup within Salesforce
Install and set up Hyperscience Package
Install the Hyperscience package in the desired Salesforce org.
Go to the Salesforce AppExchange’s Hyperscience Platform listing.
Click the Get It Now button.
Enter your details and click the Contact Me button.
A Hyperscience representative will contact you and provide you with the Hyperscience package.
Once you have the Hyperscience package, install it in the desired Salesforce org.
Add Hyperscience Permission Set to users that should have access to the Hyperscience application.
Go to the Setup page.
Search for “Permission Sets” and click the Permission Sets link.
Go to Hyperscience Permission Set.
Click Manage Assignments.
Click Add Assignments.
Select the users you want to give permissions to the Hyperscience application by checking the checkbox for each user.
Click Assign and then Done.
Enable the Query All Files permission.
Option 1 (using Permission Set):
Go to the Setup page.
Search for Permission Sets and click on it.
Click New.
Choose the desired Label (e.g., Query All Files).
Click Save.
Go back to the Permission Set Page.
Search for the created Permission Set and click on it.
Go to App Permissions.
Click Edit.
Activate the Query All Files permission.
Click Save.
Click Manage Assignments.
Click Add Assignments.
Add users who should be able to query files.
Click Assign.
Option 2 (using Profile):
Go to the Setup Page.
Search for Profiles and click on it.
Search for the Profile that you want to enable the Query All Files permission for and click on it.
Click Edit.
Enable the Query All Files permission.
Click Save.
Configure authentication
Generate private key
Create the private key (salesforce.key) and certificate (salesforce.crt) by running the following command:
openssl req -x509 -sha256 -nodes -days 36500 -newkey rsa:2048 -keyout salesforce.key -out salesforce.crt
Copy the private key to your clipboard.
cat [private.key file] | sed 's/$/\\n/' | tr -d '\n' | pbcopy
Paste the private key into a text file and save it. Later, you will need to paste it into your Salesforce Listener Block within Hyperscience.
Create your JWT Connected App
Log in to Salesforce and go to Setup.
In the side nav, go to Apps > App Manager and click New Connected App.
Enter the information in the Basic Information section.
In API (Enable OAuth Settings), complete the following steps:
Select Enable OAuth Settings.
In Callback URL, enter http://localhost.
Select Use digital signatures, and upload the salesforce.crt file that was generated when you created your private key.
In Selected OAuth Scopes, add the following permissions:
Manage user data via APIs (api)
Perform requests at any time (refresh_token, offline_access)
Click Save. The page should look similar to the following screenshot:
On the resulting page, click Manage.
Click Edit Policies.
In the OAuth policies section, change Permitted Users to Admin approved users are pre-authorized.
Click Save.
On the app page, in the Profiles section, click Manage Profiles.
On the Application Profile Assignment page, assign the user profiles that will access this app. This is the service account user, which will be configured in the Salesforce Listener and Notifier Blocks, and its details will be logged for any object updates.
Retrieve your consumer_key from the Connected App
Within Salesforce, click App Manager in the Apps navigation sidebar.
Find the connected app created in the previous section.
On the app’s row, click on the drop-down menu and select View.
Copy the Consumer Key from the API (Enable OAuth Settings) section. You’ll need the Consumer Key when configuring the Salesforce Listener Block.
Create and link the Salesforce topic
Create a Streaming Channel or choose an existing one that you will use. Note that channel names in Salesforce should start with /u/.
See Salesforce’s Create a Streaming Channel for more information.
Obtain the ID of the streamingChannel. To do so, do one of the following:
Click on the channel’s name on the Streaming Channels page, then you can find the channel ID in the URL address bar. For example, if the URL is https://test.lightning.force.com/lightning/r/StreamingChannel/0M68c0000000HGyCAM/view, then the channel ID is 0M68c0000000HGyCAM.
Go to the Developer Console and run the following query in the query editor (replace /u/ChannelName with the channel name from step 1):
SELECT ID, NAME FROM StreamingChannel where NAME in ('/u/ChannelName')
Create a record of Hyperscience__Channel_Object_Link__c. To create this record, run the command below in the Developer Console. In this code snippet, objectApiName refers to the API name of the object whose records you intend to attach files to. As soon as a file is attached to a record with API name objectApiName, a notification will be sent using Streaming Channel with name ‘/u/channelName’.
Use the objectApiName for the Salesforce object the documents are associated with that you want to process in Hyperscience. For example, if you want Hyperscience to process documents attached to Salesforce Cases, use the objectApiName for the Salesforce Case object. To find this value, click on Object Manager in the Salesforce Setup menu, find the Case object, and retrieve the name in the API Name column.
Hyperscience__Channel_Object_Link__c channelObjectLink = new Hyperscience__Channel_Object_Link__c(); channelObjectLink.Hyperscience__Channel_Name__c = '/u/channelName; channelObjectLink.Hyperscience__Channel_Id__c = 'channelId'; channelObjectLink.Hyperscience__Object_Api_Name__c = 'objectApiName'; insert channelObjectLink;
The above script, creates a link between a Salesforce object and a Streaming channel. It should be noted that a single object cannot be linked with more than one channel, but a single channel can be associated with multiple objects.
After completing these steps, every time that a file is attached to a record of an object with API name objectApiName, a message will be published into the channel with the name /u/channelName and ID channelId.
Every such message will be consumed by the Salesforce Listener, which in turn will retrieve the corresponding file and create a submission from it.
Uploading Files in Salesforce
In Salesforce, you should use the Files related list for attaching files to records of an object. If you don’t see the Files related list on a record, just add it to the page layout for that record type. To learn how, see Salesforce’s Add the Files Related List to Page Layouts.
Configure the Salesforce Listener Block
Log in to your Hyperscience instance.
Go to Flows, and click on the name of the flow you want to add the Salesforce Listener Block to.
Scroll to the beginning of the flow and click the Inputs.
Click Add and select Salesforce Listener.
Within the Listener, configure the settings listed in the Block settings table of this article.
Process existing files
Open the Developer Console in Salesforce
In the setup menu in the upper-right corner, select Developer console.
In the Developer Console, from the Debug menu, select Open Execute Anonymous Window.
Run code snippet
Enter the following code in the opened window with title Enter Apex code (replace /u/channelName with the channel name created in your environment):
Datetime fromDateTime = DateTime.newInstance(YYYY, MM, DD, HH, MM, SS);
Datetime toDateTime = DateTime.newInstance(YYYY, MM, DD, HH, MM, SS);
FilesController.publishFiles('/u/channelName', fromDateTime, toDateTime);
This command will publish on the channel with the name /u/channelName. Both fromDateTime and toDateTime parameters are required, but they can be assigned a null value. channelName is required.
The Hyperscience__Channel_Object_Link__c custom object manages the link between Salesforce Objects and streaming channels. So, if object1 has an entry in Hyperscience__Channel_Object_Link__c and its corresponding channel_name__c on Hyperscience__Channel_Object_Link__c’s record is channel1, when you run FilesController.publishFiles('channel1', fromDateTime, toDateTime), Hyperscience receives all documents that were attached to object1 between fromDateTime and toDateTime and publishes them to channel1.
Parameters fromDateTime and toDateTime are used as filters on the dates that the documents were attached to a certain object.
Known limitations
If you upload a file and then add it to an object, adding it a second time will not cause re-processing due to how Salesforce keeps track of new files. To re-process the file, upload the file again.