SlideShare a Scribd company logo
1 of 123
Download to read offline
Coveo Platform 7.0
Salesforce Connector Guide
Coveo Platform 7.0 | Salesforce Connector Guide
Notice
The content in this document represents the current view of Coveo as of the date of publication. Because Coveo
continually responds to changing market conditions, information in this document is subject to change without
notice. For the latest documentation, visit our website at www.coveo.com.
© Coveo Solutions Inc., 2014
Coveo is a trademark of Coveo Solutions Inc. This document is protected by intellectual property laws and is
subject to all restrictions specified in the Coveo Customer Agreement.
Document part number: PM-131004-EN
Publication date: 5/14/2018
4www.coveo.com ii
Coveo Platform 7.0 | Salesforce Connector Guide
Table of Contents
1. Salesforce Connector 1
1.1 Advantages Relative to the Legacy Connector 1
1.2 Connector Features Summary 1
1.3 Features 2
2. Salesforce Connector Deployment Overview 8
3. Salesforce Connector Requirements 10
4. Creating a Salesforce User Identity 11
4.1 Creating a Dedicated Salesforce Crawling Account 12
4.2 Getting the Security Token for Your Salesforce Account 14
5. Getting Salesforce Client_ID and Client_Secret Values 16
6. Salesforce ObjectsToGet Configuration File 21
6.1 Salesforce Object Definition 21
6.2 Configuration File Elements 22
6.3 XML Schema Definition 33
6.4 Creating a Salesforce ObjectsToGet Configuration File 35
6.5 Salesforce ObjectsToGet Configuration File Example for Standard Objects 36
6.6 Salesforce ObjectsToGet Configuration File Example for Knowledge Base 48
6.7 Salesforce ObjectsToGet Configuration File Example for CRM Content 51
6.8 Salesforce ObjectsToGet Configuration File Example for Chatter Objects 54
6.9 Salesforce Connector Configuration Recipes 57
6.9.1 Indexing all Knowledge Base Versions and States 57
6.9.2 Excluding Archived Knowledge Base Articles 60
6.9.3 Indexing Knowledge Base Attachments 61
6.9.4 Fetching Records With Parent Relationships That Must Be Incrementally Updated 61
6.9.5 Fetching Child Relationship to Use for Folding 63
6.9.6 Fetch Child Relationship to Use to Increase or Reduce Results From Queries 63
6.9.7 Minimizing API Calls and Object Description Prefetching 64
6.9.8 Fetching Records Faster Using the Turbo Mode Runner 64
6.9.9 Reducing the Metadata Package Size by Scoping Parents of ContentVersion and Attachment
Objects 66
4www.coveo.com iii
Coveo Platform 7.0 | Salesforce Connector Guide
6.9.10 Choosing the Optimal Record Modification Date Field 67
6.9.11 Removing Leading Zeroes of a Field 67
6.9.12 Using the Currency Field Converter 67
6.9.13 Using the FiscalYearResolver 67
6.9.14 Fixing the Feed Tracking Error 67
6.9.15 Indexing More Than the Built-in FeedItem Types 68
7. Creating a Salesforce Mapping File 69
7.1 Salesforce Mapping File Example for Standard Objects 70
7.2 Salesforce Mapping File Example for Knowledge Base 88
7.3 Salesforce Mapping File Example for CRM Content 92
7.4 Salesforce Mapping File Example for Chatter Objects 96
8. Configuring a Salesforce Security Provider 98
8.1 Configuring an Email Security Provider 100
8.2 Configuring an Active Directory Security Provider 102
9. Configuring and Indexing a Salesforce Source 105
9.1 Modifying Hidden Salesforce Source Parameters 111
9.2 Adding an Explicit Connector Parameter 114
10. Troubleshooting Salesforce Connector Issues 117
10.1 API Security Token Required 117
10.2 Expired Access/Refresh Token 117
10.3 Missing ionic.zip File 117
11. Refreshing Security Caches 118
4www.coveo.com iv
Coveo Platform 7.0 | Salesforce Connector Guide
1. Salesforce Connector
CES 7.0.5785+ (August 2013)
The on-premises Salesforce connector is part of the Coveo for Salesforce license and is therefore available only
with Coveo for Salesforce (see Coveo for Salesforce).
The Coveo Salesforce connector allows you to crawl Salesforce content and bring it into the unified index, making it
easily searchable by end-users.
Important: Salesforce no longer supports TLS 1.0 which is used by the Coveo connector for Salesforce in CES 7.0.8047– (December
to retrieve Salesforce content and content updates. In the CES Console, you will get errors such as:
Salesforce2 Error: Could not establish secure channel for SSL/TLS with authority
'domain.salesforce.com'
You must thus upgrade CES to CES 7.0.8225+ (March 2016). Otherwise, you will no longer be able to update
your Salesforce source content.
1.1 Advantages Relative to the Legacy Connector
This second generation Salesforce connector offers the following advantages over the Salesforce Legacy
connector:
l Indexing of Salesforce permissions rather than applying the same permission on all source items (see
"Indexed Salesforce Security" on page 2)
l Improved performance and reduced API calls
l Indexing of Knowledge Base articles and CRM content files
l Takes advantage of recent Salesforce API versions
1.2 Connector Features Summary
Features Supported Additional information
Salesforce versions API 30 to
API 34
Searchable content
types
Service Cloud standard/custom objects and fields, Chatter feed items and
files, multilingual Knowledge base articles and attachments, and CRM
content (binary files such as PDF).
4www.coveo.com 1
Coveo Platform 7.0 | Salesforce Connector Guide
Features Supported Additional information
Content
update
Incremental
refresh
Full refresh or rebuild needed to retrieve:
l Attached and detached KB articles from cases
l Deleted KB articles.
l Not replicable deleted objects such as deleted ContentVersion (CRM
Content and Chatter files) attachments and other items.
l Changes that occurred more than 30 days ago since the last refresh (a
scheduled refresh triggers a rescan).
l Permission changes for a profile, permission set, object sharing, or
object security level.
Full refresh
Rebuild
Document-level
security
Does not support the following security aspects: Apex managed sharing, IP
based permissions, field level security, shared personal groups (not
reported by the Salesforce API), frozen users, and KB articles item
permissions (see Unsupported Security Aspects).
1.3 Features
Indexed Salesforce Content
The connector can index the following Salesforce content:
l Service Cloud standard/custom objects and fields
l Multilingual Knowledge base articles
l Chatter feed items and files [more]
l CRM Content (binary files such as PDF)
l Sharing permissions
l Sandbox and production environments
l Inactive users
l User visibility
Note: The Salesforce connector does not support to rebuild only one KB or Chatter document or one whole
object as it appears to be possible from the index browser.
Indexed Salesforce Security
The connector can index the permissions of each Salesforce item allowing the index to only return Salesforce
search results that the user performing the query has the permissions to see.
The Coveo index replicates the Salesforce security model for:
4www.coveo.com 2
Coveo Platform 7.0 | Salesforce Connector Guide
l View All permissions
The Salesforce connector fully supports all View All permissions given through a user profile, more
explicitly View All Data which applies to every object, View All User which allows a view all on the user
object, and View All on specific objects such Accounts, Cases, Leads, and Contact.
Note: As Salesforce does not support View All Data on ContentVersion, the permission is replicated in
the connector.
l Sharing permissions
An administrator can secure private objects with the owner, collaboration group, group, user, bosses of a
given user, subordinates of a given user, or Community (also called Network) sharing permission types.
Note: CES 7.0.8225+ (March 2016) Portal Super User permissions are supported by the connector.
l Profile associated to the user
The profile specifies standard and custom object permissions for users associated to this profile.
Note: Any user which is granted Read access for an object by his profile is entitled to search for records of
the given type.
l Organization-wide defaults sharing settings
These settings specify the level of access your users have to each other's data.
Note: CES 7.0.8388+ (June 2016) The external sharing model (organization-wide defaults) is supported
by the connector.
l Shared content
A user can share private content with specific users or groups.
Note: File sharing settings applied to Chatter files and CRM Content documents are also supported. File
sharing settings are not the same as the sharing settings for private objects.
l CRM Content
CRM Content users have access to CRM Content Documents when they are entitled to read such
documents in the library to which the documents belong.
l Chatter
Chatter posts and comments inherit the permissions of the record onto which they are posted, no matter if
that record is public, private, a group or a user.
Note: Public and private CollaborationGroups are supported.
l Communities
Sharing sets are supported in Communities.
4www.coveo.com 3
Coveo Platform 7.0 | Salesforce Connector Guide
l Role hierarchy within the organization
With a role hierarchy, private documents are visible by the owner, but also by all parents of the owner in the
hierarchy.
l Permission sets
Permission sets given to individual users can extend (not restrict) their permissions beyond what is
specified in their profile.
l License type
A user license entitles a user to different functionality within Salesforce and determines which profiles and
permission sets are available to the user, so the Coveo index indirectly replicates user license type
permissions by indexing permissions from profiles and permission sets.
4www.coveo.com 4
Coveo Platform 7.0 | Salesforce Connector Guide
Note: The connector does not support the following security aspects: 
l Apex managed sharing
l IP based permissions
The Coveo connector cannot index restrictions on login IP addresses or hours configured in Salesforce.
The consequence is that your Salesforce users can access Coveo search interfaces and review
Salesforce content from any IP address at any time.
l Field level security (FLS)
For Enterprise, Unlimited, and Developer Salesforce editions, visibility of individual fields can be granted
or denied to users or groups to fine-tune the access control in a permission set or a profile. The Coveo
connector cannot index these permissions. The consequence is that a user that is denied access to a field
could see the content of this field in Coveo search results. Note however that this is also the case for
Salesforce search results (see the Salesforce document Field-Level Security Overview).
l Permission changes replicated with re-indexing, not with incremental refreshes
When permissions change in Salesforce for a profile, permission set, object sharing, or object security
level (Public versus Private), the changes are not replicated in the index on the next incremental refresh.
You must refresh the source to capture permission changes.
l Shared personal groups
A user can share content with a personal group. These sharing permissions cannot be indexed because
they are currently not reported by the Salesforce API. The consequence is that members of the personal
group will not see the shared content in Coveo Organization results. This limitation is therefore not a
security hole.
l Frozen users are not supported
The user that are frozen using the Freeze button are not denied access to the search (see Freezing User
Accounts).
l Knowledge Base (KB) item permissions:
In Salesforce, you can map User Roles to KB data categories (e.g.: members of the Technical Agent
role can only see KB articles under the Technical data category). This mapping information is not
available from the Salesforce API and therefore cannot be indexed. Similarly, the permissions given
through permission sets to grant only some users access to only one Article Type cannot be retrieved
through the Salesforce API.
Consequently, in search results, all users can see all KB articles under all data categories.
l When the organization-wide default is set to Controlled by Parent, a maximum master-detail relationship
depth of two levels is supported (see Sharing Default Access Settings).
Example: When you index a subdetail object, the detail parents are correctly determined but the master
parents are considered public because there are three levels (master-detail-subdetail).
4www.coveo.com 5
Coveo Platform 7.0 | Salesforce Connector Guide
Incremental Refresh
The incremental refresh feature refreshes the content of the index based on the modification date of the objects
in the Salesforce environment. If an item is modified, the incremental refresh feature refreshes the item
automatically.
Notes:
l The incremental refresh feature limitations: 
o Does not work when the last incremental refresh was performed more than 30 days ago. This will
trigger a full refresh of the content.
o Not supported for all not replicateable deleted objects such as deleted ContentVersion (CRM Content
and Chatter files) attachments and other items.
o CES 7.0.7914– (October 2015) A source full refresh or rebuild is needed to capture the deletion of
knowledge base articles and the attachment (or the contrary) of articles on a case.
l CES 7.0.8047+ (December 2015) After you upgrade CES, it is recommended to perform a full refresh of
your source(s) containing KB articles to take account of possible URI changes. You will also possibly
have to change the ObjectsToGet configuration file depending on your needs (see Salesforce Connector
Configuration Recipes). Theses modifications allow the connector to fully support the incremental refresh
as well as the publish status changes of KB articles using stable URIs now produced by default.
l CES 7.0.7914– (October 2015) Stable URIs can only be produced with the help of Coveo Support for the
latest version of online articles when draft and archived articles are not indexed.
Customizable ObjectsToGet Configuration File
You can customize items that the Coveo crawler retrieves from Salesforce (see "Creating a Salesforce
ObjectsToGet Configuration File" on page 35).
Customizable Mapping File
You can customize how the fields of Salesforce objects are mapped to searchable fields in the Coveo index
(see "Creating a Salesforce Mapping File" on page 69).
Feature History
Coveo Platform
version
Date Features
7.0.8047 December
2015
Full support of incremental refreshes on knowledge articles and indexing
their publish status
7.0.7183 November
2014
Support validating the ObjectsToGet with an XSD [more]
4www.coveo.com 6
Coveo Platform 7.0 | Salesforce Connector Guide
Coveo Platform
version
Date Features
7.0.6767 June 2014 l Support incremental modification of knowledge base articles versions
and states [more]
l Support incremental modification of user profiles
7.0.6424 February
2014
Knowledge content searchable by article number without inputting leading
zeroes
7.0.6339 January
2014
l Partial incremental refresh support on knowledge articles
l Support multilingual knowledge articles
7.0.6196 November
2013
Adding support to crawl Chatter feed items and files.
7.0.5785 August 2013 Introduction of this second generation Salesforce connector
What's Next?
Review the deployment process for the Salesforce connector (see "Salesforce Connector Deployment Overview"
on page 8).
4www.coveo.com 7
Coveo Platform 7.0 | Salesforce Connector Guide
2. Salesforce Connector Deployment Overview
The following procedure outlines the steps needed to index a Salesforce source. The steps indicate the order in
which you must perform configurations tasks. When needed, the steps refer to a detailed procedure.
The Salesforce connector can index various Salesforce content types:
l Service Cloud standard and custom objects and fields
l Knowledge base articles
l Chatter
l CRM Content
When you want to index more than one of these Salesforce content types, you must use the following procedure to
create a configuration (ObjectsToGet configuration file, mapping file, and source) for each of them because they
cannot share the same set of configuration parameters.
To deploy the Salesforce connector
1. Validate that your environment meets the requirements (see "Salesforce Connector Requirements" on page
10).
2. Configure the user identity
The Coveo connector needs an account to connect to your Salesforce organization and access the entire
content that you want to index. You must create a CES user identity to hold the credentials of this Salesforce
account (see "Creating a Salesforce User Identity" on page 11).
3. Get Salesforce Client_ID and Client_Secret values
The Coveo security provider and connector for Salesforce must know the Client_ID and Client_Secret
values for your Salesforce organization to be authorized to access its content (see "Getting Salesforce Client_
ID and Client_Secret Values" on page 16).
4. Create an ObjectsToGet configuration file
An ObjectsToGet XML configuration file tells the crawler which Salesforce items to retrieve (see "Salesforce
ObjectsToGet Configuration File" on page 21).
You must create your custom ObjectsToGet XML configuration file before configuring your source. You can
create the file based on examples that include standard objects and include your custom objects (see
"Creating a Salesforce ObjectsToGet Configuration File" on page 35).
5. Configure a mapping file
A Salesforce source needs a mapping file to know how to map retrieved Salesforce items to CES index fields.
You must create a mapping file before you configure your Salesforce source (see "Creating a Salesforce
Mapping File" on page 69).
6. Create a custom Salesforce field set CES 7.0.6607+ (April 2014)
4www.coveo.com 8
Coveo Platform 7.0 | Salesforce Connector Guide
a. The Salesforce source needs a field set matching the CES fields that are included in the mapping file. It is
recommended to start by importing the default Salesforce field set file ([CES_
Path]BinCoveo.CES.CustomCrawlers.Salesforce.FieldSet.xml) to create fields for all the
metadata available by default from Salesforce content.
b. When you created custom Salesforce object and fields, add corresponding fields to the field set.
7. Configure an Email security provider
Note: For a Salesforce Knowledge Base source, you do not need to perform this procedure. Knowledge Base
permissions cannot be indexed so no Email security provider is needed.
In Salesforce, users are identified by their email addresses. Consequently, permissions returned by the
Salesforce security provider for each document are email addresses. The Salesforce security provider then
requires another security provider to uniquely identify users from their email addresses.
The security provider type to use depends on how users are authenticated when they access the search
interface:
l When authenticated with their email address, use an Email security provider (see "Configuring an Email
Security Provider" on page 100).
l When authenticated with their Active Directory account, use an Active Directory security provider (see
"Configuring an Active Directory Security Provider" on page 102).
Note: An Active Directory security provider is appropriate only when the User Principal Name (UPN)
matches the email address for all users.
Note: You may require to also use a Regex Transform Member Name security provider in between the two
other security providers to map member types. Contact Coveo Support for assistance.
8. Configure a Salesforce security provider
Note: For a Salesforce Knowledge Base source, you do not need to perform this procedure. Knowledge Base
permissions cannot be indexed so no Email security provider is needed.
A Salesforce source needs a Salesforce security provider (see "Configuring a Salesforce Security Provider" on
page 98).
9. Configure and index the Salesforce source
The Coveo connector needs to know details about your Salesforce organization to be able to index the desired
content (see "Configuring and Indexing a Salesforce Source" on page 105).
10. If you encounter issues:
l Solve typical issues that return error messages (see "Troubleshooting Salesforce Connector Issues" on
page 117).
l Consider adding and modifying default values of hidden source parameters (see "Modifying Hidden
Salesforce Source Parameters" on page 111).
4www.coveo.com 9
Coveo Platform 7.0 | Salesforce Connector Guide
3. Salesforce Connector Requirements
Your environment must meet the following requirements to be able to use the Coveo connector for Salesforce
repositories:
l CES 7.0.5785+ (August 2013)
l Coveo for Salesforce license
The Salesforce connector is only available on-premises if you have acquired a suitable Coveo for Salesforce
license (see Coveo for Salesforce).
Note: You can see if the Salesforce connector is enabled in your CES 7.0 instance from the
CES Administration Tool.
l An active Salesforce account to a Salesforce organization
The crawling account must have permissions to read all the types of content that you want to index (see
"Creating a Salesforce User Identity" on page 11).
What's Next?
Create a user identity to be used by the Coveo connector to crawl your Salesforce content (see "Creating a
Salesforce User Identity" on page 11).
4www.coveo.com 10
Coveo Platform 7.0 | Salesforce Connector Guide
4. Creating a Salesforce User Identity
The Coveo connector and security provider for Salesforce must use a user account to connect to your Salesforce
organization.
When an application such as the Coveo connector accesses your Salesforce content through the API, it must
provide credentials where the Security Token associated to the account is appended to the password.
Important: Salesforce may regularly request a password change which will generate a new Security Token at the
same time. You must then each time update the user identity with the new password and Security Token.
To create a Salesforce user identity
1. In the Salesforce organization that you want to index:
a. Select or create an account to be used by the Coveo connector and security provider to access your
Salesforce content (see "Creating a Dedicated Salesforce Crawling Account" on page 12).
b. Find the Salesforce Security Token for this account (see "Getting the Security Token for Your Salesforce
Account" on page 14).
2. On the Coveo server, access the Administration Tool.
3. In the Administration Tool, select Configuration > Security.
4. In the navigation panel on the left, select User Identities.
5. In the User Identities page, click Add.
6. In the Modify User Identity page:
a. In the Name box, enter a name for this user identity.
Example: Salesforce Crawling Account
4www.coveo.com 11
Coveo Platform 7.0 | Salesforce Connector Guide
b. In the User box, enter the user name of the selected Salesforce account, typically the email address.
c. In the Password box, enter the password to which you append the Security Token for the selected
Salesforce account with no space in between.
Example: When the password is ThisIsMyPassword and the Security Token is
DU5PJU3GtHbQaX0zxiWoCMq8Z, then enter ThisIsMyPasswordDU5PJU3GtHbQaX0zxiWoCMq8Z.
d. Click Apply Changes.
What's Next?
Your Salesforce source and security provider will need to know the Client_ID and Client_Secret values for
your Salesforce organization (see "Getting Salesforce Client_ID and Client_Secret Values" on page 16).
4.1 Creating a Dedicated Salesforce Crawling Account
The Coveo connector can use a Salesforce administrator account to access and crawl your Salesforce content. It is
however a better practice to create dedicated Salesforce user, profile, and permission set for the Coveo crawling,
that specify minimal permissions and access.
Note: It is strongly recommended to have separate dedicated Salesforce crawling accounts for each Salesforce
source and security provider. When the Coveo crawler accesses Salesforce with the same user credentials too
many times, Salesforce returns INVALID_QUERY_LOCATOR error messages, such as the following:
Error with ID 'SALESFORCE_INVALID_QUERY': invalid query locator (INVALID_QUERY_LOCATOR)
- This error can occur if a user is used more than once for sources that run in
parallel. To avoid this error, make sure to use only one user per source or alternate
the refresh schedule of your sources.
To create a dedicated Salesforce crawling account
1. Using an administrator account, log in to your Salesforce organization.
2. In the user menu, select Setup.
3. Create a Salesforce profile dedicated to the Coveo crawler:
a. In the Setup page, select Manage Users > Profiles.
b. In the Profiles page, click New Profile.
c. In the Clone Profile page:
4www.coveo.com 12
Coveo Platform 7.0 | Salesforce Connector Guide
i. In the Existing Profile box, select an existing profile such as Read Only to be used as a template for
the new profile according to the permissions you want to grant to the crawler.
ii. In the Profile Name box, enter a name such as CoveoIndexer.
iii. Click Save.
d. In the page for your new profile, click Edit and in the Administrative Permissions section:
i. Ensure that the API Enabled option is selected.
ii. Optionally, select the API Only User option as an additional security measure.
iii. Select the Modify All Data option when any of the following situation applies:
l You are using CES 7.0.6225– (December 2013) or prior.
l You want to index the Salesforce item permissions.
Note:
l The Modify All Data permission is required because the Salesforce permissions can be
indexed only through the Salesforce Metadata API that is only accessible with the Modify All
Data permission.
l If you do not enable Modify All Data, be aware that the crawler will only index content to which it
has access, so set up read access to objects accordingly.
iv. When indexing Knowledge content, ensure that Knowledge User is checked.
v. Optionally, as an additional security measure, in the Login IP Ranges section, select or create a login
IP range to restrict the accessibility for this profile (see Coveo Platform IP address range).
4. Create a Salesforce user dedicated to the Coveo crawler:
4www.coveo.com 13
Coveo Platform 7.0 | Salesforce Connector Guide
a. In the Setup page, select Manage Users > Users.
b. In the All Users page, click New User.
c. In the New User page: 
i. Fill the required fields.
ii. In the Profile box, select the profile you just created.
iii. Click Save.
4.2 Getting the Security Token for Your Salesforce Account
When you create a Salesforce account, Salesforce sends an email message from support@salesforce.com with
subject: salesforce.com security token confirmation to the email address associated with the account.
This email message contains the Security Token for the account and is the only place where you can find the
Security Token value. When you change the account password, the security token is also regenerated (so the
previous one expires) and a similar email is sent.
To get the security token for your Salesforce account
1. In the mailbox for the email address associated with the Salesforce account to be used by the Coveo
connector, look for the latest email message received from support@salesforce.com with
subject: salesforce.com security token confirmation.
2. If you cannot find the latest email with security token, reset the security token: 
a. Log in to Salesforce using the Salesforce account to be used by the Coveo connector.
b. In the User Menu, select Setup.
c. In the menu on the left, under Personal Setup, expand My Personal Information, and then click Reset My
Security Token.
d. Follow onscreen instructions.
A new email message will be sent.
3. Open the message, and then copy the Security Token value.
4www.coveo.com 14
Coveo Platform 7.0 | Salesforce Connector Guide
Example: In the following email example, the Security Token value is highlighted.
4www.coveo.com 15
Coveo Platform 7.0 | Salesforce Connector Guide
5. Getting Salesforce Client_ID and Client_Secret Values
The Force.com platform implements the OAuth 2.0 Authorization Framework, so users can authorize applications to
access Force.com resources.
When you configure the Coveo Salesforce security provider and Salesforce source, you must know the Client_ID
and Client_Secret token values for the Salesforce organization that you want to index.
To get the Salesforce Client_ID and Client_Secret values
1. Using and administrator account, log into the Salesforce organization that you want to index.
2. On the User Menu, select Setup.
3. In the navigation menu on the left, under App Setup, expand Create, and then click Apps.
4. In the Apps page, in the Connected Application section, click New to create a new application that will use
OAuth2 to gain access to the organization.
5. In the New Connected App page:
4www.coveo.com 16
Coveo Platform 7.0 | Salesforce Connector Guide
a. In the Basic Information section:
i. Enter meaningful names in the Connected App Name and API Name boxes.
ii. Enter your email in the Contact Email box so that you can receive messages from this application.
b. In the API (Enable OAuth Settings) section: 
i. Select the Enable OAuth Settings check box.
ii. In the Callback URL box, since a callback URL will not be used for this application, enter a dummy but
valid secured URL (https://) such as
https://login.salesforce.com/services/oauth2/callback.
iii. In the Available OAuth Scopes list, select the following items: 
4www.coveo.com 17
Coveo Platform 7.0 | Salesforce Connector Guide
l Access and manage your data (api)
l Full access (full)
l Perform requests on your behalf at any time (refresh_token, offline_access)
and click Add for each so that they appear in the Selected OAuth Scopes list.
c. Click Save.
6. In the page that appears for your new connected app, in the API (Enable OAuth Settings) section:
a. Copy the Consumer Key value and paste it in a secure reference document of your choice.
The Consumer Key is the client_id.
b. Next to Consumer secret, click Click to reveal, copy the value that appears, and then paste it in your
secure reference document.
The Consumer secret is the client_secret.
c. Save your reference document.
Note: You can always come back to this Salesforce page (Setup > App Setup > Create > Apps, and clicking
the application name in the Connected Apps list).
7. Create a Salesforce permission set dedicated to the Coveo crawler and assign it to your dedicated app and
user:
a. In the Setup page, select Manage Users > Permission Sets.
b. In the Permission Sets page, click New.
c. In the Create page, in the Label and API Name boxes, enter significant names, and then click Save.
4www.coveo.com 18
Coveo Platform 7.0 | Salesforce Connector Guide
d. In the page for the new permission set:
i. Click Manage Assignments, and then add the dedicated user you created earlier for the Coveo
crawler (see "Creating a Dedicated Salesforce Crawling Account" on page 12).
ii. In the Apps section, click Assigned Connected Apps.
iii. In the Assigned Connected Apps section, click Edit, add the connected app you just created to the
4www.coveo.com 19
Coveo Platform 7.0 | Salesforce Connector Guide
Enabled Connected Apps list, and then click Save.
What's Next?
Create an ObjectsToGet Configuration file (see "Salesforce ObjectsToGet Configuration File" on page 21).
4www.coveo.com 20
Coveo Platform 7.0 | Salesforce Connector Guide
6. Salesforce ObjectsToGet Configuration File
The ObjectsToGet configuration file of the Salesforce connector contains the definition of all standard or custom
objects that will be retrieved from the Salesforce organization. Each object definition is used to generate the
SOQL query executed by the connector to retrieve the records for that object.
With this configuration file, you get control over:
l Which information is retrieved by specifying the fields and relationships that should be fetched for each object.
This information will be available to use in the mapping file.
l Which records are returned by specifying conditions on the SOQL query that will be used to filter the query
results.
Notes:
l If you want to retrieve Salesforce Knowledge Base articles, you need to specify at least two queries for each
type of Knowledge article, one for the *__ka object and one the *__kav object (see "Salesforce
ObjectsToGet Configuration File Example for Knowledge Base" on page 48).
l There is a bug in the Salesforce API that causes the returned JSON to be invalid when querying a binary field
of an object, so ensure to not include any binary field in your query.
l CES 7.0.7914+ (October 2015) Support for the * character to replace a list of Objects and Parent relationship
fields that are queryable.
Example: When the mapping file contains the following:
<Query>
<ObjectName>Case</ObjectName>
<Fields>
<string>*</string>
</Fields>
</Query>
You can use the following SOQL query: <Query value="Select * from Case" />
l CES 7.0.8047+ (December 2015) Support for the * character to replace a list of Child relationship fields that
are queryable.
Example: <Query value="Select *,Parent.*, (Select * from Children) From Object/>
6.1 Salesforce Object Definition
To obtain the list of queryable fields on a specific object:
l Salesforce developers can use the describeSObject() method to obtain the complete object definition in
JSON format.
Example: https://na15.salesforce.com/services/data/v27.0/sobjects/Account/describe
4www.coveo.com 21
Coveo Platform 7.0 | Salesforce Connector Guide
l Salesforce administrators can obtain the complete list of fields from Salesforce API online documentation (see
Account, Task).
To obtain the list of available relationships on a specific object:
l Salesforce administrators can access any object definition from Salesforce in the Setup under the Customize
menu. Object relationships are identified by fields of data type Lookup (see AccountFields, TaskFields).
6.2 Configuration File Elements
The ObjectsToGet Salesforce configuration file is an aggregate of query XML nodes. A query node contains several
elements, each one being used to generate the SOQL query of a Salesforce object.
Value attribute (optional)CES 7.0.7814+ (August 2015)
You can specify an SOQL query in the query value as shown in the following example (see Salesforce Object
Query Language (SOQL)):
<Query value="Select Id, Owner.Id, (Select Id From Shares) From Case Where CaseNumber>10" />
Keep in mind that only what is already in the objects to get is supported.
ObjectName (required)
The name of the object (standard or custom) to query (see Standard Objects).
Note: If you are using the value attribute, the object name is optional and must be the same.
GroupBy (optional)
The name of the field on which results should be grouped by.
Limit (optional)
The maximum number of items that will be retrieved by the query.
Offset (optional)
The number of items that should be skipped in query results.
Fields (required)
Contains the name of the fields (Field Name column in Salesforce) that will be available on each record
returned by the query. Each field name must be in a <string> element, no matter its data type. Fields specified
in this section can be of any data type except Lookup.
4www.coveo.com 22
Coveo Platform 7.0 | Salesforce Connector Guide
Example:
<Query>
<ObjectName>Account</ObjectName>
<Fields>
<string>Id</string>
<string>IsDeleted</string>
<string>Name</string>
<string>Type</string>
<string>BillingStreet</string>
<string>BillingCity</string>
<string>BillingState</string>
<string>BillingPostalCode</string>
<string>BillingCountry</string>
<string>Phone</string>
<string>Fax</string>
<string>AccountNumber</string>
<string>Website</string>
<string>Sic</string>
<string>Industry</string>
<string>AnnualRevenue</string>
<string>NumberOfEmployees</string>
<string>Ownership</string>
<string>TickerSymbol</string>
<string>Description</string>
<string>Rating</string>
<string>Site</string>
<string>CreatedDate</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
</Fields>
</Query>
QueryCondition (optional)
Important: CES 7.0.6942– (August 2014) This operator is not validated and has a free form. However, the
resulting SOQL must be in the format FIELD OPERATOR VALUE. Rather use QueryCondition2.
One or more conditions that will be applied to the SOQL query used to retrieve object records.
l Field (required):
Case-insensitive name of the object field on which the condition is applied. Relationship names can also
be used (ex.: Parent.Type).
l Operator (required):
The operator to apply to the condition. Any operator supported by Salesforce SOQL queries can be used
(see Comparison Operators).
l Value (required):
Case-sensitive value used to evaluate the condition. String values must be enclosed in single quotes.
4www.coveo.com 23
Coveo Platform 7.0 | Salesforce Connector Guide
Example:
<Query>
<ObjectName>Account</ObjectName>
<Fields>
<string>Name</string>
<string>AccountNumber</string>
</Fields>
<Conditions>
<QueryCondition>
<Field>Type</Field>
<Operator>!=</Operator>
<Value>'Prospect'</Value>
</QueryCondition>
<QueryCondition>
<Field>Owner.Name</Field>
<Operator>=</Operator>
<Value>'John Smith'</Value>
</QueryCondition>
</Conditions>
</Query>
The generated query is:
SELECT Name FROM Account WHERE Type != 'Prospect' AND Owner.Name = 'John Smith'
QueryCondition2 (optional)
Note: This query condition is validated and has more options. This is the prefered way to create a query
condition.
One or more conditions that will be applied to the SOQL query used to retrieve object records.
l Field (required): Case-insensitive name of the Object Field on which the condition is applied. Relationship
names can also be used (e.g. Parent.Type).
l Relation (required): The operator to apply to the condition. Supported operators are Equal, NotEqual,
Less, LessOrEqual, Greater, GreaterOrEqual, Like, NotLike.
l SoqlString|SoqlBoolean|SoqlDateTime (required): Case-sensitive value (not Like) used to evaluate
the condition.
4www.coveo.com 24
Coveo Platform 7.0 | Salesforce Connector Guide
Example:
<Query>
<ObjectName>Account</ObjectName>
<Fields>
<string>Name</string>
</Fields>
<Conditions>
<QueryCondition2>
<Field>Type</Field>
<Relation>NotEqual</Relation>
<SoqlString>Prospect</SoqlString>
</QueryCondition2>
<QueryCondition2>
<Field>IsEscalated</Field>
<Relation>Equal</Relation>
<SoqlBoolean>true</SoqlBoolean>
</QueryCondition2>
<QueryCondition2>
<Field>LastViewDate</Field>
<Relation>GreaterOrEqual</Relation>
<SoqlDateTime>2014-04-28T00:00:00.0000000-00:00</SoqlDateTime>
</QueryCondition2>
</Conditions>
</Query>
Note: For SoqlDateTime, the date/time format must exactly match YYYY-MM-DDTHH:MM:SS.0000000-
00:00
The generated query is:
SELECT Name FROM Account WHERE Type != 'Prospect' AND IsEscalated = true AND LastViewDate >= 2014-
04-28T00:00:00
InCondition (optional)
l Field (required): Case-insensitive name of the Object Field on which the condition is applied. Relationship
names can also be used (e.g. Parent.Type).
l AllowedValues (required): Case-sensitive possible values of the field.
Example:
<Query>
<ObjectName>Account</ObjectName>
<Fields>
<string>Name</string>
</Fields>
<Conditions>
<InCondition>
<Field>Type</Field>
<AllowedValues>
<SoqlString>Prospect</SoqlString>
<SoqlString>Client</SoqlString>
</AllowedValues>
</InCondition>
</Conditions>
</Query>
The generated query is:
SELECT Name FROM Account WHERE Type IN ('Prospect', 'Client')
4www.coveo.com 25
Coveo Platform 7.0 | Salesforce Connector Guide
InQueryCondition (optional)
CES 7.0.7183+ (November 2014) Semi-joins are supported in query's conditions (see Comparison Operators).
Semi-joins are useful when you want to index only a subset of records based on another set of records.
l Field (required):
Case-insensitive name of the object field on which the condition is applied. Relationship names can also
be used (ex.: Parent.Type).
l Query (required): A valid query object (with ObjectName, Fields, etc) (see Semi-Joins or Anti-Joins
Relationship Query Limits).
Example:
<Query>
<ObjectName>Case</ObjectName>
<Fields>
<string>Id</string>
</Fields>
<Conditions>
<InCondition>
<Field>Id</Field>
<Query>
<ObjectName>CaseComment</ObjectName>
<Fields>
<string>ParentId</string>
</Fields>
<Conditions>
<QueryCondition>
<Field>CommentBody</Field>
<Operator>=</Operator>
<Value>'this is a test'</Value>
</QueryCondition>
</Conditions>
</Query>
</InCondition>
</Conditions>
</Query>
The generated query is:
SELECT Id FROM Case WHERE Id IN (SELECT ParentId FROM CaseComment WHERE CommentBody = 'this is a
test')
Not InQueryCondition (optional)
CES 7.0.7183+ (November 2014) Anti-joins are supported in query's conditions (see Comparison Operators). Anti-
joints are useful when you want to index only a subset of records based on another set of records.
l Field (required):
Case-insensitive name of the object field on which the condition is applied. Relationship names can also
be used (ex.: Parent.Type).
l Query (required): A valid query object (with ObjectName, Fields, etc) (see Semi-Joins or Anti-Joins Query
Limits).
4www.coveo.com 26
Coveo Platform 7.0 | Salesforce Connector Guide
Example:
<Query>
<ObjectName>Case</ObjectName>
<Fields>
<string>Id</string>
</Fields>
<Conditions>
<NotCondition>
<InCondition>
<Field>Id</Field>
<Query>
<ObjectName>CaseComment</ObjectName>
<Fields>
<string>ParentId</string>
</Fields>
<Conditions>
<QueryCondition>
<Field>CommentBody</Field>
<Operator>=</Operator>
<Value>'this is a test'</Value>
</QueryCondition>
</Conditions>
</Query>
</InCondition>
</NotCondition>
</Conditions>
</Query>
The generated query is:
SELECT Id FROM Case WHERE NOT Id IN (SELECT ParentId FROM CaseComment WHERE CommentBody = 'this is
a test')
ParentRelationship (optional)
One or more relationships which information will be available on each object record returned by the query. An
object relationship is defined by a lookup field which creates a relation between the current object being
queried and another object. These relations allow SOQL query operations similar to SQL joins.
l RelationshipName (required):
The field name of data type Lookup.
l Fields (required):
The name of the fields of the related object that will be available on each record returned by the query.
l ParentRelationships (optional):
Another level of parent relationship, but this time, the relationship applies to the related object.
4www.coveo.com 27
Coveo Platform 7.0 | Salesforce Connector Guide
Example:
<Query>
<ObjectName>Account</ObjectName>
<Fields>
<string>Name</string>
<string>AccountNumber</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>Owner</RelationshipName>
<Fields>
<string>Name</string>
<string>Email</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
</Query>
Important: The parent field is copied to the record. If the parent is modified, the indexed record is not updated.
ChildRelationship (optional)
One or more relationships which information will be available on each Object record returned by the query. An
Object relationship is defined by a Lookup Field which creates a relation between the current Object being
queried and another Object. These relations allow SOQL query operations similar to SQL joins.
l Query (required): A valid query object (with ObjectName, Fields, etc).
Example:
<Query>
<ObjectName>Opportunity</ObjectName>
<Fields>
<string>Id</string>
<string>Name</string>
</Fields>
<ChildRelationships>
<Query>
<ObjectName>Attachments</ObjectName>
<Fields>
<string>Id</string>
<string>Name</string>
</Fields>
</Query>
</ChildRelationships>
</Query>
The generated query is: 
SELECT Id, Name, (SELECT Id, Name FROM Attachments) FROM Opportunity
The generated metadata, when an attachment is found on the opportunity:
"Attachments.attribute.type" => "Attachment"
"Attachments.attribute.url" => "/services/data/v29.0/sobjects/Attachment/00PG000000B8RUvMAN"
"Attachments.Id" => "00PG000000B8RUvMAN"
"Attachments.Name" => "a_stash_of_werthers.jpg"
4www.coveo.com 28
Coveo Platform 7.0 | Salesforce Connector Guide
Note:
l When more than one child exist, the fields contain values separated with a semicolon.
Example: Attachments.Name: a.jpg;b.jpg
l Nested child relationships (sub-sub queries) are not supported.
Important: CES 7.0.8850– (March 2017) The child field is copied to the record. If a child is modified, the
indexed record is not updated.
CreateRecord (optional)
CES 7.0.8996+ (June 2017) To be used only inside a ChildRelationship. It creates an item from child records.
In the following example, Attachments from Opportunities are created as items in the Coveo index.
Example:
<Query>
<ObjectName>Opportunity</ObjectName>
<Fields>
<string>Id</string>
<string>Name</string>
</Fields>
<ChildRelationships>
<ChildRelationship>
<RelationshipName>Attachments</RelationshipName>
<Fields>
<string>Id</string>
<string>Name</string>
</Fields>
<CreateRecord>true</CreateRecord>
</ChildRelationship>
</ChildRelationships>
</Query>
PolymorphicRelationship (optional)
Polymorphic relationships can be useful for parent relationships on a Lookup field that can be related to
multiple types of objects (ex.: Lookup
(Contract,Campaign,Account,Opportunity,Product,Asset,Case,Solution)). The polymorphic
relationship allows for different fields to be retrieved depending on the object that will be related for a specific
record.
4www.coveo.com 29
Coveo Platform 7.0 | Salesforce Connector Guide
Notes:
l CES 7.0.8047+ (December 2015) Polymorphic relationships no longer depend on a parent relationship to
work.
Example: You can add the following on feed items (TextPost, LinkPost, ContentPost, PollPost) to
create the CreatedBy.SmallPhotoUrl metadata when indexing FeedItem, FeedComment and
collaborationgroup:
<PolymorphicRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<ObjectName>User</ObjectName>
<Fields>
<string>Name</string>
<string>Type</string>
<string>PhotoURL</string>
</Fields>
</PolymorphicRelationship>
l The two following metadata appear on the record with polymorphic relationships: <polymorphic_
relationship_name>.<field> and <polymorphic_relationship_name>_<object_
name>.<field>.
l CES 7.0.7104– (October 2014) The record with polymorphic relationships only provided the metadata
named <polymorphic_relationship_name>_<object_name>.<field>.
l RelationshipName (required):
The field name of data type Lookup.
l ObjectName (optional):
The related object type this polymorphic relationship applies to.
Note: CES 7.0.7104– (October 2014) The ObjectName field is required.
l Fields (required):
The name of the fields of the related object that will be available on each record returned by the query.
l ParentRelationships (optional):
Another level of parent relationship, but this time, the relationship applies to the related object.
4www.coveo.com 30
Coveo Platform 7.0 | Salesforce Connector Guide
Example:
<Query>
<ObjectName>Task</ObjectName>
<Fields>
<string>Id</string>
<string>Subject</string>
<string>ActivityDate</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>What</RelationshipName>
<Fields>
<string>Name</string>
<string>Type</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
<PolymorphicRelationships>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Account</ObjectName>
<Fields>
<string>Name</string>
<string>AccountNumber</string>
</Fields>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Opportunity</ObjectName>
<Fields>
<string>Amount</string>
<string>TotalOpportunityQuantity</string>
</Fields>
</PolymorphicRelationship>
</PolymorphicRelationships>
</Query>
Important: The parent field is copied to the record. If a parent is modified, the indexed record is not updated.
Order (optional) CES 7.0.6607+ (April 2014)
One or more order restrictions that will be applied to the SOQL query used to retrieve Object records.
l Ascending (optional): The direction of the ordering. Default is true (ascending). Use false for
descending.
l NullsFirst (optional): Whether records with NULL values in the specified fields must be returned first or
last. Default is true.
l Fields (required): One or more fields to base the ordering on, in the specified field order.
4www.coveo.com 31
Coveo Platform 7.0 | Salesforce Connector Guide
Examples:
With the following configuration:
l Opportunity.Id shows that we can specify the query object name as the parent of the field.
l Account.Foo.Id is a field on the parent Foo, which is also a field of the parent Account of
Opportunity.
l What.Id is a field on the polymorphic parent What of Opportunity.
<Query>
<ObjectName>Opportunity</ObjectName>
<Fields>
<string>Id</string>
</Fields>
<Order>
<Ascending>true</Ascending>
<NullsFirst>false</NullsFirst>
<Fields>
<string>Name</string>
<string>Opportunity.Id</string>
<string>Account.Foo.Id</string>
<string>What.Id</string>
</Fields>
</Order>
</Query>
The generated query is: 
SELECT Id FROM Opportunity ORDER BY Name, Opportunity.Id, Account.Foo.Id, What.Id ASC NULLS LAST
Configuration including a child relationship:
<Query>
<ObjectName>Opportunity</ObjectName>
<Fields>
<string>Id</string>
</Fields>
<ChildRelationships>
<Query>
<ObjectName>Attachments</ObjectName>
<Fields>
<string>Id</string>
</Fields>
<Order>
<Fields>
<string>Name</string>
</Fields>
</Order>
</Query>
</ChildRelationships>
</Query>
The generated query is: 
SELECT Id, (SELECT Id FROM Attachments ORDER BY Name ASC NULLS FIRST) FROM Opportunity
4www.coveo.com 32
Coveo Platform 7.0 | Salesforce Connector Guide
6.3 XML Schema Definition
Note: CES 7.0.7183+ (November 2014) Each of the ObjectsToGet in your Salesforce sources are validated
against the XSD.
If it is not the case, a SALESFORCE_INVALID_CONFIGURATION error message appears in the CES console and
logs.
Use the following XML schema definition to validate your configuration file.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ArrayOfQuery" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Fields">
<xs:complexType>
<xs:sequence>
<xs:element name="string" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent msdata:ColumnName="string_Text" msdata:Ordinal="0">
<xs:extension base="xs:string">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ParentRelationships">
<xs:complexType>
<xs:sequence>
<xs:element name="ParentRelationship" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="RelationshipName" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="ParentRelationships" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="ParentRelationship" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="RelationshipName" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Query" type="QueryType" />
<xs:complexType name="QueryType">
<xs:sequence>
<xs:element name="ObjectName" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="GroupBy" type="xs:string" minOccurs="0" />
<xs:element name="Limit" type="xs:string" minOccurs="0" />
<xs:element name="Offset" type="xs:string" minOccurs="0" />
<xs:element name="FoundRecordsAreDeleted" type="xs:string" minOccurs="0" />
<xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" />
4www.coveo.com 33
Coveo Platform 7.0 | Salesforce Connector Guide
<xs:element name="Order" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Ascending" type="xs:boolean" minOccurs="0" maxOccurs="1" />
<xs:element name="NullsFirst" type="xs:boolean" minOccurs="0" maxOccurs="1" />
<xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Conditions" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="QueryCondition" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Field" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Operator" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Value" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element ref="ParentRelationships" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="PolymorphicRelationships" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="PolymorphicRelationship" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="RelationshipName" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="ObjectName" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="ParentRelationships" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ChildRelationships" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Query" type="QueryType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfQuery" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:sequence>
<xs:element ref="Query" minOccurs="0" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
What's Next?
Create your ObjectsToGet configuration file (see "Creating a Salesforce ObjectsToGet Configuration File" on page
35).
4www.coveo.com 34
Coveo Platform 7.0 | Salesforce Connector Guide
6.4 Creating a Salesforce ObjectsToGet Configuration File
You must create an ObjectsToGet configuration file and attach it to your Salesforce source to instruct the connector
which objects to retrieve from your Salesforce organization (see "Salesforce ObjectsToGet Configuration File" on
page 21).
Note: You must be familiar with standard and custom objects and fields used in your Salesforce organization to
be able to create a custom ObjectsToGet configuration file.
The content of the ObjectsToGet configuration file typically includes standard objects but most likely also the custom
objects that you want to index. You can create your ObjectsToGet configuration file by starting with provided
examples and customize it to suit your needs.
It is recommended to create separate ObjectsToGet configuration files with separate sources for the following types
of Salesforce content:
l Service Cloud standard and custom objects and fields
l Knowledge base articles
l CRM Content
To create a Salesforce ObjectsToGet configuration file
1. Refer to the most appropriate of the following topics to copy the content of the corresponding ObjectsToGet
XML configuration file example:
l Salesforce ObjectsToGet Configuration File Example for Standard Objects
l "Salesforce ObjectsToGet Configuration File Example for Knowledge Base" on page 48
l "Salesforce ObjectsToGet Configuration File Example for CRM Content " on page 51
2. Using a text editor:
a. Paste the content of the ObjectsToGet configuration file example.
b. Modify or remove standard objects and fields, or add custom objects and fields to match the needs of your
Salesforce organization (see "Salesforce ObjectsToGet Configuration File" on page 21).
c. Save your ObjectsToGet configuration file.
3. Validate your ObjectsToGet configuration file (see "XML Schema Definition" on page 33).
4. Using an administrator account, connect to the Coveo Master server, and copy your custom ObjectsToGet
configuration file to a location accessible to CES.
Example: On the Coveo Master server, for an ObjectsToGet configuration file for standard and custom objects
and fields, save the file as: 
D:CES7ConfigSalesforce_Basic_ObjectsToGet.xml.
4www.coveo.com 35
Coveo Platform 7.0 | Salesforce Connector Guide
You will specify the full path to this file when you configure your Salesforce source (see "ObjectsToGet File" on
page 107).
What's Next?
Create a mapping file to transfer the values of fields retrieved from Salesforce into CES fields (see "Creating a
Salesforce Mapping File" on page 69).
6.5 Salesforce ObjectsToGet Configuration File Example for Standard Objects
The ObjectsToGet configuration file example presented in this topic specifies to retrieve the following standard
Service Cloud objects and fields (including Chatter feed items) that are typically useful to index:
l Account
l Case
l Case Comment
l Contact
l Event
l Solution
l Task
l User
l Attachment
l Feed item (Chatter) CES 7.0.6196+ (November 2013)
l Feed comment (Chatter) CES 7.0.6196+ (November 2013)
The following code sample is the content of the ObjectsToGet configuration file example for standard Service Cloud
objects and fields.
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfQuery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Query>
<ObjectName>Account</ObjectName>
<Fields>
<string>Id</string>
<string>IsDeleted</string>
<string>Name</string>
<string>Type</string>
<string>BillingStreet</string>
<string>BillingCity</string>
<string>BillingState</string>
<string>BillingPostalCode</string>
<string>BillingCountry</string>
<string>Phone</string>
<string>Fax</string>
<string>AccountNumber</string>
<string>Website</string>
<string>Sic</string>
<string>Industry</string>
<string>AnnualRevenue</string>
4www.coveo.com 36
Coveo Platform 7.0 | Salesforce Connector Guide
<string>NumberOfEmployees</string>
<string>Ownership</string>
<string>TickerSymbol</string>
<string>Description</string>
<string>Rating</string>
<string>Site</string>
<string>CreatedDate</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>LastActivityDate</string>
<string>Jigsaw</string>
<string>JigsawCompanyId</string>
<string>AccountSource</string>
<string>SicDesc</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>MasterRecord</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Parent</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Owner</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
</Query>
<Query>
<ObjectName>Case</ObjectName>
<Fields>
<string>Id</string>
<string>IsDeleted</string>
<string>CaseNumber</string>
<string>SuppliedName</string>
<string>SuppliedEmail</string>
<string>SuppliedCompany</string>
<string>Type</string>
<string>Status</string>
<string>Reason</string>
<string>Origin</string>
<string>Subject</string>
<string>Priority</string>
<string>Description</string>
<string>IsClosed</string>
<string>ClosedDate</string>
<string>IsEscalated</string>
<string>CreatedDate</string>
<string>LastModifiedDate</string>
4www.coveo.com 37
Coveo Platform 7.0 | Salesforce Connector Guide
<string>SystemModstamp</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>Contact</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Account</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Asset</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Parent</RelationshipName>
<Fields>
<string>CaseNumber</string>
<string>Subject</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Owner</RelationshipName>
<Fields>
<string>Name</string>
<string>Type</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
<PolymorphicRelationships>
<PolymorphicRelationship>
<RelationshipName>Owner</RelationshipName>
<ObjectName>Group</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Owner</RelationshipName>
<ObjectName>User</ObjectName>
</PolymorphicRelationship>
</PolymorphicRelationships>
</Query>
<Query>
<ObjectName>CaseComment</ObjectName>
<Fields>
<string>Id</string>
<string>IsPublished</string>
<string>CommentBody</string>
<string>CreatedDate</string>
<string>SystemModstamp</string>
<string>LastModifiedDate</string>
<string>IsDeleted</string>
4www.coveo.com 38
Coveo Platform 7.0 | Salesforce Connector Guide
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>Parent</RelationshipName>
<Fields>
<string>CaseNumber</string>
<string>Subject</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
</Query>
<Query>
<ObjectName>Contact</ObjectName>
<Fields>
<string>Id</string>
<string>IsDeleted</string>
<string>LastName</string>
<string>FirstName</string>
<string>Salutation</string>
<string>Name</string>
<string>MailingStreet</string>
<string>MailingCity</string>
<string>MailingState</string>
<string>MailingPostalCode</string>
<string>MailingCountry</string>
<string>Phone</string>
<string>Fax</string>
<string>MobilePhone</string>
<string>HomePhone</string>
<string>AssistantPhone</string>
<string>Email</string>
<string>Title</string>
<string>Department</string>
<string>AssistantName</string>
<string>LeadSource</string>
<string>Birthdate</string>
<string>Description</string>
<string>CreatedDate</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>LastActivityDate</string>
<string>Jigsaw</string>
<string>JigsawContactId</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>MasterRecord</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Account</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
4www.coveo.com 39
Coveo Platform 7.0 | Salesforce Connector Guide
<ParentRelationship>
<RelationshipName>ReportsTo</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Owner</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
</Query>
<Query>
<ObjectName>Event</ObjectName>
<Fields>
<string>Id</string>
<string>Subject</string>
<string>Location</string>
<string>IsAllDayEvent</string>
<string>ActivityDateTime</string>
<string>ActivityDate</string>
<string>DurationInMinutes</string>
<string>StartDateTime</string>
<string>EndDateTime</string>
<string>Description</string>
<string>IsPrivate</string>
<string>ShowAs</string>
<string>IsDeleted</string>
<string>IsChild</string>
<string>IsGroupEvent</string>
<string>GroupEventType</string>
<string>CreatedDate</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>IsArchived</string>
<string>IsRecurrence</string>
<string>RecurrenceStartDateTime</string>
<string>RecurrenceEndDateOnly</string>
<string>RecurrenceTimeZoneSidKey</string>
<string>RecurrenceType</string>
<string>RecurrenceInterval</string>
<string>RecurrenceDayOfWeekMask</string>
<string>RecurrenceDayOfMonth</string>
<string>RecurrenceInstance</string>
<string>RecurrenceMonthOfYear</string>
<string>ReminderDateTime</string>
<string>IsReminderSet</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>Who</RelationshipName>
<Fields>
<string>Name</string>
<string>Type</string>
</Fields>
4www.coveo.com 40
Coveo Platform 7.0 | Salesforce Connector Guide
</ParentRelationship>
<ParentRelationship>
<RelationshipName>What</RelationshipName>
<Fields>
<string>Name</string>
<string>Type</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Account</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Owner</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
<PolymorphicRelationships>
<PolymorphicRelationship>
<RelationshipName>Who</RelationshipName>
<ObjectName>Contact</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Who</RelationshipName>
<ObjectName>Lead</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Account</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Asset</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Campaign</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Case</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Contract</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Magic_Item__c</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Opportunity</ObjectName>
4www.coveo.com 41
Coveo Platform 7.0 | Salesforce Connector Guide
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Product2</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Solution</ObjectName>
</PolymorphicRelationship>
</PolymorphicRelationships>
</Query>
<Query>
<ObjectName>Solution</ObjectName>
<Fields>
<string>Id</string>
<string>IsDeleted</string>
<string>SolutionNumber</string>
<string>SolutionName</string>
<string>IsPublished</string>
<string>IsPublishedInPublicKb</string>
<string>Status</string>
<string>IsReviewed</string>
<string>SolutionNote</string>
<string>CreatedDate</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>TimesUsed</string>
<string>IsHtml</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>Owner</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
</Query>
<Query>
<ObjectName>Task</ObjectName>
<Fields>
<string>Id</string>
<string>Subject</string>
<string>ActivityDate</string>
<string>Status</string>
<string>Priority</string>
<string>Description</string>
<string>IsDeleted</string>
<string>IsClosed</string>
<string>CreatedDate</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>IsArchived</string>
<string>CallType</string>
<string>CallDisposition</string>
<string>IsReminderSet</string>
<string>IsRecurrence</string>
4www.coveo.com 42
Coveo Platform 7.0 | Salesforce Connector Guide
<string>RecurrenceStartDateOnly</string>
<string>RecurrenceEndDateOnly</string>
<string>RecurrenceTimeZoneSidKey</string>
<string>RecurrenceType</string>
<string>RecurrenceInterval</string>
<string>RecurrenceDayOfWeekMask</string>
<string>RecurrenceDayOfMonth</string>
<string>RecurrenceInstance</string>
<string>RecurrenceMonthOfYear</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>Who</RelationshipName>
<Fields>
<string>Name</string>
<string>Type</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>What</RelationshipName>
<Fields>
<string>Name</string>
<string>Type</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Owner</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Account</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
<PolymorphicRelationships>
<PolymorphicRelationship>
<RelationshipName>Who</RelationshipName>
<ObjectName>Contact</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Who</RelationshipName>
<ObjectName>Lead</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Account</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Asset</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
4www.coveo.com 43
Coveo Platform 7.0 | Salesforce Connector Guide
<ObjectName>Campaign</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Case</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Contract</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Magic_Item__c</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Opportunity</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Product2</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>What</RelationshipName>
<ObjectName>Solution</ObjectName>
</PolymorphicRelationship>
</PolymorphicRelationships>
</Query>
<Query>
<ObjectName>User</ObjectName>
<Fields>
<string>Id</string>
<string>Username</string>
<string>LastName</string>
<string>FirstName</string>
<string>Name</string>
<string>CompanyName</string>
<string>Division</string>
<string>Department</string>
<string>Title</string>
<string>Street</string>
<string>City</string>
<string>State</string>
<string>PostalCode</string>
<string>Country</string>
<string>Email</string>
<string>Phone</string>
<string>Fax</string>
<string>MobilePhone</string>
<string>Alias</string>
<string>CommunityNickname</string>
<string>IsActive</string>
<string>TimeZoneSidKey</string>
<string>LocaleSidKey</string>
<string>ReceivesInfoEmails</string>
<string>ReceivesAdminInfoEmails</string>
<string>EmailEncodingKey</string>
<string>UserType</string>
<string>LanguageLocaleKey</string>
<string>EmployeeNumber</string>
<string>CreatedDate</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>UserPermissionsMarketingUser</string>
<string>UserPermissionsOfflineUser</string>
<string>UserPermissionsCallCenterAutoLogin</string>
<string>UserPermissionsMobileUser</string>
<string>UserPermissionsSFContentUser</string>
<string>UserPermissionsKnowledgeUser</string>
4www.coveo.com 44
Coveo Platform 7.0 | Salesforce Connector Guide
<string>UserPermissionsInteractionUser</string>
<string>UserPermissionsSupportUser</string>
<string>UserPermissionsSiteforceContributorUser</string>
<string>UserPermissionsSiteforcePublisherUser</string>
<string>UserPermissionsChatterAnswersUser</string>
<string>ForecastEnabled</string>
<string>UserPreferencesActivityRemindersPopup</string>
<string>UserPreferencesEventRemindersCheckboxDefault</string>
<string>UserPreferencesTaskRemindersCheckboxDefault</string>
<string>UserPreferencesReminderSoundOff</string>
<string>UserPreferencesDisableAllFeedsEmail</string>
<string>UserPreferencesDisableFollowersEmail</string>
<string>UserPreferencesDisableProfilePostEmail</string>
<string>UserPreferencesDisableChangeCommentEmail</string>
<string>UserPreferencesDisableLaterCommentEmail</string>
<string>UserPreferencesDisProfPostCommentEmail</string>
<string>UserPreferencesContentNoEmail</string>
<string>UserPreferencesContentEmailAsAndWhen</string>
<string>UserPreferencesApexPagesDeveloperMode</string>
<string>UserPreferencesHideCSNGetChatterMobileTask</string>
<string>UserPreferencesDisableMentionsPostEmail</string>
<string>UserPreferencesDisMentionsCommentEmail</string>
<string>UserPreferencesHideCSNDesktopTask</string>
<string>UserPreferencesDisCommentAfterLikeEmail</string>
<string>UserPreferencesDisableLikeEmail</string>
<string>UserPreferencesDisableMessageEmail</string>
<string>UserPreferencesOptOutOfTouch</string>
<string>UserPreferencesDisableBookmarkEmail</string>
<string>UserPreferencesDisableSharePostEmail</string>
<string>UserPreferencesEnableAutoSubForFeeds</string>
<string>UserPreferencesDisableFileShareNotificationsForApi</string>
<string>Extension</string>
<string>FederationIdentifier</string>
<string>AboutMe</string>
<string>FullPhotoUrl</string>
<string>SmallPhotoUrl</string>
<string>DigestFrequency</string>
<string>DefaultGroupNotificationFrequency</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>UserRole</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Profile</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Manager</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
4www.coveo.com 45
Coveo Platform 7.0 | Salesforce Connector Guide
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Contact</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
</Query>
<Query>
<ObjectName>Attachment</ObjectName>
<Fields>
<string>Id</string>
<string>IsDeleted</string>
<string>Name</string>
<string>IsPrivate</string>
<string>ContentType</string>
<string>BodyLength</string>
<string>Body</string>
<string>CreatedDate</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>Description</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>Parent</RelationshipName>
<Fields>
<string>Name</string>
<string>Type</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>Owner</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
<PolymorphicRelationships>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Account</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Asset</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Campaign</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Case</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
4www.coveo.com 46
Coveo Platform 7.0 | Salesforce Connector Guide
<RelationshipName>Parent</RelationshipName>
<ObjectName>Contact</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Contract</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>EmailTemplate</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Event</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Lead</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Magic_Item__c</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Opportunity</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Product2</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Solution</ObjectName>
</PolymorphicRelationship>
<PolymorphicRelationship>
<RelationshipName>Parent</RelationshipName>
<ObjectName>Task</ObjectName>
</PolymorphicRelationship>
</PolymorphicRelationships>
</Query>
<Query>
<ObjectName>FeedItem</ObjectName>
<Fields>
<string>Id</string>
<string>Type</string>
<string>Body</string>
<string>CreatedDate</string>
<string>IsDeleted</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>CommentCount</string>
<string>LikeCount</string>
<string>LinkUrl</string>
<string>ContentData</string>
<string>ContentFileName</string>
<string>ContentDescription</string>
<string>ContentType</string>
<string>ContentSize</string>
</Fields>
</Query>
<Query>
<ObjectName>FeedComment</ObjectName>
<Fields>
<string>Id</string>
<string>FeedItemId</string>
<string>CreatedDate</string>
<string>CommentBody</string>
<string>IsDeleted</string>
4www.coveo.com 47
Coveo Platform 7.0 | Salesforce Connector Guide
<string>CommentType</string>
<string>ParentId</string>
<string>RelatedRecordId</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
<string>Type</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>InsertedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
<PolymorphicRelationships>
<PolymorphicRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<ObjectName>User</ObjectName>
</PolymorphicRelationship>
</PolymorphicRelationships>
</Query>
</ArrayOfQuery>
What's Next?
Create a mapping file for fields from obtained objects (see "Salesforce Mapping File Example for Standard Objects"
on page 70).
6.6 Salesforce ObjectsToGet Configuration File Example for Knowledge Base
Salesforce Knowledge Base content correspond to non-standard objects and fields. When your Salesforce
organization contains Knowledge Base articles and you want to index their content, you must include specific
queries to your custom ObjectsToGet configuration file.
The ObjectsToGet configuration file example presented in this topic specifies to retrieve two arbitrary named
Knowledge Base objects:
l MyKBArticleType1
l MyKBArticleType2
Note: The Salesforce connector cannot index permissions of Knowledge Base articles like it can for other objects.
It is therefore recommended to create a separate ObjectsToGet configuration file and source for Knowledge Base
articles.
The following XML code is an ObjectsToGet configuration file example for Knowledge Base articles.
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfQuery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Query>
<ObjectName>MyKBArticleType1__ka</ObjectName>
<Fields>
<string>CaseAssociationCount</string>
<string>LastModifiedDate</string>
<string>ArticleNumber</string>
4www.coveo.com 48
Coveo Platform 7.0 | Salesforce Connector Guide
<string>LastPublishedDate</string>
<string>FirstPublishedDate</string>
<string>SystemModstamp</string>
<string>ArchivedDate</string>
<string>CreatedDate</string>
<string>IsDeleted</string>
<string>Id</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
<ChildRelationships>
<Query>
<ObjectName>CaseArticles</ObjectName>
<Fields>
<string>CaseId</string>
</Fields>
</Query>
</ChildRelationships>
</Query>
<Query>
<ObjectName>MyKBArticleType1__kav</ObjectName>
<Fields>
<string>ArchivedDate</string>
<string>IsVisibleInPrm</string>
<string>Undecipherable_Content__c</string>
<string>IsVisibleInApp</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>IsVisibleInPkb</string>
<string>PublishStatus</string>
<string>IsDeleted</string>
<string>Id</string>
<string>IsLatestVersion</string>
<string>CreatedDate</string>
<string>Title</string>
<string>LastPublishedDate</string>
<string>Summary</string>
<string>FirstPublishedDate</string>
<string>ArticleNumber</string>
<string>Language</string>
<string>UrlName</string>
<string>VersionNumber</string>
<string>IsVisibleInCsp</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
4www.coveo.com 49
Coveo Platform 7.0 | Salesforce Connector Guide
</ParentRelationships>
</Query>
<Query>
<ObjectName>MyKBArticleType2__ka</ObjectName>
<Fields>
<string>CaseAssociationCount</string>
<string>LastModifiedDate</string>
<string>ArticleNumber</string>
<string>LastPublishedDate</string>
<string>FirstPublishedDate</string>
<string>SystemModstamp</string>
<string>ArchivedDate</string>
<string>CreatedDate</string>
<string>IsDeleted</string>
<string>Id</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
<ParentRelationship>
<RelationshipName>CreatedBy</RelationshipName>
<Fields>
<string>Name</string>
</Fields>
</ParentRelationship>
</ParentRelationships>
<ChildRelationships>
<Query>
<ObjectName>CaseArticles</ObjectName>
<Fields>
<string>CaseId</string>
</Fields>
</Query>
</ChildRelationships>
</Query>
<Query>
<ObjectName>MyKBArticleType2__kav</ObjectName>
<Fields>
<string>ArchivedDate</string>
<string>IsVisibleInPrm</string>
<string>IsVisibleInApp</string>
<string>LastModifiedDate</string>
<string>SystemModstamp</string>
<string>IsVisibleInPkb</string>
<string>PublishStatus</string>
<string>IsDeleted</string>
<string>Id</string>
<string>IsLatestVersion</string>
<string>CreatedDate</string>
<string>Title</string>
<string>LastPublishedDate</string>
<string>Summary</string>
<string>FirstPublishedDate</string>
<string>ArticleNumber</string>
<string>Language</string>
<string>UrlName</string>
<string>VersionNumber</string>
<string>IsVisibleInCsp</string>
<string>Recipe__c</string>
</Fields>
<ParentRelationships>
<ParentRelationship>
<RelationshipName>LastModifiedBy</RelationshipName>
<Fields>
<string>Name</string>
4www.coveo.com 50
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide
Ces70 salesforce2 connectorguide

More Related Content

What's hot

8.1.6 newsecurity features
8.1.6 newsecurity features8.1.6 newsecurity features
8.1.6 newsecurity featuresAnil Pandey
 
Using oracle-erp-cloud-adapter-oracle-integration
Using oracle-erp-cloud-adapter-oracle-integrationUsing oracle-erp-cloud-adapter-oracle-integration
Using oracle-erp-cloud-adapter-oracle-integrationSwapnil Khoke
 
IIS 7.0 for Apache Administrators
IIS 7.0 for Apache AdministratorsIIS 7.0 for Apache Administrators
IIS 7.0 for Apache Administratorsbutest
 
The Enterprise File Fabric for Memset
The Enterprise File Fabric for MemsetThe Enterprise File Fabric for Memset
The Enterprise File Fabric for MemsetHybrid Cloud
 
SharePoint 2010, Claims-Based Identity, Facebook, and the Cloud
SharePoint 2010,Claims-Based Identity, Facebook, and the CloudSharePoint 2010,Claims-Based Identity, Facebook, and the Cloud
SharePoint 2010, Claims-Based Identity, Facebook, and the CloudDanny Jessee
 
Biz Talk Adapter Pack 2 0 Oracle Ebs Adapter Data Sheet
Biz Talk Adapter Pack 2 0 Oracle Ebs Adapter Data SheetBiz Talk Adapter Pack 2 0 Oracle Ebs Adapter Data Sheet
Biz Talk Adapter Pack 2 0 Oracle Ebs Adapter Data Sheetkaushiksin
 
Moodle plugininstallguide v1
Moodle plugininstallguide v1Moodle plugininstallguide v1
Moodle plugininstallguide v1Heo Gòm
 
Internet Explorer 8 Deployment - IE8 Firestarter
Internet Explorer 8 Deployment - IE8 FirestarterInternet Explorer 8 Deployment - IE8 Firestarter
Internet Explorer 8 Deployment - IE8 FirestarterMithun T. Dhar
 
Top 5 Share Point 2010 Questions Answered
Top 5 Share Point 2010 Questions AnsweredTop 5 Share Point 2010 Questions Answered
Top 5 Share Point 2010 Questions Answeredimason Inc.
 
Planning for clients and devices lync server 2010 (rc)
Planning for clients and devices lync server 2010 (rc)Planning for clients and devices lync server 2010 (rc)
Planning for clients and devices lync server 2010 (rc)Daniel Ullmark
 
MySQL Connector/J Feature Review and How to Upgrade from Connector/J 5.1
MySQL Connector/J Feature Review and How to Upgrade from Connector/J 5.1MySQL Connector/J Feature Review and How to Upgrade from Connector/J 5.1
MySQL Connector/J Feature Review and How to Upgrade from Connector/J 5.1Filipe Silva
 
The Enterprise File Fabric for Vecima MediaScaleX
The Enterprise File Fabric for Vecima MediaScaleXThe Enterprise File Fabric for Vecima MediaScaleX
The Enterprise File Fabric for Vecima MediaScaleXHybrid Cloud
 

What's hot (14)

AUC Tech-SP 2010
AUC Tech-SP 2010AUC Tech-SP 2010
AUC Tech-SP 2010
 
8.1.6 newsecurity features
8.1.6 newsecurity features8.1.6 newsecurity features
8.1.6 newsecurity features
 
Using oracle-erp-cloud-adapter-oracle-integration
Using oracle-erp-cloud-adapter-oracle-integrationUsing oracle-erp-cloud-adapter-oracle-integration
Using oracle-erp-cloud-adapter-oracle-integration
 
1206 alcott pdf
1206 alcott pdf1206 alcott pdf
1206 alcott pdf
 
IIS 7.0 for Apache Administrators
IIS 7.0 for Apache AdministratorsIIS 7.0 for Apache Administrators
IIS 7.0 for Apache Administrators
 
The Enterprise File Fabric for Memset
The Enterprise File Fabric for MemsetThe Enterprise File Fabric for Memset
The Enterprise File Fabric for Memset
 
SharePoint 2010, Claims-Based Identity, Facebook, and the Cloud
SharePoint 2010,Claims-Based Identity, Facebook, and the CloudSharePoint 2010,Claims-Based Identity, Facebook, and the Cloud
SharePoint 2010, Claims-Based Identity, Facebook, and the Cloud
 
Biz Talk Adapter Pack 2 0 Oracle Ebs Adapter Data Sheet
Biz Talk Adapter Pack 2 0 Oracle Ebs Adapter Data SheetBiz Talk Adapter Pack 2 0 Oracle Ebs Adapter Data Sheet
Biz Talk Adapter Pack 2 0 Oracle Ebs Adapter Data Sheet
 
Moodle plugininstallguide v1
Moodle plugininstallguide v1Moodle plugininstallguide v1
Moodle plugininstallguide v1
 
Internet Explorer 8 Deployment - IE8 Firestarter
Internet Explorer 8 Deployment - IE8 FirestarterInternet Explorer 8 Deployment - IE8 Firestarter
Internet Explorer 8 Deployment - IE8 Firestarter
 
Top 5 Share Point 2010 Questions Answered
Top 5 Share Point 2010 Questions AnsweredTop 5 Share Point 2010 Questions Answered
Top 5 Share Point 2010 Questions Answered
 
Planning for clients and devices lync server 2010 (rc)
Planning for clients and devices lync server 2010 (rc)Planning for clients and devices lync server 2010 (rc)
Planning for clients and devices lync server 2010 (rc)
 
MySQL Connector/J Feature Review and How to Upgrade from Connector/J 5.1
MySQL Connector/J Feature Review and How to Upgrade from Connector/J 5.1MySQL Connector/J Feature Review and How to Upgrade from Connector/J 5.1
MySQL Connector/J Feature Review and How to Upgrade from Connector/J 5.1
 
The Enterprise File Fabric for Vecima MediaScaleX
The Enterprise File Fabric for Vecima MediaScaleXThe Enterprise File Fabric for Vecima MediaScaleX
The Enterprise File Fabric for Vecima MediaScaleX
 

Similar to Ces70 salesforce2 connectorguide

Summer '16 Realease notes
Summer '16 Realease notesSummer '16 Realease notes
Summer '16 Realease notesaggopal1011
 
Alfresco for Salesforce
Alfresco for SalesforceAlfresco for Salesforce
Alfresco for SalesforceJared Ottley
 
CSE681 – Software Modeling and Analysis Fall 2013 Project .docx
CSE681 – Software Modeling and Analysis Fall 2013 Project .docxCSE681 – Software Modeling and Analysis Fall 2013 Project .docx
CSE681 – Software Modeling and Analysis Fall 2013 Project .docxfaithxdunce63732
 
bfx and studio server - Bluebeam eXtreme Conference 2014
bfx and studio server - Bluebeam eXtreme Conference 2014bfx and studio server - Bluebeam eXtreme Conference 2014
bfx and studio server - Bluebeam eXtreme Conference 2014bluebeamslides
 
ESM Asset Model FlexConnector Developer's Guide for ESM 6.8c
ESM Asset Model FlexConnector Developer's Guide for ESM 6.8cESM Asset Model FlexConnector Developer's Guide for ESM 6.8c
ESM Asset Model FlexConnector Developer's Guide for ESM 6.8cProtect724v3
 
REST API: Do More in the Feed with Action Links
REST API: Do More in the Feed with Action LinksREST API: Do More in the Feed with Action Links
REST API: Do More in the Feed with Action LinksSalesforce Developers
 
Paris Salesforce Developer Group - 16 09 2014 - Summer '14
Paris Salesforce Developer Group - 16 09 2014 - Summer '14Paris Salesforce Developer Group - 16 09 2014 - Summer '14
Paris Salesforce Developer Group - 16 09 2014 - Summer '14Paris Salesforce Developer Group
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfJeff Smith
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfJeff Smith
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfJeff Smith
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfJeff Smith
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfJeff Smith
 
HP ArcSight Asset Model Import FlexConnector Developer's Guide
HP ArcSight Asset Model Import FlexConnector Developer's GuideHP ArcSight Asset Model Import FlexConnector Developer's Guide
HP ArcSight Asset Model Import FlexConnector Developer's GuideProtect724tk
 
Salesforce spring 14 developer overview
Salesforce spring 14 developer overviewSalesforce spring 14 developer overview
Salesforce spring 14 developer overviewSimon Lawrence
 
Asset modelimportconn devguide_5.2.1.6190.0
Asset modelimportconn devguide_5.2.1.6190.0Asset modelimportconn devguide_5.2.1.6190.0
Asset modelimportconn devguide_5.2.1.6190.0Protect724
 
Asset modelimportconn devguide_5.2.1.6190.0
Asset modelimportconn devguide_5.2.1.6190.0Asset modelimportconn devguide_5.2.1.6190.0
Asset modelimportconn devguide_5.2.1.6190.0Protect724
 

Similar to Ces70 salesforce2 connectorguide (20)

Winter 15 : Salesforce
Winter 15 : SalesforceWinter 15 : Salesforce
Winter 15 : Salesforce
 
Summer '16 Realease notes
Summer '16 Realease notesSummer '16 Realease notes
Summer '16 Realease notes
 
SAP BusinessObjects Security
SAP BusinessObjects SecuritySAP BusinessObjects Security
SAP BusinessObjects Security
 
Spring 15
Spring 15Spring 15
Spring 15
 
Alfresco for Salesforce
Alfresco for SalesforceAlfresco for Salesforce
Alfresco for Salesforce
 
CSE681 – Software Modeling and Analysis Fall 2013 Project .docx
CSE681 – Software Modeling and Analysis Fall 2013 Project .docxCSE681 – Software Modeling and Analysis Fall 2013 Project .docx
CSE681 – Software Modeling and Analysis Fall 2013 Project .docx
 
bfx and studio server - Bluebeam eXtreme Conference 2014
bfx and studio server - Bluebeam eXtreme Conference 2014bfx and studio server - Bluebeam eXtreme Conference 2014
bfx and studio server - Bluebeam eXtreme Conference 2014
 
ESM Asset Model FlexConnector Developer's Guide for ESM 6.8c
ESM Asset Model FlexConnector Developer's Guide for ESM 6.8cESM Asset Model FlexConnector Developer's Guide for ESM 6.8c
ESM Asset Model FlexConnector Developer's Guide for ESM 6.8c
 
REST API: Do More in the Feed with Action Links
REST API: Do More in the Feed with Action LinksREST API: Do More in the Feed with Action Links
REST API: Do More in the Feed with Action Links
 
Paris Salesforce Developer Group - 16 09 2014 - Summer '14
Paris Salesforce Developer Group - 16 09 2014 - Summer '14Paris Salesforce Developer Group - 16 09 2014 - Summer '14
Paris Salesforce Developer Group - 16 09 2014 - Summer '14
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdf
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdf
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdf
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdf
 
Elements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdfElements_Architecture_and_Technology.pdf
Elements_Architecture_and_Technology.pdf
 
Soap toolkits
Soap toolkitsSoap toolkits
Soap toolkits
 
HP ArcSight Asset Model Import FlexConnector Developer's Guide
HP ArcSight Asset Model Import FlexConnector Developer's GuideHP ArcSight Asset Model Import FlexConnector Developer's Guide
HP ArcSight Asset Model Import FlexConnector Developer's Guide
 
Salesforce spring 14 developer overview
Salesforce spring 14 developer overviewSalesforce spring 14 developer overview
Salesforce spring 14 developer overview
 
Asset modelimportconn devguide_5.2.1.6190.0
Asset modelimportconn devguide_5.2.1.6190.0Asset modelimportconn devguide_5.2.1.6190.0
Asset modelimportconn devguide_5.2.1.6190.0
 
Asset modelimportconn devguide_5.2.1.6190.0
Asset modelimportconn devguide_5.2.1.6190.0Asset modelimportconn devguide_5.2.1.6190.0
Asset modelimportconn devguide_5.2.1.6190.0
 

Recently uploaded

SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 

Recently uploaded (20)

SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 

Ces70 salesforce2 connectorguide

  • 2. Coveo Platform 7.0 | Salesforce Connector Guide Notice The content in this document represents the current view of Coveo as of the date of publication. Because Coveo continually responds to changing market conditions, information in this document is subject to change without notice. For the latest documentation, visit our website at www.coveo.com. © Coveo Solutions Inc., 2014 Coveo is a trademark of Coveo Solutions Inc. This document is protected by intellectual property laws and is subject to all restrictions specified in the Coveo Customer Agreement. Document part number: PM-131004-EN Publication date: 5/14/2018 4www.coveo.com ii
  • 3. Coveo Platform 7.0 | Salesforce Connector Guide Table of Contents 1. Salesforce Connector 1 1.1 Advantages Relative to the Legacy Connector 1 1.2 Connector Features Summary 1 1.3 Features 2 2. Salesforce Connector Deployment Overview 8 3. Salesforce Connector Requirements 10 4. Creating a Salesforce User Identity 11 4.1 Creating a Dedicated Salesforce Crawling Account 12 4.2 Getting the Security Token for Your Salesforce Account 14 5. Getting Salesforce Client_ID and Client_Secret Values 16 6. Salesforce ObjectsToGet Configuration File 21 6.1 Salesforce Object Definition 21 6.2 Configuration File Elements 22 6.3 XML Schema Definition 33 6.4 Creating a Salesforce ObjectsToGet Configuration File 35 6.5 Salesforce ObjectsToGet Configuration File Example for Standard Objects 36 6.6 Salesforce ObjectsToGet Configuration File Example for Knowledge Base 48 6.7 Salesforce ObjectsToGet Configuration File Example for CRM Content 51 6.8 Salesforce ObjectsToGet Configuration File Example for Chatter Objects 54 6.9 Salesforce Connector Configuration Recipes 57 6.9.1 Indexing all Knowledge Base Versions and States 57 6.9.2 Excluding Archived Knowledge Base Articles 60 6.9.3 Indexing Knowledge Base Attachments 61 6.9.4 Fetching Records With Parent Relationships That Must Be Incrementally Updated 61 6.9.5 Fetching Child Relationship to Use for Folding 63 6.9.6 Fetch Child Relationship to Use to Increase or Reduce Results From Queries 63 6.9.7 Minimizing API Calls and Object Description Prefetching 64 6.9.8 Fetching Records Faster Using the Turbo Mode Runner 64 6.9.9 Reducing the Metadata Package Size by Scoping Parents of ContentVersion and Attachment Objects 66 4www.coveo.com iii
  • 4. Coveo Platform 7.0 | Salesforce Connector Guide 6.9.10 Choosing the Optimal Record Modification Date Field 67 6.9.11 Removing Leading Zeroes of a Field 67 6.9.12 Using the Currency Field Converter 67 6.9.13 Using the FiscalYearResolver 67 6.9.14 Fixing the Feed Tracking Error 67 6.9.15 Indexing More Than the Built-in FeedItem Types 68 7. Creating a Salesforce Mapping File 69 7.1 Salesforce Mapping File Example for Standard Objects 70 7.2 Salesforce Mapping File Example for Knowledge Base 88 7.3 Salesforce Mapping File Example for CRM Content 92 7.4 Salesforce Mapping File Example for Chatter Objects 96 8. Configuring a Salesforce Security Provider 98 8.1 Configuring an Email Security Provider 100 8.2 Configuring an Active Directory Security Provider 102 9. Configuring and Indexing a Salesforce Source 105 9.1 Modifying Hidden Salesforce Source Parameters 111 9.2 Adding an Explicit Connector Parameter 114 10. Troubleshooting Salesforce Connector Issues 117 10.1 API Security Token Required 117 10.2 Expired Access/Refresh Token 117 10.3 Missing ionic.zip File 117 11. Refreshing Security Caches 118 4www.coveo.com iv
  • 5. Coveo Platform 7.0 | Salesforce Connector Guide 1. Salesforce Connector CES 7.0.5785+ (August 2013) The on-premises Salesforce connector is part of the Coveo for Salesforce license and is therefore available only with Coveo for Salesforce (see Coveo for Salesforce). The Coveo Salesforce connector allows you to crawl Salesforce content and bring it into the unified index, making it easily searchable by end-users. Important: Salesforce no longer supports TLS 1.0 which is used by the Coveo connector for Salesforce in CES 7.0.8047– (December to retrieve Salesforce content and content updates. In the CES Console, you will get errors such as: Salesforce2 Error: Could not establish secure channel for SSL/TLS with authority 'domain.salesforce.com' You must thus upgrade CES to CES 7.0.8225+ (March 2016). Otherwise, you will no longer be able to update your Salesforce source content. 1.1 Advantages Relative to the Legacy Connector This second generation Salesforce connector offers the following advantages over the Salesforce Legacy connector: l Indexing of Salesforce permissions rather than applying the same permission on all source items (see "Indexed Salesforce Security" on page 2) l Improved performance and reduced API calls l Indexing of Knowledge Base articles and CRM content files l Takes advantage of recent Salesforce API versions 1.2 Connector Features Summary Features Supported Additional information Salesforce versions API 30 to API 34 Searchable content types Service Cloud standard/custom objects and fields, Chatter feed items and files, multilingual Knowledge base articles and attachments, and CRM content (binary files such as PDF). 4www.coveo.com 1
  • 6. Coveo Platform 7.0 | Salesforce Connector Guide Features Supported Additional information Content update Incremental refresh Full refresh or rebuild needed to retrieve: l Attached and detached KB articles from cases l Deleted KB articles. l Not replicable deleted objects such as deleted ContentVersion (CRM Content and Chatter files) attachments and other items. l Changes that occurred more than 30 days ago since the last refresh (a scheduled refresh triggers a rescan). l Permission changes for a profile, permission set, object sharing, or object security level. Full refresh Rebuild Document-level security Does not support the following security aspects: Apex managed sharing, IP based permissions, field level security, shared personal groups (not reported by the Salesforce API), frozen users, and KB articles item permissions (see Unsupported Security Aspects). 1.3 Features Indexed Salesforce Content The connector can index the following Salesforce content: l Service Cloud standard/custom objects and fields l Multilingual Knowledge base articles l Chatter feed items and files [more] l CRM Content (binary files such as PDF) l Sharing permissions l Sandbox and production environments l Inactive users l User visibility Note: The Salesforce connector does not support to rebuild only one KB or Chatter document or one whole object as it appears to be possible from the index browser. Indexed Salesforce Security The connector can index the permissions of each Salesforce item allowing the index to only return Salesforce search results that the user performing the query has the permissions to see. The Coveo index replicates the Salesforce security model for: 4www.coveo.com 2
  • 7. Coveo Platform 7.0 | Salesforce Connector Guide l View All permissions The Salesforce connector fully supports all View All permissions given through a user profile, more explicitly View All Data which applies to every object, View All User which allows a view all on the user object, and View All on specific objects such Accounts, Cases, Leads, and Contact. Note: As Salesforce does not support View All Data on ContentVersion, the permission is replicated in the connector. l Sharing permissions An administrator can secure private objects with the owner, collaboration group, group, user, bosses of a given user, subordinates of a given user, or Community (also called Network) sharing permission types. Note: CES 7.0.8225+ (March 2016) Portal Super User permissions are supported by the connector. l Profile associated to the user The profile specifies standard and custom object permissions for users associated to this profile. Note: Any user which is granted Read access for an object by his profile is entitled to search for records of the given type. l Organization-wide defaults sharing settings These settings specify the level of access your users have to each other's data. Note: CES 7.0.8388+ (June 2016) The external sharing model (organization-wide defaults) is supported by the connector. l Shared content A user can share private content with specific users or groups. Note: File sharing settings applied to Chatter files and CRM Content documents are also supported. File sharing settings are not the same as the sharing settings for private objects. l CRM Content CRM Content users have access to CRM Content Documents when they are entitled to read such documents in the library to which the documents belong. l Chatter Chatter posts and comments inherit the permissions of the record onto which they are posted, no matter if that record is public, private, a group or a user. Note: Public and private CollaborationGroups are supported. l Communities Sharing sets are supported in Communities. 4www.coveo.com 3
  • 8. Coveo Platform 7.0 | Salesforce Connector Guide l Role hierarchy within the organization With a role hierarchy, private documents are visible by the owner, but also by all parents of the owner in the hierarchy. l Permission sets Permission sets given to individual users can extend (not restrict) their permissions beyond what is specified in their profile. l License type A user license entitles a user to different functionality within Salesforce and determines which profiles and permission sets are available to the user, so the Coveo index indirectly replicates user license type permissions by indexing permissions from profiles and permission sets. 4www.coveo.com 4
  • 9. Coveo Platform 7.0 | Salesforce Connector Guide Note: The connector does not support the following security aspects:  l Apex managed sharing l IP based permissions The Coveo connector cannot index restrictions on login IP addresses or hours configured in Salesforce. The consequence is that your Salesforce users can access Coveo search interfaces and review Salesforce content from any IP address at any time. l Field level security (FLS) For Enterprise, Unlimited, and Developer Salesforce editions, visibility of individual fields can be granted or denied to users or groups to fine-tune the access control in a permission set or a profile. The Coveo connector cannot index these permissions. The consequence is that a user that is denied access to a field could see the content of this field in Coveo search results. Note however that this is also the case for Salesforce search results (see the Salesforce document Field-Level Security Overview). l Permission changes replicated with re-indexing, not with incremental refreshes When permissions change in Salesforce for a profile, permission set, object sharing, or object security level (Public versus Private), the changes are not replicated in the index on the next incremental refresh. You must refresh the source to capture permission changes. l Shared personal groups A user can share content with a personal group. These sharing permissions cannot be indexed because they are currently not reported by the Salesforce API. The consequence is that members of the personal group will not see the shared content in Coveo Organization results. This limitation is therefore not a security hole. l Frozen users are not supported The user that are frozen using the Freeze button are not denied access to the search (see Freezing User Accounts). l Knowledge Base (KB) item permissions: In Salesforce, you can map User Roles to KB data categories (e.g.: members of the Technical Agent role can only see KB articles under the Technical data category). This mapping information is not available from the Salesforce API and therefore cannot be indexed. Similarly, the permissions given through permission sets to grant only some users access to only one Article Type cannot be retrieved through the Salesforce API. Consequently, in search results, all users can see all KB articles under all data categories. l When the organization-wide default is set to Controlled by Parent, a maximum master-detail relationship depth of two levels is supported (see Sharing Default Access Settings). Example: When you index a subdetail object, the detail parents are correctly determined but the master parents are considered public because there are three levels (master-detail-subdetail). 4www.coveo.com 5
  • 10. Coveo Platform 7.0 | Salesforce Connector Guide Incremental Refresh The incremental refresh feature refreshes the content of the index based on the modification date of the objects in the Salesforce environment. If an item is modified, the incremental refresh feature refreshes the item automatically. Notes: l The incremental refresh feature limitations:  o Does not work when the last incremental refresh was performed more than 30 days ago. This will trigger a full refresh of the content. o Not supported for all not replicateable deleted objects such as deleted ContentVersion (CRM Content and Chatter files) attachments and other items. o CES 7.0.7914– (October 2015) A source full refresh or rebuild is needed to capture the deletion of knowledge base articles and the attachment (or the contrary) of articles on a case. l CES 7.0.8047+ (December 2015) After you upgrade CES, it is recommended to perform a full refresh of your source(s) containing KB articles to take account of possible URI changes. You will also possibly have to change the ObjectsToGet configuration file depending on your needs (see Salesforce Connector Configuration Recipes). Theses modifications allow the connector to fully support the incremental refresh as well as the publish status changes of KB articles using stable URIs now produced by default. l CES 7.0.7914– (October 2015) Stable URIs can only be produced with the help of Coveo Support for the latest version of online articles when draft and archived articles are not indexed. Customizable ObjectsToGet Configuration File You can customize items that the Coveo crawler retrieves from Salesforce (see "Creating a Salesforce ObjectsToGet Configuration File" on page 35). Customizable Mapping File You can customize how the fields of Salesforce objects are mapped to searchable fields in the Coveo index (see "Creating a Salesforce Mapping File" on page 69). Feature History Coveo Platform version Date Features 7.0.8047 December 2015 Full support of incremental refreshes on knowledge articles and indexing their publish status 7.0.7183 November 2014 Support validating the ObjectsToGet with an XSD [more] 4www.coveo.com 6
  • 11. Coveo Platform 7.0 | Salesforce Connector Guide Coveo Platform version Date Features 7.0.6767 June 2014 l Support incremental modification of knowledge base articles versions and states [more] l Support incremental modification of user profiles 7.0.6424 February 2014 Knowledge content searchable by article number without inputting leading zeroes 7.0.6339 January 2014 l Partial incremental refresh support on knowledge articles l Support multilingual knowledge articles 7.0.6196 November 2013 Adding support to crawl Chatter feed items and files. 7.0.5785 August 2013 Introduction of this second generation Salesforce connector What's Next? Review the deployment process for the Salesforce connector (see "Salesforce Connector Deployment Overview" on page 8). 4www.coveo.com 7
  • 12. Coveo Platform 7.0 | Salesforce Connector Guide 2. Salesforce Connector Deployment Overview The following procedure outlines the steps needed to index a Salesforce source. The steps indicate the order in which you must perform configurations tasks. When needed, the steps refer to a detailed procedure. The Salesforce connector can index various Salesforce content types: l Service Cloud standard and custom objects and fields l Knowledge base articles l Chatter l CRM Content When you want to index more than one of these Salesforce content types, you must use the following procedure to create a configuration (ObjectsToGet configuration file, mapping file, and source) for each of them because they cannot share the same set of configuration parameters. To deploy the Salesforce connector 1. Validate that your environment meets the requirements (see "Salesforce Connector Requirements" on page 10). 2. Configure the user identity The Coveo connector needs an account to connect to your Salesforce organization and access the entire content that you want to index. You must create a CES user identity to hold the credentials of this Salesforce account (see "Creating a Salesforce User Identity" on page 11). 3. Get Salesforce Client_ID and Client_Secret values The Coveo security provider and connector for Salesforce must know the Client_ID and Client_Secret values for your Salesforce organization to be authorized to access its content (see "Getting Salesforce Client_ ID and Client_Secret Values" on page 16). 4. Create an ObjectsToGet configuration file An ObjectsToGet XML configuration file tells the crawler which Salesforce items to retrieve (see "Salesforce ObjectsToGet Configuration File" on page 21). You must create your custom ObjectsToGet XML configuration file before configuring your source. You can create the file based on examples that include standard objects and include your custom objects (see "Creating a Salesforce ObjectsToGet Configuration File" on page 35). 5. Configure a mapping file A Salesforce source needs a mapping file to know how to map retrieved Salesforce items to CES index fields. You must create a mapping file before you configure your Salesforce source (see "Creating a Salesforce Mapping File" on page 69). 6. Create a custom Salesforce field set CES 7.0.6607+ (April 2014) 4www.coveo.com 8
  • 13. Coveo Platform 7.0 | Salesforce Connector Guide a. The Salesforce source needs a field set matching the CES fields that are included in the mapping file. It is recommended to start by importing the default Salesforce field set file ([CES_ Path]BinCoveo.CES.CustomCrawlers.Salesforce.FieldSet.xml) to create fields for all the metadata available by default from Salesforce content. b. When you created custom Salesforce object and fields, add corresponding fields to the field set. 7. Configure an Email security provider Note: For a Salesforce Knowledge Base source, you do not need to perform this procedure. Knowledge Base permissions cannot be indexed so no Email security provider is needed. In Salesforce, users are identified by their email addresses. Consequently, permissions returned by the Salesforce security provider for each document are email addresses. The Salesforce security provider then requires another security provider to uniquely identify users from their email addresses. The security provider type to use depends on how users are authenticated when they access the search interface: l When authenticated with their email address, use an Email security provider (see "Configuring an Email Security Provider" on page 100). l When authenticated with their Active Directory account, use an Active Directory security provider (see "Configuring an Active Directory Security Provider" on page 102). Note: An Active Directory security provider is appropriate only when the User Principal Name (UPN) matches the email address for all users. Note: You may require to also use a Regex Transform Member Name security provider in between the two other security providers to map member types. Contact Coveo Support for assistance. 8. Configure a Salesforce security provider Note: For a Salesforce Knowledge Base source, you do not need to perform this procedure. Knowledge Base permissions cannot be indexed so no Email security provider is needed. A Salesforce source needs a Salesforce security provider (see "Configuring a Salesforce Security Provider" on page 98). 9. Configure and index the Salesforce source The Coveo connector needs to know details about your Salesforce organization to be able to index the desired content (see "Configuring and Indexing a Salesforce Source" on page 105). 10. If you encounter issues: l Solve typical issues that return error messages (see "Troubleshooting Salesforce Connector Issues" on page 117). l Consider adding and modifying default values of hidden source parameters (see "Modifying Hidden Salesforce Source Parameters" on page 111). 4www.coveo.com 9
  • 14. Coveo Platform 7.0 | Salesforce Connector Guide 3. Salesforce Connector Requirements Your environment must meet the following requirements to be able to use the Coveo connector for Salesforce repositories: l CES 7.0.5785+ (August 2013) l Coveo for Salesforce license The Salesforce connector is only available on-premises if you have acquired a suitable Coveo for Salesforce license (see Coveo for Salesforce). Note: You can see if the Salesforce connector is enabled in your CES 7.0 instance from the CES Administration Tool. l An active Salesforce account to a Salesforce organization The crawling account must have permissions to read all the types of content that you want to index (see "Creating a Salesforce User Identity" on page 11). What's Next? Create a user identity to be used by the Coveo connector to crawl your Salesforce content (see "Creating a Salesforce User Identity" on page 11). 4www.coveo.com 10
  • 15. Coveo Platform 7.0 | Salesforce Connector Guide 4. Creating a Salesforce User Identity The Coveo connector and security provider for Salesforce must use a user account to connect to your Salesforce organization. When an application such as the Coveo connector accesses your Salesforce content through the API, it must provide credentials where the Security Token associated to the account is appended to the password. Important: Salesforce may regularly request a password change which will generate a new Security Token at the same time. You must then each time update the user identity with the new password and Security Token. To create a Salesforce user identity 1. In the Salesforce organization that you want to index: a. Select or create an account to be used by the Coveo connector and security provider to access your Salesforce content (see "Creating a Dedicated Salesforce Crawling Account" on page 12). b. Find the Salesforce Security Token for this account (see "Getting the Security Token for Your Salesforce Account" on page 14). 2. On the Coveo server, access the Administration Tool. 3. In the Administration Tool, select Configuration > Security. 4. In the navigation panel on the left, select User Identities. 5. In the User Identities page, click Add. 6. In the Modify User Identity page: a. In the Name box, enter a name for this user identity. Example: Salesforce Crawling Account 4www.coveo.com 11
  • 16. Coveo Platform 7.0 | Salesforce Connector Guide b. In the User box, enter the user name of the selected Salesforce account, typically the email address. c. In the Password box, enter the password to which you append the Security Token for the selected Salesforce account with no space in between. Example: When the password is ThisIsMyPassword and the Security Token is DU5PJU3GtHbQaX0zxiWoCMq8Z, then enter ThisIsMyPasswordDU5PJU3GtHbQaX0zxiWoCMq8Z. d. Click Apply Changes. What's Next? Your Salesforce source and security provider will need to know the Client_ID and Client_Secret values for your Salesforce organization (see "Getting Salesforce Client_ID and Client_Secret Values" on page 16). 4.1 Creating a Dedicated Salesforce Crawling Account The Coveo connector can use a Salesforce administrator account to access and crawl your Salesforce content. It is however a better practice to create dedicated Salesforce user, profile, and permission set for the Coveo crawling, that specify minimal permissions and access. Note: It is strongly recommended to have separate dedicated Salesforce crawling accounts for each Salesforce source and security provider. When the Coveo crawler accesses Salesforce with the same user credentials too many times, Salesforce returns INVALID_QUERY_LOCATOR error messages, such as the following: Error with ID 'SALESFORCE_INVALID_QUERY': invalid query locator (INVALID_QUERY_LOCATOR) - This error can occur if a user is used more than once for sources that run in parallel. To avoid this error, make sure to use only one user per source or alternate the refresh schedule of your sources. To create a dedicated Salesforce crawling account 1. Using an administrator account, log in to your Salesforce organization. 2. In the user menu, select Setup. 3. Create a Salesforce profile dedicated to the Coveo crawler: a. In the Setup page, select Manage Users > Profiles. b. In the Profiles page, click New Profile. c. In the Clone Profile page: 4www.coveo.com 12
  • 17. Coveo Platform 7.0 | Salesforce Connector Guide i. In the Existing Profile box, select an existing profile such as Read Only to be used as a template for the new profile according to the permissions you want to grant to the crawler. ii. In the Profile Name box, enter a name such as CoveoIndexer. iii. Click Save. d. In the page for your new profile, click Edit and in the Administrative Permissions section: i. Ensure that the API Enabled option is selected. ii. Optionally, select the API Only User option as an additional security measure. iii. Select the Modify All Data option when any of the following situation applies: l You are using CES 7.0.6225– (December 2013) or prior. l You want to index the Salesforce item permissions. Note: l The Modify All Data permission is required because the Salesforce permissions can be indexed only through the Salesforce Metadata API that is only accessible with the Modify All Data permission. l If you do not enable Modify All Data, be aware that the crawler will only index content to which it has access, so set up read access to objects accordingly. iv. When indexing Knowledge content, ensure that Knowledge User is checked. v. Optionally, as an additional security measure, in the Login IP Ranges section, select or create a login IP range to restrict the accessibility for this profile (see Coveo Platform IP address range). 4. Create a Salesforce user dedicated to the Coveo crawler: 4www.coveo.com 13
  • 18. Coveo Platform 7.0 | Salesforce Connector Guide a. In the Setup page, select Manage Users > Users. b. In the All Users page, click New User. c. In the New User page:  i. Fill the required fields. ii. In the Profile box, select the profile you just created. iii. Click Save. 4.2 Getting the Security Token for Your Salesforce Account When you create a Salesforce account, Salesforce sends an email message from support@salesforce.com with subject: salesforce.com security token confirmation to the email address associated with the account. This email message contains the Security Token for the account and is the only place where you can find the Security Token value. When you change the account password, the security token is also regenerated (so the previous one expires) and a similar email is sent. To get the security token for your Salesforce account 1. In the mailbox for the email address associated with the Salesforce account to be used by the Coveo connector, look for the latest email message received from support@salesforce.com with subject: salesforce.com security token confirmation. 2. If you cannot find the latest email with security token, reset the security token:  a. Log in to Salesforce using the Salesforce account to be used by the Coveo connector. b. In the User Menu, select Setup. c. In the menu on the left, under Personal Setup, expand My Personal Information, and then click Reset My Security Token. d. Follow onscreen instructions. A new email message will be sent. 3. Open the message, and then copy the Security Token value. 4www.coveo.com 14
  • 19. Coveo Platform 7.0 | Salesforce Connector Guide Example: In the following email example, the Security Token value is highlighted. 4www.coveo.com 15
  • 20. Coveo Platform 7.0 | Salesforce Connector Guide 5. Getting Salesforce Client_ID and Client_Secret Values The Force.com platform implements the OAuth 2.0 Authorization Framework, so users can authorize applications to access Force.com resources. When you configure the Coveo Salesforce security provider and Salesforce source, you must know the Client_ID and Client_Secret token values for the Salesforce organization that you want to index. To get the Salesforce Client_ID and Client_Secret values 1. Using and administrator account, log into the Salesforce organization that you want to index. 2. On the User Menu, select Setup. 3. In the navigation menu on the left, under App Setup, expand Create, and then click Apps. 4. In the Apps page, in the Connected Application section, click New to create a new application that will use OAuth2 to gain access to the organization. 5. In the New Connected App page: 4www.coveo.com 16
  • 21. Coveo Platform 7.0 | Salesforce Connector Guide a. In the Basic Information section: i. Enter meaningful names in the Connected App Name and API Name boxes. ii. Enter your email in the Contact Email box so that you can receive messages from this application. b. In the API (Enable OAuth Settings) section:  i. Select the Enable OAuth Settings check box. ii. In the Callback URL box, since a callback URL will not be used for this application, enter a dummy but valid secured URL (https://) such as https://login.salesforce.com/services/oauth2/callback. iii. In the Available OAuth Scopes list, select the following items:  4www.coveo.com 17
  • 22. Coveo Platform 7.0 | Salesforce Connector Guide l Access and manage your data (api) l Full access (full) l Perform requests on your behalf at any time (refresh_token, offline_access) and click Add for each so that they appear in the Selected OAuth Scopes list. c. Click Save. 6. In the page that appears for your new connected app, in the API (Enable OAuth Settings) section: a. Copy the Consumer Key value and paste it in a secure reference document of your choice. The Consumer Key is the client_id. b. Next to Consumer secret, click Click to reveal, copy the value that appears, and then paste it in your secure reference document. The Consumer secret is the client_secret. c. Save your reference document. Note: You can always come back to this Salesforce page (Setup > App Setup > Create > Apps, and clicking the application name in the Connected Apps list). 7. Create a Salesforce permission set dedicated to the Coveo crawler and assign it to your dedicated app and user: a. In the Setup page, select Manage Users > Permission Sets. b. In the Permission Sets page, click New. c. In the Create page, in the Label and API Name boxes, enter significant names, and then click Save. 4www.coveo.com 18
  • 23. Coveo Platform 7.0 | Salesforce Connector Guide d. In the page for the new permission set: i. Click Manage Assignments, and then add the dedicated user you created earlier for the Coveo crawler (see "Creating a Dedicated Salesforce Crawling Account" on page 12). ii. In the Apps section, click Assigned Connected Apps. iii. In the Assigned Connected Apps section, click Edit, add the connected app you just created to the 4www.coveo.com 19
  • 24. Coveo Platform 7.0 | Salesforce Connector Guide Enabled Connected Apps list, and then click Save. What's Next? Create an ObjectsToGet Configuration file (see "Salesforce ObjectsToGet Configuration File" on page 21). 4www.coveo.com 20
  • 25. Coveo Platform 7.0 | Salesforce Connector Guide 6. Salesforce ObjectsToGet Configuration File The ObjectsToGet configuration file of the Salesforce connector contains the definition of all standard or custom objects that will be retrieved from the Salesforce organization. Each object definition is used to generate the SOQL query executed by the connector to retrieve the records for that object. With this configuration file, you get control over: l Which information is retrieved by specifying the fields and relationships that should be fetched for each object. This information will be available to use in the mapping file. l Which records are returned by specifying conditions on the SOQL query that will be used to filter the query results. Notes: l If you want to retrieve Salesforce Knowledge Base articles, you need to specify at least two queries for each type of Knowledge article, one for the *__ka object and one the *__kav object (see "Salesforce ObjectsToGet Configuration File Example for Knowledge Base" on page 48). l There is a bug in the Salesforce API that causes the returned JSON to be invalid when querying a binary field of an object, so ensure to not include any binary field in your query. l CES 7.0.7914+ (October 2015) Support for the * character to replace a list of Objects and Parent relationship fields that are queryable. Example: When the mapping file contains the following: <Query> <ObjectName>Case</ObjectName> <Fields> <string>*</string> </Fields> </Query> You can use the following SOQL query: <Query value="Select * from Case" /> l CES 7.0.8047+ (December 2015) Support for the * character to replace a list of Child relationship fields that are queryable. Example: <Query value="Select *,Parent.*, (Select * from Children) From Object/> 6.1 Salesforce Object Definition To obtain the list of queryable fields on a specific object: l Salesforce developers can use the describeSObject() method to obtain the complete object definition in JSON format. Example: https://na15.salesforce.com/services/data/v27.0/sobjects/Account/describe 4www.coveo.com 21
  • 26. Coveo Platform 7.0 | Salesforce Connector Guide l Salesforce administrators can obtain the complete list of fields from Salesforce API online documentation (see Account, Task). To obtain the list of available relationships on a specific object: l Salesforce administrators can access any object definition from Salesforce in the Setup under the Customize menu. Object relationships are identified by fields of data type Lookup (see AccountFields, TaskFields). 6.2 Configuration File Elements The ObjectsToGet Salesforce configuration file is an aggregate of query XML nodes. A query node contains several elements, each one being used to generate the SOQL query of a Salesforce object. Value attribute (optional)CES 7.0.7814+ (August 2015) You can specify an SOQL query in the query value as shown in the following example (see Salesforce Object Query Language (SOQL)): <Query value="Select Id, Owner.Id, (Select Id From Shares) From Case Where CaseNumber>10" /> Keep in mind that only what is already in the objects to get is supported. ObjectName (required) The name of the object (standard or custom) to query (see Standard Objects). Note: If you are using the value attribute, the object name is optional and must be the same. GroupBy (optional) The name of the field on which results should be grouped by. Limit (optional) The maximum number of items that will be retrieved by the query. Offset (optional) The number of items that should be skipped in query results. Fields (required) Contains the name of the fields (Field Name column in Salesforce) that will be available on each record returned by the query. Each field name must be in a <string> element, no matter its data type. Fields specified in this section can be of any data type except Lookup. 4www.coveo.com 22
  • 27. Coveo Platform 7.0 | Salesforce Connector Guide Example: <Query> <ObjectName>Account</ObjectName> <Fields> <string>Id</string> <string>IsDeleted</string> <string>Name</string> <string>Type</string> <string>BillingStreet</string> <string>BillingCity</string> <string>BillingState</string> <string>BillingPostalCode</string> <string>BillingCountry</string> <string>Phone</string> <string>Fax</string> <string>AccountNumber</string> <string>Website</string> <string>Sic</string> <string>Industry</string> <string>AnnualRevenue</string> <string>NumberOfEmployees</string> <string>Ownership</string> <string>TickerSymbol</string> <string>Description</string> <string>Rating</string> <string>Site</string> <string>CreatedDate</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> </Fields> </Query> QueryCondition (optional) Important: CES 7.0.6942– (August 2014) This operator is not validated and has a free form. However, the resulting SOQL must be in the format FIELD OPERATOR VALUE. Rather use QueryCondition2. One or more conditions that will be applied to the SOQL query used to retrieve object records. l Field (required): Case-insensitive name of the object field on which the condition is applied. Relationship names can also be used (ex.: Parent.Type). l Operator (required): The operator to apply to the condition. Any operator supported by Salesforce SOQL queries can be used (see Comparison Operators). l Value (required): Case-sensitive value used to evaluate the condition. String values must be enclosed in single quotes. 4www.coveo.com 23
  • 28. Coveo Platform 7.0 | Salesforce Connector Guide Example: <Query> <ObjectName>Account</ObjectName> <Fields> <string>Name</string> <string>AccountNumber</string> </Fields> <Conditions> <QueryCondition> <Field>Type</Field> <Operator>!=</Operator> <Value>'Prospect'</Value> </QueryCondition> <QueryCondition> <Field>Owner.Name</Field> <Operator>=</Operator> <Value>'John Smith'</Value> </QueryCondition> </Conditions> </Query> The generated query is: SELECT Name FROM Account WHERE Type != 'Prospect' AND Owner.Name = 'John Smith' QueryCondition2 (optional) Note: This query condition is validated and has more options. This is the prefered way to create a query condition. One or more conditions that will be applied to the SOQL query used to retrieve object records. l Field (required): Case-insensitive name of the Object Field on which the condition is applied. Relationship names can also be used (e.g. Parent.Type). l Relation (required): The operator to apply to the condition. Supported operators are Equal, NotEqual, Less, LessOrEqual, Greater, GreaterOrEqual, Like, NotLike. l SoqlString|SoqlBoolean|SoqlDateTime (required): Case-sensitive value (not Like) used to evaluate the condition. 4www.coveo.com 24
  • 29. Coveo Platform 7.0 | Salesforce Connector Guide Example: <Query> <ObjectName>Account</ObjectName> <Fields> <string>Name</string> </Fields> <Conditions> <QueryCondition2> <Field>Type</Field> <Relation>NotEqual</Relation> <SoqlString>Prospect</SoqlString> </QueryCondition2> <QueryCondition2> <Field>IsEscalated</Field> <Relation>Equal</Relation> <SoqlBoolean>true</SoqlBoolean> </QueryCondition2> <QueryCondition2> <Field>LastViewDate</Field> <Relation>GreaterOrEqual</Relation> <SoqlDateTime>2014-04-28T00:00:00.0000000-00:00</SoqlDateTime> </QueryCondition2> </Conditions> </Query> Note: For SoqlDateTime, the date/time format must exactly match YYYY-MM-DDTHH:MM:SS.0000000- 00:00 The generated query is: SELECT Name FROM Account WHERE Type != 'Prospect' AND IsEscalated = true AND LastViewDate >= 2014- 04-28T00:00:00 InCondition (optional) l Field (required): Case-insensitive name of the Object Field on which the condition is applied. Relationship names can also be used (e.g. Parent.Type). l AllowedValues (required): Case-sensitive possible values of the field. Example: <Query> <ObjectName>Account</ObjectName> <Fields> <string>Name</string> </Fields> <Conditions> <InCondition> <Field>Type</Field> <AllowedValues> <SoqlString>Prospect</SoqlString> <SoqlString>Client</SoqlString> </AllowedValues> </InCondition> </Conditions> </Query> The generated query is: SELECT Name FROM Account WHERE Type IN ('Prospect', 'Client') 4www.coveo.com 25
  • 30. Coveo Platform 7.0 | Salesforce Connector Guide InQueryCondition (optional) CES 7.0.7183+ (November 2014) Semi-joins are supported in query's conditions (see Comparison Operators). Semi-joins are useful when you want to index only a subset of records based on another set of records. l Field (required): Case-insensitive name of the object field on which the condition is applied. Relationship names can also be used (ex.: Parent.Type). l Query (required): A valid query object (with ObjectName, Fields, etc) (see Semi-Joins or Anti-Joins Relationship Query Limits). Example: <Query> <ObjectName>Case</ObjectName> <Fields> <string>Id</string> </Fields> <Conditions> <InCondition> <Field>Id</Field> <Query> <ObjectName>CaseComment</ObjectName> <Fields> <string>ParentId</string> </Fields> <Conditions> <QueryCondition> <Field>CommentBody</Field> <Operator>=</Operator> <Value>'this is a test'</Value> </QueryCondition> </Conditions> </Query> </InCondition> </Conditions> </Query> The generated query is: SELECT Id FROM Case WHERE Id IN (SELECT ParentId FROM CaseComment WHERE CommentBody = 'this is a test') Not InQueryCondition (optional) CES 7.0.7183+ (November 2014) Anti-joins are supported in query's conditions (see Comparison Operators). Anti- joints are useful when you want to index only a subset of records based on another set of records. l Field (required): Case-insensitive name of the object field on which the condition is applied. Relationship names can also be used (ex.: Parent.Type). l Query (required): A valid query object (with ObjectName, Fields, etc) (see Semi-Joins or Anti-Joins Query Limits). 4www.coveo.com 26
  • 31. Coveo Platform 7.0 | Salesforce Connector Guide Example: <Query> <ObjectName>Case</ObjectName> <Fields> <string>Id</string> </Fields> <Conditions> <NotCondition> <InCondition> <Field>Id</Field> <Query> <ObjectName>CaseComment</ObjectName> <Fields> <string>ParentId</string> </Fields> <Conditions> <QueryCondition> <Field>CommentBody</Field> <Operator>=</Operator> <Value>'this is a test'</Value> </QueryCondition> </Conditions> </Query> </InCondition> </NotCondition> </Conditions> </Query> The generated query is: SELECT Id FROM Case WHERE NOT Id IN (SELECT ParentId FROM CaseComment WHERE CommentBody = 'this is a test') ParentRelationship (optional) One or more relationships which information will be available on each object record returned by the query. An object relationship is defined by a lookup field which creates a relation between the current object being queried and another object. These relations allow SOQL query operations similar to SQL joins. l RelationshipName (required): The field name of data type Lookup. l Fields (required): The name of the fields of the related object that will be available on each record returned by the query. l ParentRelationships (optional): Another level of parent relationship, but this time, the relationship applies to the related object. 4www.coveo.com 27
  • 32. Coveo Platform 7.0 | Salesforce Connector Guide Example: <Query> <ObjectName>Account</ObjectName> <Fields> <string>Name</string> <string>AccountNumber</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>Owner</RelationshipName> <Fields> <string>Name</string> <string>Email</string> </Fields> </ParentRelationship> </ParentRelationships> </Query> Important: The parent field is copied to the record. If the parent is modified, the indexed record is not updated. ChildRelationship (optional) One or more relationships which information will be available on each Object record returned by the query. An Object relationship is defined by a Lookup Field which creates a relation between the current Object being queried and another Object. These relations allow SOQL query operations similar to SQL joins. l Query (required): A valid query object (with ObjectName, Fields, etc). Example: <Query> <ObjectName>Opportunity</ObjectName> <Fields> <string>Id</string> <string>Name</string> </Fields> <ChildRelationships> <Query> <ObjectName>Attachments</ObjectName> <Fields> <string>Id</string> <string>Name</string> </Fields> </Query> </ChildRelationships> </Query> The generated query is:  SELECT Id, Name, (SELECT Id, Name FROM Attachments) FROM Opportunity The generated metadata, when an attachment is found on the opportunity: "Attachments.attribute.type" => "Attachment" "Attachments.attribute.url" => "/services/data/v29.0/sobjects/Attachment/00PG000000B8RUvMAN" "Attachments.Id" => "00PG000000B8RUvMAN" "Attachments.Name" => "a_stash_of_werthers.jpg" 4www.coveo.com 28
  • 33. Coveo Platform 7.0 | Salesforce Connector Guide Note: l When more than one child exist, the fields contain values separated with a semicolon. Example: Attachments.Name: a.jpg;b.jpg l Nested child relationships (sub-sub queries) are not supported. Important: CES 7.0.8850– (March 2017) The child field is copied to the record. If a child is modified, the indexed record is not updated. CreateRecord (optional) CES 7.0.8996+ (June 2017) To be used only inside a ChildRelationship. It creates an item from child records. In the following example, Attachments from Opportunities are created as items in the Coveo index. Example: <Query> <ObjectName>Opportunity</ObjectName> <Fields> <string>Id</string> <string>Name</string> </Fields> <ChildRelationships> <ChildRelationship> <RelationshipName>Attachments</RelationshipName> <Fields> <string>Id</string> <string>Name</string> </Fields> <CreateRecord>true</CreateRecord> </ChildRelationship> </ChildRelationships> </Query> PolymorphicRelationship (optional) Polymorphic relationships can be useful for parent relationships on a Lookup field that can be related to multiple types of objects (ex.: Lookup (Contract,Campaign,Account,Opportunity,Product,Asset,Case,Solution)). The polymorphic relationship allows for different fields to be retrieved depending on the object that will be related for a specific record. 4www.coveo.com 29
  • 34. Coveo Platform 7.0 | Salesforce Connector Guide Notes: l CES 7.0.8047+ (December 2015) Polymorphic relationships no longer depend on a parent relationship to work. Example: You can add the following on feed items (TextPost, LinkPost, ContentPost, PollPost) to create the CreatedBy.SmallPhotoUrl metadata when indexing FeedItem, FeedComment and collaborationgroup: <PolymorphicRelationship> <RelationshipName>CreatedBy</RelationshipName> <ObjectName>User</ObjectName> <Fields> <string>Name</string> <string>Type</string> <string>PhotoURL</string> </Fields> </PolymorphicRelationship> l The two following metadata appear on the record with polymorphic relationships: <polymorphic_ relationship_name>.<field> and <polymorphic_relationship_name>_<object_ name>.<field>. l CES 7.0.7104– (October 2014) The record with polymorphic relationships only provided the metadata named <polymorphic_relationship_name>_<object_name>.<field>. l RelationshipName (required): The field name of data type Lookup. l ObjectName (optional): The related object type this polymorphic relationship applies to. Note: CES 7.0.7104– (October 2014) The ObjectName field is required. l Fields (required): The name of the fields of the related object that will be available on each record returned by the query. l ParentRelationships (optional): Another level of parent relationship, but this time, the relationship applies to the related object. 4www.coveo.com 30
  • 35. Coveo Platform 7.0 | Salesforce Connector Guide Example: <Query> <ObjectName>Task</ObjectName> <Fields> <string>Id</string> <string>Subject</string> <string>ActivityDate</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>What</RelationshipName> <Fields> <string>Name</string> <string>Type</string> </Fields> </ParentRelationship> </ParentRelationships> <PolymorphicRelationships> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Account</ObjectName> <Fields> <string>Name</string> <string>AccountNumber</string> </Fields> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Opportunity</ObjectName> <Fields> <string>Amount</string> <string>TotalOpportunityQuantity</string> </Fields> </PolymorphicRelationship> </PolymorphicRelationships> </Query> Important: The parent field is copied to the record. If a parent is modified, the indexed record is not updated. Order (optional) CES 7.0.6607+ (April 2014) One or more order restrictions that will be applied to the SOQL query used to retrieve Object records. l Ascending (optional): The direction of the ordering. Default is true (ascending). Use false for descending. l NullsFirst (optional): Whether records with NULL values in the specified fields must be returned first or last. Default is true. l Fields (required): One or more fields to base the ordering on, in the specified field order. 4www.coveo.com 31
  • 36. Coveo Platform 7.0 | Salesforce Connector Guide Examples: With the following configuration: l Opportunity.Id shows that we can specify the query object name as the parent of the field. l Account.Foo.Id is a field on the parent Foo, which is also a field of the parent Account of Opportunity. l What.Id is a field on the polymorphic parent What of Opportunity. <Query> <ObjectName>Opportunity</ObjectName> <Fields> <string>Id</string> </Fields> <Order> <Ascending>true</Ascending> <NullsFirst>false</NullsFirst> <Fields> <string>Name</string> <string>Opportunity.Id</string> <string>Account.Foo.Id</string> <string>What.Id</string> </Fields> </Order> </Query> The generated query is:  SELECT Id FROM Opportunity ORDER BY Name, Opportunity.Id, Account.Foo.Id, What.Id ASC NULLS LAST Configuration including a child relationship: <Query> <ObjectName>Opportunity</ObjectName> <Fields> <string>Id</string> </Fields> <ChildRelationships> <Query> <ObjectName>Attachments</ObjectName> <Fields> <string>Id</string> </Fields> <Order> <Fields> <string>Name</string> </Fields> </Order> </Query> </ChildRelationships> </Query> The generated query is:  SELECT Id, (SELECT Id FROM Attachments ORDER BY Name ASC NULLS FIRST) FROM Opportunity 4www.coveo.com 32
  • 37. Coveo Platform 7.0 | Salesforce Connector Guide 6.3 XML Schema Definition Note: CES 7.0.7183+ (November 2014) Each of the ObjectsToGet in your Salesforce sources are validated against the XSD. If it is not the case, a SALESFORCE_INVALID_CONFIGURATION error message appears in the CES console and logs. Use the following XML schema definition to validate your configuration file. <?xml version="1.0" encoding="utf-8"?> <xs:schema id="ArrayOfQuery" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="Fields"> <xs:complexType> <xs:sequence> <xs:element name="string" nillable="true" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent msdata:ColumnName="string_Text" msdata:Ordinal="0"> <xs:extension base="xs:string"> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ParentRelationships"> <xs:complexType> <xs:sequence> <xs:element name="ParentRelationship" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="RelationshipName" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" /> <xs:element name="ParentRelationships" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="ParentRelationship" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="RelationshipName" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Query" type="QueryType" /> <xs:complexType name="QueryType"> <xs:sequence> <xs:element name="ObjectName" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="GroupBy" type="xs:string" minOccurs="0" /> <xs:element name="Limit" type="xs:string" minOccurs="0" /> <xs:element name="Offset" type="xs:string" minOccurs="0" /> <xs:element name="FoundRecordsAreDeleted" type="xs:string" minOccurs="0" /> <xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" /> 4www.coveo.com 33
  • 38. Coveo Platform 7.0 | Salesforce Connector Guide <xs:element name="Order" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:element name="Ascending" type="xs:boolean" minOccurs="0" maxOccurs="1" /> <xs:element name="NullsFirst" type="xs:boolean" minOccurs="0" maxOccurs="1" /> <xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Conditions" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="QueryCondition" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="Field" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element name="Operator" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element name="Value" type="xs:string" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element ref="ParentRelationships" minOccurs="0" maxOccurs="unbounded" /> <xs:element name="PolymorphicRelationships" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="PolymorphicRelationship" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="RelationshipName" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element name="ObjectName" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element ref="Fields" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="ParentRelationships" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ChildRelationships" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="Query" type="QueryType" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:element name="ArrayOfQuery" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:sequence> <xs:element ref="Query" minOccurs="0" maxOccurs="unbounded"> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> What's Next? Create your ObjectsToGet configuration file (see "Creating a Salesforce ObjectsToGet Configuration File" on page 35). 4www.coveo.com 34
  • 39. Coveo Platform 7.0 | Salesforce Connector Guide 6.4 Creating a Salesforce ObjectsToGet Configuration File You must create an ObjectsToGet configuration file and attach it to your Salesforce source to instruct the connector which objects to retrieve from your Salesforce organization (see "Salesforce ObjectsToGet Configuration File" on page 21). Note: You must be familiar with standard and custom objects and fields used in your Salesforce organization to be able to create a custom ObjectsToGet configuration file. The content of the ObjectsToGet configuration file typically includes standard objects but most likely also the custom objects that you want to index. You can create your ObjectsToGet configuration file by starting with provided examples and customize it to suit your needs. It is recommended to create separate ObjectsToGet configuration files with separate sources for the following types of Salesforce content: l Service Cloud standard and custom objects and fields l Knowledge base articles l CRM Content To create a Salesforce ObjectsToGet configuration file 1. Refer to the most appropriate of the following topics to copy the content of the corresponding ObjectsToGet XML configuration file example: l Salesforce ObjectsToGet Configuration File Example for Standard Objects l "Salesforce ObjectsToGet Configuration File Example for Knowledge Base" on page 48 l "Salesforce ObjectsToGet Configuration File Example for CRM Content " on page 51 2. Using a text editor: a. Paste the content of the ObjectsToGet configuration file example. b. Modify or remove standard objects and fields, or add custom objects and fields to match the needs of your Salesforce organization (see "Salesforce ObjectsToGet Configuration File" on page 21). c. Save your ObjectsToGet configuration file. 3. Validate your ObjectsToGet configuration file (see "XML Schema Definition" on page 33). 4. Using an administrator account, connect to the Coveo Master server, and copy your custom ObjectsToGet configuration file to a location accessible to CES. Example: On the Coveo Master server, for an ObjectsToGet configuration file for standard and custom objects and fields, save the file as:  D:CES7ConfigSalesforce_Basic_ObjectsToGet.xml. 4www.coveo.com 35
  • 40. Coveo Platform 7.0 | Salesforce Connector Guide You will specify the full path to this file when you configure your Salesforce source (see "ObjectsToGet File" on page 107). What's Next? Create a mapping file to transfer the values of fields retrieved from Salesforce into CES fields (see "Creating a Salesforce Mapping File" on page 69). 6.5 Salesforce ObjectsToGet Configuration File Example for Standard Objects The ObjectsToGet configuration file example presented in this topic specifies to retrieve the following standard Service Cloud objects and fields (including Chatter feed items) that are typically useful to index: l Account l Case l Case Comment l Contact l Event l Solution l Task l User l Attachment l Feed item (Chatter) CES 7.0.6196+ (November 2013) l Feed comment (Chatter) CES 7.0.6196+ (November 2013) The following code sample is the content of the ObjectsToGet configuration file example for standard Service Cloud objects and fields. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Query> <ObjectName>Account</ObjectName> <Fields> <string>Id</string> <string>IsDeleted</string> <string>Name</string> <string>Type</string> <string>BillingStreet</string> <string>BillingCity</string> <string>BillingState</string> <string>BillingPostalCode</string> <string>BillingCountry</string> <string>Phone</string> <string>Fax</string> <string>AccountNumber</string> <string>Website</string> <string>Sic</string> <string>Industry</string> <string>AnnualRevenue</string> 4www.coveo.com 36
  • 41. Coveo Platform 7.0 | Salesforce Connector Guide <string>NumberOfEmployees</string> <string>Ownership</string> <string>TickerSymbol</string> <string>Description</string> <string>Rating</string> <string>Site</string> <string>CreatedDate</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>LastActivityDate</string> <string>Jigsaw</string> <string>JigsawCompanyId</string> <string>AccountSource</string> <string>SicDesc</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>MasterRecord</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Parent</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Owner</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> </Query> <Query> <ObjectName>Case</ObjectName> <Fields> <string>Id</string> <string>IsDeleted</string> <string>CaseNumber</string> <string>SuppliedName</string> <string>SuppliedEmail</string> <string>SuppliedCompany</string> <string>Type</string> <string>Status</string> <string>Reason</string> <string>Origin</string> <string>Subject</string> <string>Priority</string> <string>Description</string> <string>IsClosed</string> <string>ClosedDate</string> <string>IsEscalated</string> <string>CreatedDate</string> <string>LastModifiedDate</string> 4www.coveo.com 37
  • 42. Coveo Platform 7.0 | Salesforce Connector Guide <string>SystemModstamp</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>Contact</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Account</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Asset</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Parent</RelationshipName> <Fields> <string>CaseNumber</string> <string>Subject</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Owner</RelationshipName> <Fields> <string>Name</string> <string>Type</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> <PolymorphicRelationships> <PolymorphicRelationship> <RelationshipName>Owner</RelationshipName> <ObjectName>Group</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Owner</RelationshipName> <ObjectName>User</ObjectName> </PolymorphicRelationship> </PolymorphicRelationships> </Query> <Query> <ObjectName>CaseComment</ObjectName> <Fields> <string>Id</string> <string>IsPublished</string> <string>CommentBody</string> <string>CreatedDate</string> <string>SystemModstamp</string> <string>LastModifiedDate</string> <string>IsDeleted</string> 4www.coveo.com 38
  • 43. Coveo Platform 7.0 | Salesforce Connector Guide </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>Parent</RelationshipName> <Fields> <string>CaseNumber</string> <string>Subject</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> </Query> <Query> <ObjectName>Contact</ObjectName> <Fields> <string>Id</string> <string>IsDeleted</string> <string>LastName</string> <string>FirstName</string> <string>Salutation</string> <string>Name</string> <string>MailingStreet</string> <string>MailingCity</string> <string>MailingState</string> <string>MailingPostalCode</string> <string>MailingCountry</string> <string>Phone</string> <string>Fax</string> <string>MobilePhone</string> <string>HomePhone</string> <string>AssistantPhone</string> <string>Email</string> <string>Title</string> <string>Department</string> <string>AssistantName</string> <string>LeadSource</string> <string>Birthdate</string> <string>Description</string> <string>CreatedDate</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>LastActivityDate</string> <string>Jigsaw</string> <string>JigsawContactId</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>MasterRecord</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Account</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> 4www.coveo.com 39
  • 44. Coveo Platform 7.0 | Salesforce Connector Guide <ParentRelationship> <RelationshipName>ReportsTo</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Owner</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> </Query> <Query> <ObjectName>Event</ObjectName> <Fields> <string>Id</string> <string>Subject</string> <string>Location</string> <string>IsAllDayEvent</string> <string>ActivityDateTime</string> <string>ActivityDate</string> <string>DurationInMinutes</string> <string>StartDateTime</string> <string>EndDateTime</string> <string>Description</string> <string>IsPrivate</string> <string>ShowAs</string> <string>IsDeleted</string> <string>IsChild</string> <string>IsGroupEvent</string> <string>GroupEventType</string> <string>CreatedDate</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>IsArchived</string> <string>IsRecurrence</string> <string>RecurrenceStartDateTime</string> <string>RecurrenceEndDateOnly</string> <string>RecurrenceTimeZoneSidKey</string> <string>RecurrenceType</string> <string>RecurrenceInterval</string> <string>RecurrenceDayOfWeekMask</string> <string>RecurrenceDayOfMonth</string> <string>RecurrenceInstance</string> <string>RecurrenceMonthOfYear</string> <string>ReminderDateTime</string> <string>IsReminderSet</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>Who</RelationshipName> <Fields> <string>Name</string> <string>Type</string> </Fields> 4www.coveo.com 40
  • 45. Coveo Platform 7.0 | Salesforce Connector Guide </ParentRelationship> <ParentRelationship> <RelationshipName>What</RelationshipName> <Fields> <string>Name</string> <string>Type</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Account</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Owner</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> <PolymorphicRelationships> <PolymorphicRelationship> <RelationshipName>Who</RelationshipName> <ObjectName>Contact</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Who</RelationshipName> <ObjectName>Lead</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Account</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Asset</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Campaign</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Case</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Contract</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Magic_Item__c</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Opportunity</ObjectName> 4www.coveo.com 41
  • 46. Coveo Platform 7.0 | Salesforce Connector Guide </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Product2</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Solution</ObjectName> </PolymorphicRelationship> </PolymorphicRelationships> </Query> <Query> <ObjectName>Solution</ObjectName> <Fields> <string>Id</string> <string>IsDeleted</string> <string>SolutionNumber</string> <string>SolutionName</string> <string>IsPublished</string> <string>IsPublishedInPublicKb</string> <string>Status</string> <string>IsReviewed</string> <string>SolutionNote</string> <string>CreatedDate</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>TimesUsed</string> <string>IsHtml</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>Owner</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> </Query> <Query> <ObjectName>Task</ObjectName> <Fields> <string>Id</string> <string>Subject</string> <string>ActivityDate</string> <string>Status</string> <string>Priority</string> <string>Description</string> <string>IsDeleted</string> <string>IsClosed</string> <string>CreatedDate</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>IsArchived</string> <string>CallType</string> <string>CallDisposition</string> <string>IsReminderSet</string> <string>IsRecurrence</string> 4www.coveo.com 42
  • 47. Coveo Platform 7.0 | Salesforce Connector Guide <string>RecurrenceStartDateOnly</string> <string>RecurrenceEndDateOnly</string> <string>RecurrenceTimeZoneSidKey</string> <string>RecurrenceType</string> <string>RecurrenceInterval</string> <string>RecurrenceDayOfWeekMask</string> <string>RecurrenceDayOfMonth</string> <string>RecurrenceInstance</string> <string>RecurrenceMonthOfYear</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>Who</RelationshipName> <Fields> <string>Name</string> <string>Type</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>What</RelationshipName> <Fields> <string>Name</string> <string>Type</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Owner</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Account</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> <PolymorphicRelationships> <PolymorphicRelationship> <RelationshipName>Who</RelationshipName> <ObjectName>Contact</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Who</RelationshipName> <ObjectName>Lead</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Account</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Asset</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> 4www.coveo.com 43
  • 48. Coveo Platform 7.0 | Salesforce Connector Guide <ObjectName>Campaign</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Case</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Contract</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Magic_Item__c</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Opportunity</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Product2</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>What</RelationshipName> <ObjectName>Solution</ObjectName> </PolymorphicRelationship> </PolymorphicRelationships> </Query> <Query> <ObjectName>User</ObjectName> <Fields> <string>Id</string> <string>Username</string> <string>LastName</string> <string>FirstName</string> <string>Name</string> <string>CompanyName</string> <string>Division</string> <string>Department</string> <string>Title</string> <string>Street</string> <string>City</string> <string>State</string> <string>PostalCode</string> <string>Country</string> <string>Email</string> <string>Phone</string> <string>Fax</string> <string>MobilePhone</string> <string>Alias</string> <string>CommunityNickname</string> <string>IsActive</string> <string>TimeZoneSidKey</string> <string>LocaleSidKey</string> <string>ReceivesInfoEmails</string> <string>ReceivesAdminInfoEmails</string> <string>EmailEncodingKey</string> <string>UserType</string> <string>LanguageLocaleKey</string> <string>EmployeeNumber</string> <string>CreatedDate</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>UserPermissionsMarketingUser</string> <string>UserPermissionsOfflineUser</string> <string>UserPermissionsCallCenterAutoLogin</string> <string>UserPermissionsMobileUser</string> <string>UserPermissionsSFContentUser</string> <string>UserPermissionsKnowledgeUser</string> 4www.coveo.com 44
  • 49. Coveo Platform 7.0 | Salesforce Connector Guide <string>UserPermissionsInteractionUser</string> <string>UserPermissionsSupportUser</string> <string>UserPermissionsSiteforceContributorUser</string> <string>UserPermissionsSiteforcePublisherUser</string> <string>UserPermissionsChatterAnswersUser</string> <string>ForecastEnabled</string> <string>UserPreferencesActivityRemindersPopup</string> <string>UserPreferencesEventRemindersCheckboxDefault</string> <string>UserPreferencesTaskRemindersCheckboxDefault</string> <string>UserPreferencesReminderSoundOff</string> <string>UserPreferencesDisableAllFeedsEmail</string> <string>UserPreferencesDisableFollowersEmail</string> <string>UserPreferencesDisableProfilePostEmail</string> <string>UserPreferencesDisableChangeCommentEmail</string> <string>UserPreferencesDisableLaterCommentEmail</string> <string>UserPreferencesDisProfPostCommentEmail</string> <string>UserPreferencesContentNoEmail</string> <string>UserPreferencesContentEmailAsAndWhen</string> <string>UserPreferencesApexPagesDeveloperMode</string> <string>UserPreferencesHideCSNGetChatterMobileTask</string> <string>UserPreferencesDisableMentionsPostEmail</string> <string>UserPreferencesDisMentionsCommentEmail</string> <string>UserPreferencesHideCSNDesktopTask</string> <string>UserPreferencesDisCommentAfterLikeEmail</string> <string>UserPreferencesDisableLikeEmail</string> <string>UserPreferencesDisableMessageEmail</string> <string>UserPreferencesOptOutOfTouch</string> <string>UserPreferencesDisableBookmarkEmail</string> <string>UserPreferencesDisableSharePostEmail</string> <string>UserPreferencesEnableAutoSubForFeeds</string> <string>UserPreferencesDisableFileShareNotificationsForApi</string> <string>Extension</string> <string>FederationIdentifier</string> <string>AboutMe</string> <string>FullPhotoUrl</string> <string>SmallPhotoUrl</string> <string>DigestFrequency</string> <string>DefaultGroupNotificationFrequency</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>UserRole</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Profile</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Manager</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> 4www.coveo.com 45
  • 50. Coveo Platform 7.0 | Salesforce Connector Guide </ParentRelationship> <ParentRelationship> <RelationshipName>Contact</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> </Query> <Query> <ObjectName>Attachment</ObjectName> <Fields> <string>Id</string> <string>IsDeleted</string> <string>Name</string> <string>IsPrivate</string> <string>ContentType</string> <string>BodyLength</string> <string>Body</string> <string>CreatedDate</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>Description</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>Parent</RelationshipName> <Fields> <string>Name</string> <string>Type</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>Owner</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> <PolymorphicRelationships> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Account</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Asset</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Campaign</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Case</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> 4www.coveo.com 46
  • 51. Coveo Platform 7.0 | Salesforce Connector Guide <RelationshipName>Parent</RelationshipName> <ObjectName>Contact</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Contract</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>EmailTemplate</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Event</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Lead</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Magic_Item__c</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Opportunity</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Product2</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Solution</ObjectName> </PolymorphicRelationship> <PolymorphicRelationship> <RelationshipName>Parent</RelationshipName> <ObjectName>Task</ObjectName> </PolymorphicRelationship> </PolymorphicRelationships> </Query> <Query> <ObjectName>FeedItem</ObjectName> <Fields> <string>Id</string> <string>Type</string> <string>Body</string> <string>CreatedDate</string> <string>IsDeleted</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>CommentCount</string> <string>LikeCount</string> <string>LinkUrl</string> <string>ContentData</string> <string>ContentFileName</string> <string>ContentDescription</string> <string>ContentType</string> <string>ContentSize</string> </Fields> </Query> <Query> <ObjectName>FeedComment</ObjectName> <Fields> <string>Id</string> <string>FeedItemId</string> <string>CreatedDate</string> <string>CommentBody</string> <string>IsDeleted</string> 4www.coveo.com 47
  • 52. Coveo Platform 7.0 | Salesforce Connector Guide <string>CommentType</string> <string>ParentId</string> <string>RelatedRecordId</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> <string>Type</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>InsertedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> <PolymorphicRelationships> <PolymorphicRelationship> <RelationshipName>CreatedBy</RelationshipName> <ObjectName>User</ObjectName> </PolymorphicRelationship> </PolymorphicRelationships> </Query> </ArrayOfQuery> What's Next? Create a mapping file for fields from obtained objects (see "Salesforce Mapping File Example for Standard Objects" on page 70). 6.6 Salesforce ObjectsToGet Configuration File Example for Knowledge Base Salesforce Knowledge Base content correspond to non-standard objects and fields. When your Salesforce organization contains Knowledge Base articles and you want to index their content, you must include specific queries to your custom ObjectsToGet configuration file. The ObjectsToGet configuration file example presented in this topic specifies to retrieve two arbitrary named Knowledge Base objects: l MyKBArticleType1 l MyKBArticleType2 Note: The Salesforce connector cannot index permissions of Knowledge Base articles like it can for other objects. It is therefore recommended to create a separate ObjectsToGet configuration file and source for Knowledge Base articles. The following XML code is an ObjectsToGet configuration file example for Knowledge Base articles. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Query> <ObjectName>MyKBArticleType1__ka</ObjectName> <Fields> <string>CaseAssociationCount</string> <string>LastModifiedDate</string> <string>ArticleNumber</string> 4www.coveo.com 48
  • 53. Coveo Platform 7.0 | Salesforce Connector Guide <string>LastPublishedDate</string> <string>FirstPublishedDate</string> <string>SystemModstamp</string> <string>ArchivedDate</string> <string>CreatedDate</string> <string>IsDeleted</string> <string>Id</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> <ChildRelationships> <Query> <ObjectName>CaseArticles</ObjectName> <Fields> <string>CaseId</string> </Fields> </Query> </ChildRelationships> </Query> <Query> <ObjectName>MyKBArticleType1__kav</ObjectName> <Fields> <string>ArchivedDate</string> <string>IsVisibleInPrm</string> <string>Undecipherable_Content__c</string> <string>IsVisibleInApp</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>IsVisibleInPkb</string> <string>PublishStatus</string> <string>IsDeleted</string> <string>Id</string> <string>IsLatestVersion</string> <string>CreatedDate</string> <string>Title</string> <string>LastPublishedDate</string> <string>Summary</string> <string>FirstPublishedDate</string> <string>ArticleNumber</string> <string>Language</string> <string>UrlName</string> <string>VersionNumber</string> <string>IsVisibleInCsp</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> 4www.coveo.com 49
  • 54. Coveo Platform 7.0 | Salesforce Connector Guide </ParentRelationships> </Query> <Query> <ObjectName>MyKBArticleType2__ka</ObjectName> <Fields> <string>CaseAssociationCount</string> <string>LastModifiedDate</string> <string>ArticleNumber</string> <string>LastPublishedDate</string> <string>FirstPublishedDate</string> <string>SystemModstamp</string> <string>ArchivedDate</string> <string>CreatedDate</string> <string>IsDeleted</string> <string>Id</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> <ParentRelationship> <RelationshipName>CreatedBy</RelationshipName> <Fields> <string>Name</string> </Fields> </ParentRelationship> </ParentRelationships> <ChildRelationships> <Query> <ObjectName>CaseArticles</ObjectName> <Fields> <string>CaseId</string> </Fields> </Query> </ChildRelationships> </Query> <Query> <ObjectName>MyKBArticleType2__kav</ObjectName> <Fields> <string>ArchivedDate</string> <string>IsVisibleInPrm</string> <string>IsVisibleInApp</string> <string>LastModifiedDate</string> <string>SystemModstamp</string> <string>IsVisibleInPkb</string> <string>PublishStatus</string> <string>IsDeleted</string> <string>Id</string> <string>IsLatestVersion</string> <string>CreatedDate</string> <string>Title</string> <string>LastPublishedDate</string> <string>Summary</string> <string>FirstPublishedDate</string> <string>ArticleNumber</string> <string>Language</string> <string>UrlName</string> <string>VersionNumber</string> <string>IsVisibleInCsp</string> <string>Recipe__c</string> </Fields> <ParentRelationships> <ParentRelationship> <RelationshipName>LastModifiedBy</RelationshipName> <Fields> <string>Name</string> 4www.coveo.com 50