Coveo Platform 7.0. Salesforce Connector Guide

Size: px
Start display at page:

Download "Coveo Platform 7.0. Salesforce Connector Guide"

Transcription

1 Coveo Platform 7.0 Salesforce Connector Guide

2 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 Copyright 2014, Coveo Solutions Inc. All rights reserved. Coveo is a trademark of Coveo Solutions Inc. This document is protected by copyright and other intellectual property law and is subject to the confidentiality and other restrictions specified in the Coveo License Agreement. Document part number: PM EN Publication date: 12/19/2015 4www.coveo.com ii

3 Table of Contents 1. Salesforce Connector Advantages Relative to the Legacy Connector Features 1 2. Salesforce Connector Deployment Overview 7 3. Salesforce Connector Requirements 9 4. Creating a Salesforce User Identity Creating a Dedicated Salesforce Crawling Account Getting the Security Token for Your Salesforce Account Getting Salesforce Client_ID and Client_Secret Values Salesforce ObjectsToGet Configuration File Salesforce Object Definition Configuration File Elements XML Schema Definition Creating a Salesforce ObjectsToGet Configuration File Salesforce ObjectsToGet Configuration File Example for Standard Objects Salesforce ObjectsToGet Configuration File Example for Knowledge Base Salesforce ObjectsToGet Configuration File Example for CRM Content Salesforce ObjectsToGet Configuration File Example for Chatter Objects Salesforce Connector Configuration Recipes Indexing all Knowledge Base Versions and States Excluding Archived Knowledge Base Articles Indexing Knowledge Base Attachments Fetching Records With Parent Relationships That Must Be Incrementally Updated Fetching Child Relationship to Use for Folding Fetch Child Relationship to Use to Increase or Reduce Results From Queries Minimizing API Calls and Object Description Prefetching Fetching Records Faster Using the Turbo Mode Runner Reducing the Metadata Package Size by Scoping Parents of ContentVersion and Attachment Objects Choosing the Optimal Record Modification Date Field 63 4www.coveo.com iii

4 Removing Leading Zeroes of a Field Using the Currency Field Converter Using the FiscalYearResolver Fixing the Feed Tracking Error Indexing More Than the Built-in FeedItem Types Creating a Salesforce Mapping File Salesforce Mapping File Example for Standard Objects Salesforce Mapping File Example for Knowledge Base Salesforce Mapping File Example for CRM Content Salesforce Mapping File Example for Chatter Objects Configuring a Salesforce Security Provider Configuring an Security Provider Configuring an Active Directory Security Provider Configuring and Indexing a Salesforce Source Modifying Hidden Salesforce Source Parameters Adding an Explicit Connector Parameter Troubleshooting Salesforce Connector Issues API Security Token Required Expired Access/Refresh Token Missing ionic.zip File Refreshing Security Caches 102 4www.coveo.com iv

5 1. Salesforce Connector CES (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. 1.1 Advantages Relative to the Legacy Connector This second generation Salesforce connector offers the following advantages over the Salesforce Legacy connector: Indexing of Salesforce permissions rather than applying the same permission on all source items (see "Indexed Salesforce Security" on page 1) Improved performance and reduced API calls Indexing of Knowledge Base articles and CRM content files Takes advantage of recent Salesforce API versions 1.2 Features Indexed Salesforce Content The connector can index the following Salesforce content: Service Cloud standard/custom objects and fields Multilingual Knowledge base articles Chatter feed items and files [more] CRM Content (binary files such as PDF) Sharing permissions Sandbox and production environments Inactive users User visibility 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 1

6 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. 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. 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. Organization-wide defaults sharing settings These settings specify the level of access your users have to each other's data. 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. 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. 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. Communities Sharing sets are supported in Communities. 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. Permission sets 4www.coveo.com 2

7 Permission sets given to individual users can extend (not restrict) their permissions beyond what is specified in their profile. 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 3

8 Note: The connector does not support the following security aspects: Apex managed sharing 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. 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). 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. 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. 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). 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. Consequently, in search results, all users can see all KB articles under all data categories. 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). 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 4www.coveo.com 4

9 automatically. Notes: The incremental refresh feature limitations: o o 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. Not supported for all not replicateable deleted objects such as deleted ContentVersion (CRM Content and Chatter files) attachments and other items. CES (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. CES (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. CES (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 32). 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 65). Connector Feature History Coveo Platform version Date Features December November 2014 Full support of incremental refreshes on knowledge articles and indexing their publish status Support validating the ObjectsToGet with an XSD [more] June 2014 Support incremental modification of knowledge base articles versions and states [more] Support incremental modification of user profiles 4www.coveo.com 5

10 Coveo Platform version Date Features February January November 2013 Knowledge content searchable by article number without inputting leading zeroes Partial incremental refresh support on knowledge articles Support multilingual knowledge articles Adding support to crawl Chatter feed items and files 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 7). 4www.coveo.com 6

11 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: Service Cloud standard and custom objects and fields Knowledge base articles Chatter 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 9). 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 10). 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 14). 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 19). 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 32). 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 65). 6. Create a custom Salesforce field set CES (April 2014) 4www.coveo.com 7

12 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] \Bin\Coveo.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 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 security provider is needed. In Salesforce, users are identified by their addresses. Consequently, permissions returned by the Salesforce security provider for each document are addresses. The Salesforce security provider then requires another security provider to uniquely identify users from their addresses. The security provider type to use depends on how users are authenticated when they access the search interface: When authenticated with their address, use an security provider (see "Configuring an Security Provider" on page 84). When authenticated with their Active Directory account, use an Active Directory security provider (see "Configuring an Active Directory Security Provider" on page 86). Note: An Active Directory security provider is appropriate only when the User Principal Name (UPN) matches the 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 security provider is needed. A Salesforce source needs a Salesforce security provider (see "Configuring a Salesforce Security Provider" on page 82). 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 89). 10. If you encounter issues: Solve typical issues that return error messages (see "Troubleshooting Salesforce Connector Issues" on page 101). Consider adding and modifying default values of hidden source parameters (see "Modifying Hidden Salesforce Source Parameters" on page 95). 4www.coveo.com 8

13 3. Salesforce Connector Requirements Your environment must meet the following requirements to be able to use the Coveo connector for Salesforce repositories: CES (August 2013) 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. 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 10). 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 10). 4www.coveo.com 9

14 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 11). b. Find the Salesforce Security Token for this account (see "Getting the Security Token for Your Salesforce Account" on page 13). 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 10

15 b. In the User box, enter the user name of the selected Salesforce account, typically the 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 14). 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 11

16 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. iii. In the Existing Profile box, enter a name such as CoveoIndexer. 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. iii. Optionally, select the API Only User option as an additional security measure. Select the Modify All Data option when any of the following situation applies: CES (December 2013) You want to index the Salesforce item permissions. Note: 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. 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. 4. Create a Salesforce user dedicated to the Coveo crawler: 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. 4www.coveo.com 12

17 ii. iii. In the Profile box, select the profile you just created. Click Save. 4.2 Getting the Security Token for Your Salesforce Account When you create a Salesforce account, Salesforce sends an message from support@salesforce.com with subject: salesforce.com security token confirmation to the address associated with the account. This 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 is sent. To get the security token for your Salesforce account 1. In the mailbox for the address associated with the Salesforce account to be used by the Coveo connector, look for the latest message received from support@salesforce.com with subject: salesforce.com security token confirmation. 2. If you cannot find the latest 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 message will be sent. 3. Open the message, and then copy the Security Token value. Example: In the following example, the Security Token value is highlighted. 4www.coveo.com 13

18 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 14

19 a. In the Basic Information section: i. Enter meaningful names in the Connected App Name and API Name boxes. ii. Enter your in the Contact 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. iii. In the Callback URL box, since a callback URL will not be used for this application, enter a dummy but valid secured URL ( such as In the Available OAuth Scopes list, select the following items: 4www.coveo.com 15

20 Access and manage your data (api) Full access (full) 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 16

21 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 11). ii. iii. In the Apps section, click Assigned Connected Apps. In the Assigned Connected Apps section, click Edit, add the connected app you just created to the 4www.coveo.com 17

22 Enabled Connected Apps list, and then click Save. What's Next? Create an ObjectsToGet Configuration file (see "Salesforce ObjectsToGet Configuration File" on page 19). 4www.coveo.com 18

23 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: 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. Which records are returned by specifying conditions on the SOQL query that will be used to filter the query Notes: results. 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 45). 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. CES (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: <ObjectName>Case</ObjectName> <string>*</string> You can use the following SOQL query: <Query value="select * from Case" /> CES (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: Salesforce developers can use the describesobject() method to obtain the complete object definition in JSON format. Example: 4www.coveo.com 19

24 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: 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 (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 20

25 Example: <ObjectName>Account</ObjectName> <string>id</string> <string>isdeleted</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> QueryCondition (optional) Important: CES (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. Field (required): Case-insensitive name of the object field on which the condition is applied. Relationship names can also be used (ex.: Parent.Type). Operator (required): The operator to apply to the condition. Any operator supported by Salesforce SOQL queries can be used (see Comparison Operators). Value (required): Case-sensitive value used to evaluate the condition. String values must be enclosed in single quotes. 4www.coveo.com 21

26 Example: <ObjectName>Account</ObjectName> <string>accountnumber</string> <Conditions> <QueryCondition> <Field>Type</Field> <Operator>!=</Operator> <Value>'Prospect'</Value> </QueryCondition> <QueryCondition> <Field>Owner.Name</Field> <Operator>=</Operator> <Value>'John Smith'</Value> </QueryCondition> </Conditions> 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. 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). Relation (required): The operator to apply to the condition. Supported operators are Equal, NotEqual, Less, LessOrEqual, Greater, GreaterOrEqual, Like, NotLike. SoqlString SoqlBoolean SoqlDateTime (required): Case-sensitive value (not Like) used to evaluate the condition. 4www.coveo.com 22

27 Example: <ObjectName>Account</ObjectName> <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> T00:00: :00</SoqlDateTime> </QueryCondition2> </Conditions> Note: For SoqlDateTime, the date/time format must exactly match YYYY-MM-DDTHH:MM:SS :00 The generated query is: SELECT Name FROM Account WHERE Type!= 'Prospect' AND IsEscalated = true AND LastViewDate >= T00:00:00 InCondition (optional) 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). AllowedValues (required): Case-sensitive possible values of the field. Example: <ObjectName>Account</ObjectName> <Conditions> <InCondition> <Field>Type</Field> <AllowedValues> <string>prospect</string> <string>client</string> </AllowedValues> </InCondition> </Conditions> The generated query is: SELECT Name FROM Account WHERE Type IN ('Prospect', 'Client') 4www.coveo.com 23

28 InQueryCondition (optional) CES (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. Field (required): Case-insensitive name of the object field on which the condition is applied. Relationship names can also be used (ex.: Parent.Type). Query (required): A valid query object (with ObjectName, Fields, etc) (see Semi-Joins or Anti-Joins Relationship Query Limits). Example: <ObjectName>Case</ObjectName> <string>id</string> <Conditions> <InCondition> <Field>Id</Field> <ObjectName>CaseComment</ObjectName> <string>parentid</string> <Conditions> <QueryCondition> <Field>CommentBody</Field> <Operator>=</Operator> <Value>'this is a test'</value> </QueryCondition> </Conditions> </InCondition> </Conditions> 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 (November 2014) Anti-joins are supported in query's conditions (see Comparison Operators). Antijoints are useful when you want to index only a subset of records based on another set of records. Field (required): Case-insensitive name of the object field on which the condition is applied. Relationship names can also be used (ex.: Parent.Type). Query (required): A valid query object (with ObjectName, Fields, etc) (see Semi-Joins or Anti-Joins Query Limits). 4www.coveo.com 24

29 Example: <ObjectName>Case</ObjectName> <string>id</string> <Conditions> <NotCondition> <InCondition> <Field>Id</Field> <ObjectName>CaseComment</ObjectName> <string>parentid</string> <Conditions> <QueryCondition> <Field>CommentBody</Field> <Operator>=</Operator> <Value>'this is a test'</value> </QueryCondition> </Conditions> </InCondition> </NotCondition> </Conditions> 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. RelationshipName (required): The field name of data type Lookup. Fields (required): The name of the fields of the related object that will be available on each record returned by the query. ParentRelationships (optional): Another level of parent relationship, but this time, the relationship applies to the related object. 4www.coveo.com 25

30 Example: <ObjectName>Account</ObjectName> <string>accountnumber</string> <ParentRelationships> <RelationshipName>Owner</RelationshipName> <string> </string> </ParentRelationships> 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. Query (required): A valid query object (with ObjectName, Fields, etc). Example: <ObjectName>Opportunity</ObjectName> <string>id</string> <ChildRelationships> <ObjectName>Attachments</ObjectName> <string>id</string> </ChildRelationships> 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 26

31 Note: When more than one child exist, the fields contain values separated with a semicolon. Example: Attachments.Name: a.jpg;b.jpg Nested child relationships (sub-sub queries) are not supported. Important: The child field is copied to the record. If a child is modified, the indexed record is not updated. 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. Notes: CES (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: <RelationshipName>CreatedBy</RelationshipName> <ObjectName>User</ObjectName> <string>type</string> <string>photourl</string> The two following metadata appear on the record with polymorphic relationships: <polymorphic_ relationship_name>.<field> and <polymorphic_relationship_name>_<object_ name>.<field>. CES (October 2014) The record with polymorphic relationships only provided the metadata named <polymorphic_relationship_name>_<object_name>.<field>. RelationshipName (required): The field name of data type Lookup. ObjectName (optional): The related object type this polymorphic relationship applies to. Note: CES (October 2014) The ObjectName field is required. 4www.coveo.com 27

32 Fields (required): The name of the fields of the related object that will be available on each record returned by the query. ParentRelationships (optional): Another level of parent relationship, but this time, the relationship applies to the related object. Example: <ObjectName>Task</ObjectName> <string>id</string> <string>subject</string> <string>activitydate</string> <ParentRelationships> <RelationshipName>What</RelationshipName> <string>type</string> </ParentRelationships> <PolymorphicRelationships> <RelationshipName>What</RelationshipName> <ObjectName>Account</ObjectName> <string>accountnumber</string> <RelationshipName>What</RelationshipName> <ObjectName>Opportunity</ObjectName> <string>amount</string> <string>totalopportunityquantity</string> </PolymorphicRelationships> Important: The parent field is copied to the record. If a parent is modified, the indexed record is not updated. Order (optional) CES (April 2014) One or more order restrictions that will be applied to the SOQL query used to retrieve Object records. Ascending (optional): The direction of the ordering. Default is true (ascending). Use false for descending. NullsFirst (optional): Whether records with NULL values in the specified fields must be returned first or last. Default is true. Fields (required): One or more fields to base the ordering on, in the specified field order. 4www.coveo.com 28

33 Examples: With the following configuration: Opportunity.Id shows that we can specify the query object name as the parent of the field. Account.Foo.Id is a field on the parent Foo, which is also a field of the parent Account of Opportunity. What.Id is a field on the polymorphic parent What of Opportunity. <ObjectName>Opportunity</ObjectName> <string>id</string> <Order> <Ascending>true</Ascending> <NullsFirst>false</NullsFirst> <string>opportunity.id</string> <string>account.foo.id</string> <string>what.id</string> </Order> 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: <ObjectName>Opportunity</ObjectName> <string>id</string> <ChildRelationships> <ObjectName>Attachments</ObjectName> <string>id</string> <Order> </Order> </ChildRelationships> The generated query is: SELECT Id, (SELECT Id FROM Attachments ORDER BY Name ASC NULLS FIRST) FROM Opportunity 4www.coveo.com 29

34 6.3 XML Schema Definition Note: CES (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=" 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 30

35 <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 32). 4www.coveo.com 31

36 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 19). 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: Service Cloud standard and custom objects and fields Knowledge base articles 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: Salesforce ObjectsToGet Configuration File Example for Standard Objects "Salesforce ObjectsToGet Configuration File Example for Knowledge Base" on page 45 "Salesforce ObjectsToGet Configuration File Example for CRM Content " on page 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 19). c. Save your ObjectsToGet configuration file. 3. Validate your ObjectsToGet configuration file (see "XML Schema Definition" on page 30). 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:\CES7\Config\Salesforce_Basic_ObjectsToGet.xml. 4www.coveo.com 32

37 You will specify the full path to this file when you configure your Salesforce source (see "ObjectsToGet File" on page 91). 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 65). 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: Account Case Case Comment Contact Event Solution Task User Attachment Feed item (Chatter) CES (November 2013) Feed comment (Chatter) CES (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=" xmlns:xsd=" <ObjectName>Account</ObjectName> <string>id</string> <string>isdeleted</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 33

38 <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> <ParentRelationships> <RelationshipName>MasterRecord</RelationshipName> <RelationshipName>Parent</RelationshipName> <RelationshipName>Owner</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> </ParentRelationships> <ObjectName>Case</ObjectName> <string>id</string> <string>isdeleted</string> <string>casenumber</string> <string>suppliedname</string> <string>supplied </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 34

39 <string>systemmodstamp</string> <ParentRelationships> <RelationshipName>Contact</RelationshipName> <RelationshipName>Account</RelationshipName> <RelationshipName>Asset</RelationshipName> <RelationshipName>Parent</RelationshipName> <string>casenumber</string> <string>subject</string> <RelationshipName>Owner</RelationshipName> <string>type</string> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> </ParentRelationships> <PolymorphicRelationships> <RelationshipName>Owner</RelationshipName> <ObjectName>Group</ObjectName> <RelationshipName>Owner</RelationshipName> <ObjectName>User</ObjectName> </PolymorphicRelationships> <ObjectName>CaseComment</ObjectName> <string>id</string> <string>ispublished</string> <string>commentbody</string> <string>createddate</string> <string>systemmodstamp</string> <string>lastmodifieddate</string> <string>isdeleted</string> 4www.coveo.com 35

40 <ParentRelationships> <RelationshipName>Parent</RelationshipName> <string>casenumber</string> <string>subject</string> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> </ParentRelationships> <ObjectName>Contact</ObjectName> <string>id</string> <string>isdeleted</string> <string>lastname</string> <string>firstname</string> <string>salutation</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> </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> <ParentRelationships> <RelationshipName>MasterRecord</RelationshipName> <RelationshipName>Account</RelationshipName> 4www.coveo.com 36

41 <RelationshipName>ReportsTo</RelationshipName> <RelationshipName>Owner</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> </ParentRelationships> <ObjectName>Event</ObjectName> <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> <ParentRelationships> <RelationshipName>Who</RelationshipName> <string>type</string> 4www.coveo.com 37

42 <RelationshipName>What</RelationshipName> <string>type</string> <RelationshipName>Account</RelationshipName> <RelationshipName>Owner</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> </ParentRelationships> <PolymorphicRelationships> <RelationshipName>Who</RelationshipName> <ObjectName>Contact</ObjectName> <RelationshipName>Who</RelationshipName> <ObjectName>Lead</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Account</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Asset</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Campaign</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Case</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Contract</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Magic_Item c</objectname> <RelationshipName>What</RelationshipName> <ObjectName>Opportunity</ObjectName> 4www.coveo.com 38

43 <RelationshipName>What</RelationshipName> <ObjectName>Product2</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Solution</ObjectName> </PolymorphicRelationships> <ObjectName>Solution</ObjectName> <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> <ParentRelationships> <RelationshipName>Owner</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> </ParentRelationships> <ObjectName>Task</ObjectName> <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 39

44 <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> <ParentRelationships> <RelationshipName>Who</RelationshipName> <string>type</string> <RelationshipName>What</RelationshipName> <string>type</string> <RelationshipName>Owner</RelationshipName> <RelationshipName>Account</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> </ParentRelationships> <PolymorphicRelationships> <RelationshipName>Who</RelationshipName> <ObjectName>Contact</ObjectName> <RelationshipName>Who</RelationshipName> <ObjectName>Lead</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Account</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Asset</ObjectName> <RelationshipName>What</RelationshipName> 4www.coveo.com 40

45 <ObjectName>Campaign</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Case</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Contract</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Magic_Item c</objectname> <RelationshipName>What</RelationshipName> <ObjectName>Opportunity</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Product2</ObjectName> <RelationshipName>What</RelationshipName> <ObjectName>Solution</ObjectName> </PolymorphicRelationships> <ObjectName>User</ObjectName> <string>id</string> <string>username</string> <string>lastname</string> <string>firstname</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> </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>receivesinfo s</string> <string>receivesadmininfo s</string> <string> encodingkey</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 41

46 <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>userpreferencesdisableallfeeds </string> <string>userpreferencesdisablefollowers </string> <string>userpreferencesdisableprofilepost </string> <string>userpreferencesdisablechangecomment </string> <string>userpreferencesdisablelatercomment </string> <string>userpreferencesdisprofpostcomment </string> <string>userpreferencescontentno </string> <string>userpreferencescontent asandwhen</string> <string>userpreferencesapexpagesdevelopermode</string> <string>userpreferenceshidecsngetchattermobiletask</string> <string>userpreferencesdisablementionspost </string> <string>userpreferencesdismentionscomment </string> <string>userpreferenceshidecsndesktoptask</string> <string>userpreferencesdiscommentafterlike </string> <string>userpreferencesdisablelike </string> <string>userpreferencesdisablemessage </string> <string>userpreferencesoptoutoftouch</string> <string>userpreferencesdisablebookmark </string> <string>userpreferencesdisablesharepost </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> <ParentRelationships> <RelationshipName>UserRole</RelationshipName> <RelationshipName>Profile</RelationshipName> <RelationshipName>Manager</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> 4www.coveo.com 42

47 <RelationshipName>Contact</RelationshipName> </ParentRelationships> <ObjectName>Attachment</ObjectName> <string>id</string> <string>isdeleted</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> <ParentRelationships> <RelationshipName>Parent</RelationshipName> <string>type</string> <RelationshipName>Owner</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> </ParentRelationships> <PolymorphicRelationships> <RelationshipName>Parent</RelationshipName> <ObjectName>Account</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Asset</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Campaign</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Case</ObjectName> 4www.coveo.com 43

48 <RelationshipName>Parent</RelationshipName> <ObjectName>Contact</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Contract</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName> Template</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Event</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Lead</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Magic_Item c</objectname> <RelationshipName>Parent</RelationshipName> <ObjectName>Opportunity</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Product2</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Solution</ObjectName> <RelationshipName>Parent</RelationshipName> <ObjectName>Task</ObjectName> </PolymorphicRelationships> <ObjectName>FeedItem</ObjectName> <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> <ObjectName>FeedComment</ObjectName> <string>id</string> <string>feeditemid</string> <string>createddate</string> <string>commentbody</string> <string>isdeleted</string> 4www.coveo.com 44

49 <string>commenttype</string> <string>parentid</string> <string>relatedrecordid</string> <ParentRelationships> <RelationshipName>CreatedBy</RelationshipName> <string>type</string> <RelationshipName>InsertedBy</RelationshipName> </ParentRelationships> <PolymorphicRelationships> <RelationshipName>CreatedBy</RelationshipName> <ObjectName>User</ObjectName> </PolymorphicRelationships> </ArrayOfQuery> What's Next? Create a mapping file for fields from obtained objects (see "Salesforce Mapping File Example for Standard Objects" on page 66). 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: MyKBArticleType1 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=" xmlns:xsd=" <ObjectName>MyKBArticleType1 ka</objectname> <string>caseassociationcount</string> <string>lastmodifieddate</string> <string>articlenumber</string> 4www.coveo.com 45

50 <string>lastpublisheddate</string> <string>firstpublisheddate</string> <string>systemmodstamp</string> <string>archiveddate</string> <string>createddate</string> <string>isdeleted</string> <string>id</string> <ParentRelationships> <RelationshipName>LastModifiedBy</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> </ParentRelationships> <ChildRelationships> <ObjectName>CaseArticles</ObjectName> <string>caseid</string> </ChildRelationships> <ObjectName>MyKBArticleType1 kav</objectname> <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> <ParentRelationships> <RelationshipName>LastModifiedBy</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> 4www.coveo.com 46

51 </ParentRelationships> <ObjectName>MyKBArticleType2 ka</objectname> <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> <ParentRelationships> <RelationshipName>LastModifiedBy</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> </ParentRelationships> <ChildRelationships> <ObjectName>CaseArticles</ObjectName> <string>caseid</string> </ChildRelationships> <ObjectName>MyKBArticleType2 kav</objectname> <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> <ParentRelationships> <RelationshipName>LastModifiedBy</RelationshipName> 4www.coveo.com 47

52 <RelationshipName>CreatedBy</RelationshipName> </ParentRelationships> </ArrayOfQuery> What's Next? Create a mapping file for fields from obtained objects (see "Salesforce Mapping File Example for Knowledge Base" on page 76). 6.7 Salesforce ObjectsToGet Configuration File Example for CRM Content With Salesforce CRM Content you can organize, share, search, and manage content within your organization and across key areas of the Salesforce application. CRM Content can include all file types, from traditional business documents such as Microsoft Office documents to audio files, video files, Web pages, and Google docs (see the Salesforce document Salesforce CRM Content Overview). When your Salesforce organization contains CRM Content and you want to index the content of these files, you must include additional queries to your custom ObjectsToGet configuration file. The following XML code is an ObjectsToGet configuration file example for Chatter files. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>ContentVersion</ObjectName> <string>createddate</string> <string>lastmodifieddate</string> <string>systemmodstamp</string> <string>isdeleted</string> <string>id</string> <string>contentdocumentid</string> <string>contentmodifiedbyid</string> <string>contentmodifieddate</string> <string>contentsize</string> <string>contenturl</string> <string>description</string> <string>featuredcontentboost</string> <string>featuredcontentdate</string> <string>filetype</string> <string>firstpublishlocationid</string> <string>islatest</string> <string>negativeratingcount</string> <string>origin</string> <string>ownerid</string> <string>pathonclient</string> <string>positiveratingcount</string> <string>publishstatus</string> <string>ratingcount</string> <string>reasonforchange</string> <string>tagcsv</string> <string>title</string> 4www.coveo.com 48

53 <string>versiondata</string> <string>versionnumber</string> </ArrayOfQuery> The following XML code is an ObjectsToGet configuration file example for CRM Content. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>ContentVersion</ObjectName> <string>id</string> <string>islatest</string> <string>contenturl</string> <string>title</string> <string>isdeleted</string> <string>contentmodifieddate</string> <string>createddate</string> <string>lastmodifieddate</string> <string>systemmodstamp</string> <string>publishstatus</string> <string>versiondata</string> <string>contentsize</string> <string>origin</string> <ParentRelationships> <RelationshipName>ContentDocument</RelationshipName> <string>title</string> <RelationshipName>Owner</RelationshipName> <RelationshipName>CreatedBy</RelationshipName> <RelationshipName>LastModifiedBy</RelationshipName> <RelationshipName>FirstPublishLocation</RelationshipName> <string>type</string> </ParentRelationships> <PolymorphicRelationships> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Account</ObjectName> 4www.coveo.com 49

54 <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Asset</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Campaign</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Case</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>CollaborationGroup</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Contact</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>ContentWorkspace</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Contract</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Dashboard</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>DashboardComponent</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Event</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Lead</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Lost_Scroll ka</objectname> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Magic_Item c</objectname> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Magic_Spell ka</objectname> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Opportunity</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Product2</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Report</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> 4www.coveo.com 50

55 <ObjectName>Site</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Solution</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>Task</ObjectName> <RelationshipName>FirstPublishLocation</RelationshipName> <ObjectName>User</ObjectName> </PolymorphicRelationships> </ArrayOfQuery> What's Next? Create a mapping file for fields from obtained objects (see "Salesforce Mapping File Example for CRM Content" on page 78). 6.8 Salesforce ObjectsToGet Configuration File Example for Chatter Objects A variety of Salesforce objects such as User, CollaborationGroup, Account, and Case can have Chatter feeds. The list of Salesforce objects having Chatter feeds can be customized and is retrieved dynamically by the Salesforce connector. 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. Chatter feed comments are fetched along with their parent feed item as a child relationship, they do not require additional API calls. By default, the Salesforce connector supports the following Chatter objects and their types: FeedItem for feed item of types: o o o o TextPost: a direct text entry on a feed LinkPost: a URL posting on a feed ContentPost: an uploaded file on a feed PollPost: a poll posted on a feed FeedComment for comments on a feed item of types o o ContentComment: an uploaded file on a comment TextComment: a direct text entry on a comment ContentVersion for Chatter files o FeedContent: File (ContentVersion) linked to Chatter comment You can add or remove some Chatter types (see "Indexing More Than the Built-in FeedItem Types" on page 64) such as the following: 4www.coveo.com 51

56 Non default FeedItem types: o o o o o o o o o o o DashboardComponentSnapshot: a posting of a dashboard snapshot on a feed TrackedChange: a change or group of changes to a tracked field UserStatus: automatically generated when a user adds a post ApprovalPost: automatically generated by a feed query on an approval item CollaborationGroupCreated: automatically generated post on a user feed when the user creates a public group ActivityEvent: generated event when a user or the API adds a task associated with a feed-enabled parent record (excluding tasks on cases) CaseCommentPost: generated event when a user adds a case comment for a case object MessageEvent: generated event when an related to a case object is sent or received CallLogPost: generated event when a user logs a call for a case through the user interface. This event is also generated by CTI (computer-telephony integration) calls. ChangeStatusPost: generated event when a user changes the status of a case AttachArticleEvent: generated event when a user attaches an article to a case CollaborationGroup You can use metadata to link related Chatter items: Any type of feed item and it's comment(s): FeedItem.Id == FeedComment.FeedItemId A feed item of type ContentPost and the corresponding uploaded Chatter file: FeedItem.RelatedRecordId == ContentVersion.Id A feed comment of type ContentComment and the corresponding uploaded Chatter file: FeedComment.RelatedRecordId == ContentVersion.Id The following code sample is the content of the ObjectsToGet configuration file example for Chatter feed for standard Service Cloud objects and fields. Important: Both FeedItem and FeedComment objects must be present in the configuration file. Only Chatter feeds for objects (ex.: User, CollaborationGroup, Account...) that are also present in the configuration file will be processed. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>FeedItem</ObjectName> <string>id</string> 4www.coveo.com 52

57 <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> <ObjectName>FeedComment</ObjectName> <string>id</string> <string>feeditemid</string> <string>createddate</string> <string>commentbody</string> <string>isdeleted</string> <string>commenttype</string> <string>parentid</string> <string>relatedrecordid</string> <ParentRelationships> <RelationshipName>CreatedBy</RelationshipName> <string>type</string> <RelationshipName>InsertedBy</RelationshipName> </ParentRelationships> <PolymorphicRelationships> <RelationshipName>CreatedBy</RelationshipName> <ObjectName>User</ObjectName> </PolymorphicRelationships> <ObjectName>ContentVersion</ObjectName> <string>createddate</string> <string>lastmodifieddate</string> <string>systemmodstamp</string> <string>isdeleted</string> <string>id</string> <string>contentdocumentid</string> <string>contentmodifiedbyid</string> <string>contentmodifieddate</string> <string>contentsize</string> <string>contenturl</string> <string>description</string> <string>featuredcontentboost</string> <string>featuredcontentdate</string> <string>filetype</string> <string>firstpublishlocationid</string> <string>islatest</string> 4www.coveo.com 53

58 <string>negativeratingcount</string> <string>origin</string> <string>ownerid</string> <string>pathonclient</string> <string>positiveratingcount</string> <string>publishstatus</string> <string>ratingcount</string> <string>reasonforchange</string> <string>tagcsv</string> <string>title</string> <string>versiondata</string> <string>versionnumber</string> </ArrayOfQuery> What's Next? Create a mapping file for fields from obtained objects (see "Salesforce Mapping File Example for Chatter Objects" on page 80). 6.9 Salesforce Connector Configuration Recipes This topic provides Salesforce connector configuration solutions for various cases you may encounter when you want to optimize the searchability of your Salesforce content Indexing all Knowledge Base Versions and States A Knowledge Base (KB) article has a state and a version. By default, the connector fetches the latest version of an article with the online (published) status. Note: By default, the connector does not remove documents that are archived, but you can change this behavior (see "Excluding Archived Knowledge Base Articles" on page 56). The fields PublishStatus and IsLatestVersion respectively control which article version and state are fetched. Fetching all the versions and states means: Fetch the online articles Fetch the drafts articles Fetch the latest archived articles Fetch other archived articles The following ObjectsToGet configuration file example for an article of type Documentation gets Draft, Online, and Archived articles. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>Documentation ka</objectname> <string>id</string> <string>lastpublisheddate</string> 4www.coveo.com 54

59 <ObjectName>Documentation kav</objectname> <string>id</string> <string>title</string> <string>publishstatus</string> <string>islatestversion</string> <Conditions> <QueryCondition> <Field>PublishStatus</Field> <Operator>=</Operator> <Value>'Archived'</Value> </QueryCondition> <QueryCondition> <Field>IsLatestVersion</Field> <Operator>=</Operator> <Value>False</Value> </QueryCondition> </Conditions> <ObjectName>Documentation kav</objectname> <string>id</string> <string>title</string> <string>publishstatus</string> <string>islatestversion</string> <Conditions> <QueryCondition> <Field>PublishStatus</Field> <Operator>=</Operator> <Value>'Archived'</Value> </QueryCondition> <QueryCondition> <Field>IsLatestVersion</Field> <Operator>=</Operator> <Value>True</Value> </QueryCondition> </Conditions> <ObjectName>Documentation kav</objectname> <string>id</string> <string>title</string> <string>publishstatus</string> <string>islatestversion</string> <Conditions> <QueryCondition> <Field>PublishStatus</Field> <Operator>=</Operator> <Value>'Draft'</Value> </QueryCondition> </Conditions> <ObjectName>Documentation kav</objectname> <string>id</string> <string>title</string> <string>publishstatus</string> <string>islatestversion</string> <Conditions> <QueryCondition> 4www.coveo.com 55

60 <Field>PublishStatus</Field> <Operator>=</Operator> <Value>'Online'</Value> </QueryCondition> </Conditions> </ArrayOfQuery> Excluding Archived Knowledge Base Articles Note: CES (December 2015) If archived KB articles are not indexed, they are automatically deleted during an incremental refresh whether the islatestversion parameter value is true or false. CES (October 2015) Archived KB articles can be removed in an incremental refresh using a destructive query as shown in the following ObjectsToGet configuration file example. This query will remove previously indexed documents from the index instead of adding/updating them. Important: You do not need to specify fields or relationships for destructive queries. Found records will only be deleted. Keeping your ObjectsToGet short and sweet helps with debugging. Non-replicateable deleted objects cannot be deleted using a destructive query. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>Documentation ka</objectname> <string>id</string> <string>lastpublisheddate</string> <ObjectName>Documentation kav</objectname> <string>id</string> <string>title</string> <ObjectName>Documentation kav</objectname> <FoundRecordsAreDeleted>true</FoundRecordsAreDeleted> <Conditions> <QueryCondition> <Field>PublishStatus</Field> <Operator>=</Operator> <Value>'Archived'</Value> </QueryCondition> <QueryCondition> <Field>IsLatestVersion</Field> <Operator>=</Operator> <Value>True</Value> </QueryCondition> </Conditions> <ObjectName>Documentation kav</objectname> <FoundRecordsAreDeleted>true</FoundRecordsAreDeleted> 4www.coveo.com 56

61 <Conditions> <QueryCondition> <Field>PublishStatus</Field> <Operator>=</Operator> <Value>'Archived'</Value> </QueryCondition> <QueryCondition> <Field>IsLatestVersion</Field> <Operator>=</Operator> <Value>False</Value> </QueryCondition> </Conditions> </ArrayOfQuery> Indexing Knowledge Base Attachments The Salesforce connector processes attachments on KB articles differently compared to normal objects (which rely on the Attachment object). Attachments on KB articles are automatically indexed when fields ending with Name s are specified in the ObjectsToGet configuration file such is in the following example to index the attachment of an article of type Documentation. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>Documentation ka</objectname> <string>id</string> <ObjectName>Documentation kav</objectname> <string>id</string> <string>attachment Name s</string> </ArrayOfQuery> An entry in the mapping file must also exist. As you can see below, the name of the mapping is [NameOfArticleType] Attachment: <?xml version="1.0" encoding="windows-1252"?> <SalesForce>... <Mapping type="documentation Attachment"> <ContentType>binarydata</ContentType>... </Mapping>... </SalesForce> Fetching Records With Parent Relationships That Must Be Incrementally Updated It is not uncommon to need to index a record with fields referring to a parent of a child relationship. The traditional way to achieve this is to use the <ChildRelationships/>, <ParentRelationships/> or <PolymorphicRelationships/> elements in a Query definition. However, using those element will give you records that will not be refreshed correctly. When record A references a field of the record B and record B changes, record A won't be updated in an incremental refresh. 4www.coveo.com 57

62 Let's take a specific example, where an Opportunity is referring to an Account name. The following ObjectsToGet configuration file example produces one Opportunity record with the metadata ["Id", "Account.Name"]: <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>Opportunity</ObjectName> <string>id</string> <ParentRelationships> <RelationshipName>Account</RelationshipName> </ParentRelationships> </ArrayOfQuery> You can solve this problem using the foreign keys. You must create two queries instead of one. The following ObjectsToGet configuration file example produces one Opportunity record with the metadata ["AccountId"] and one Account record with the metadata ["Id", "Name"]. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>Opportunity</ObjectName> <string>accountid</string> <ObjectName>Account</ObjectName> <string>id</string> </ArrayOfQuery> With metadata mapped to fields as follow: Opportunity AccountId: sfaccountid Account Id: sfaccountid Name: sfaccountname You must edit the CES [Index_Path]\Config\Config.txt file to link the two records using foreign keys as shown below: Important: Manually modifying the CES configuration file may have important advert consequences, particularly when your Coveo deployment includes one or more Mirror servers. Contact Coveo Support for assistance to set up foreign keys. 4www.coveo.com 58

63 <PhysicalIndex>... <ForeignKeys> <ForeignKey ID="1"> <KeyField>sfaccountid</KeyField> <ValueField>sfaccountname</ValueField> <FreeTextSearch>false</FreeTextSearch> </ForeignKey> </ForeignKeys>... </PhysicalIndex> Fetching Child Relationship to Use for Folding Fetching child relationships which are used in folding (aka: no facet) so they play well with incremental refresh is done through results folding. Let's take a specific example, where a Case is referring to CaseComments. Similarly to the fetching parent relationship case, avoid using the <ChildRelationships/> element as shown below and producing one Case record with the metadata ["Id", "CaseComments.CommentBody"]. <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>Case</ObjectName> <string>id</string> <ChildRelationships> <ObjectName>CaseComments</ObjectName> <string>commentbody</string> </ChildRelationships> </ArrayOfQuery> Rather use two or more queries: <?xml version="1.0" encoding="utf-8"?> <ArrayOfQuery xmlns:xsi=" xmlns:xsd=" <ObjectName>Case</ObjectName> <string>id</string> <ObjectName>CaseComment</ObjectName> <string>id</string> <string>parentid</string> </ArrayOfQuery> Now all that is left to do is to use the user interface folding component to fold CaseComments under Case documents like in the Coveo JavaScript Search (see Folding Component). 4www.coveo.com 59

64 6.9.6 Fetch Child Relationship to Use to Increase or Reduce Results From Queries Fetching child relationships which are used to increase or reduce the number of results (aka: no facet) so they play well with incremental refresh is done through nested queries. Like in other cases, avoid using the <ChildRelationships/> element and rather use two or more queries. You can use the example from the previous recipe for the ObjectsToGet configuration file. You can then use the nested query in the query parameters or the query extension language of the user interface. A simple, but real use case is to query the Cases AND CaseComments documents but only return Cases q] // Where q is the keyword Minimizing API Calls and Object Description Prefetching By default, the connector prefetches the descriptions of every object in the Salesforce organization to minimize the number of API calls used based on the following assumptions: Fetching an object costs 1 API call. Prefetching 200 objects costs 1 API call. An organization typically has objects. An ObjectsToGet configuration file typically queries objects. Example: An organization has 1000 objects and the source query in the ObjectsToGet configuration file includes 20 objects. An incremental refresh is scheduled every 5 minutes, so 24 h / 5 min = 288 refreshes per day. Without prefetching: 20 obj. * 288 incr. refr. = 5760 calls per day. With prefetching: (1000 obj. / 200 obj. per prefetch) * 288 incr. refr. = 1440 calls per day. Using prefetching consumes four times less calls in this case. Prefetching object descriptions does not always minimize API calls. Example: An organization has 2000 objects and the source query in the ObjectsToGet configuration file includes 5 objects. An incremental refresh is scheduled every 5 minutes, so 24 h / 5 min = 288 refreshes per day. Without prefetching: 5 obj. * 288 incr. refr. = 1440calls per day. With prefetching: (2000 obj. / 200 obj. per prefetch) * 288 incr. refr. = 2880 calls per day. In this scenario, turning off prefetching is beneficial. You can turn prefetching off by setting the hidden Salesforce source parameter PrefetchObjectDescriptions to False (see "PrefetchObjectDescriptions" on page 97). The formula to determine the optimal value for the PrefetchObjectDescriptions parameter is: PrefetchObjectDescriptions = ObjectsToGet.Objects.Count > Organization.Objects.Count / 200 4www.coveo.com 60

65 6.9.8 Fetching Records Faster Using the Turbo Mode Runner The connector default behavior when fetching records of a query is: 1. Make an API call to get page 1, and then wait for the records. 2. Process the records. 3. Make an API call to get page 2, and so on. For some queries, this process can take days. The alternative solution in such cases is to use the TurboMode runner. When to use Consider using the TurboMode runner when: The query generally takes a long time to execute. An investigation showed that Salesforce returns small pages of results (ex: 1-5 items per page). An investigation showed that Salesforce takes a long time to generate a page (ex: 1-3 seconds per page). The following disadvantages are acceptable: o o o o More API calls are needed. More free memory is needed. Does not work for queries with an IN condition on Id. Fetched items are not sorted (so pausing/resuming the connector on that query will refetch all the items). Important: A Salesforce source using the TurboMode runner for one of its queries must have its own dedicated credentials to prevent errors for other sources running in parallel. How to use You can activate the TurboMode runner in the ObjectsToGet configuration file as follows: <Runner>TurboMode</Runner>... How it works With the Turbo Mode query runner, the Salesforce connector executes two query types in parallel: Id fetcher One query asynchronously fetches all the ids of the records and puts them in a queue. This query is executed by 1 thread and is fast, regardless of the real query to execute. Record fetchers 4www.coveo.com 61

66 Several queries representing the real query to execute, take up to 200 ids each, fetch the records, and put them in another queue. These queries are slow, but are executed in parallel by N threads. In practice, N = 8, limited by a hard limit from Salesforce (see Query Locator). The query runner coordinates the threads and serves the fetched records to the caller as a simple only-read-once IEnumerable. Example: The following query applies to 100,000 records. SELECT Id, Subject, (SELECT FROM Shares) FROM Account With the default runner, if Salesforce sends pages of 5 records every 3 seconds, it will take more than 16 hours to fetch all the records. With the TurboMode runner, the Id fetcher query is: SELECT Id FROM Account and the Record fetcher queries are: SELECT Id, Subject, (SELECT FROM Shares) FROM Account WHERE Id IN (...) Note: Between fetching IDs and fetching records, records can be deleted in Salesforce. In this case, the IDs are simply ignored by Salesforce Reducing the Metadata Package Size by Scoping Parents of ContentVersion and Attachment Objects ContentVersion and Attachment objects look up their parent objects to resolve record permissions. The default behavior of the connector is to fetch the metadata package for all parents of those objects to determine their sharing models. For some Salesforce organizations, the fetched metadata package can become too big. You can specify a special InCondition on the field ParentObjectType in the ObjectsToGet configuration file to scope the parents of a record to specific values and consequently, reduce the size of the metadata package to fetch. Important: With this technique, permissions on records are not fully indexed. Only parent records of specified parent objects are considered to determine the permissions of records. 4www.coveo.com 62

67 Example: With the following query, the ContentVersion record permissions are the aggregation of parent Case and Opportunity records. <ObjectName>ContentVersion</ObjectName> <string>id</string> <Conditions> <InCondition> <Field>ParentObjectType</Field> <AllowedValues> <SoqlString>Case</SoqlString> <SoqlString>Opportunity</SoqlString> </AllowedValues> </InCondition> </Conditions> Choosing the Optimal Record Modification Date Field When indexing records, you can select from multiple fields such as the following to set the record modification date: SystemModstamp: Updated when a user or a script modifies the record. LastModifiedDate: Updated when a user modifies the record. CreatedDate: Set when the record is created. The preferred field is SystemModstamp because it is updated more often. Example: In a frequent scenario where a Case is assigned to a user or a queue due to assignment rules, the OwnerId field is modified by an internal script. The SystemModstamp field is modified but not LastModifiedDate and CreatedDate Removing Leading Zeroes of a Field When a field is an Auto Number, the connector produces an extra metadata with the suffix stripped that contains the value without the leading zeros. You can use this field when you want to show or use the values without the leading zeroes. Example: MyField c: MyField c stripped: Using the Currency Field Converter The connector is able to interpret currencies. When the user crawling the source is configured with a Single Currency mode, extra metadata is generated for records. When a field is a currency, its value is converted to the user currency and a new metadata is created with the suffix _converted. 4www.coveo.com 63

68 Using the FiscalYearResolver When a field is a date and has a value, the fiscal year resolver creates additional metadata on the records with the following suffixes: fiscal_year fiscal_quarter fiscal_month fiscal_week fiscal_pretty_quarter You can turn off the creation of these extra metadata by setting the LoadFiscalYearMetadata hidden source parameter to False (see "LoadFiscalYearMetadata (Boolean)" on page 95) Fixing the Feed Tracking Error You can get a typical Salesforce source error that looks like: Error with ID 'SALESFORCE_INVALID_QUERY': Cannot find child relationship 'Feeds' on object 'Products/Licenses' ('Case'). Make sure 'Feed Tracking' is enabled for this object in Salesforce. When indexing Chatter items, the connector checks the parent related to field on all Chatter objects to differentiate a Chatter object from a normal object. Some objects do not have the child relationship 'Feeds' because the feed tracking is disable. This relationship is how the connector obtains related Chatter object. You can resolve this error type by activating feed tracking (see Customizing Chatter Feed Tracking) Indexing More Than the Built-in FeedItem Types By default, the connector indexes the following Chatter feed types: TextPost, LinkPost, ContentPost, and PollPost. In the ObjectsToGet configuration file, you can override this behavior using an InCondition in the query definition of FeedItem. Example: The following ObjectsToGet configuration file query indexes only FeedItem of types TextPost and TrackedChanged. <ObjectName>FeedItem</ObjectName> <string>id</string> <Conditions> <InCondition> <Field>Type</Field> <AllowedValues> <SoqlString>TextPost</SoqlString> <SoqlString>TrackedChange</SoqlString> </AllowedValues> </InCondition> </Conditions> 4www.coveo.com 64

69 7. Creating a Salesforce Mapping File The Coveo Salesforce connector can optionally use a mapping file to determine how to transfer values retrieved from Salesforce object fields to Coveo document fields. By default, when no mapping file is referenced in a source, the connector creates a Coveo document field for each Salesforce object field using the same name. A Salesforce mapping file specifies: Salesforce objects, fields, and binary data to index. The body of the indexed documents. Item relationships You may want to create a mapping file and link it to a source when you want to: Control which Salesforce object fields are indexed. Only those mapped are indexed. Group two or more Salesforce object field to create one Coveo field. Add a prefix such as sf to Coveo fields for example to distinguish them from fields with the same name from other types of sources. Define a custom body for one or more objects to control what appears in search result excerpt and Quick View for these objects. Manage custom elements. It is recommended to create separate mapping files with separate sources for the following types of Salesforce content: Service Cloud standard and custom objects and fields Knowledge base articles CRM Content Chatter To create a Salesforce mapping file 1. Refer to the most appropriate of the following topics to copy the content of the corresponding XML mapping file to start with a set of mappings: "Salesforce Mapping File Example for Standard Objects" on page 66 "Salesforce Mapping File Example for Knowledge Base" on page 76 "Salesforce Mapping File Example for CRM Content" on page 78 "Salesforce Mapping File Example for Chatter Objects" on page Using a text editor: 4www.coveo.com 65

70 a. Paste the content of the copied mapping file. b. When applicable to your Salesforce organization: Modify or remove mappings for standard objects and fields. Add mappings for custom objects and fields. Note: CES comes with built-in Salesforce Legacy connector fields where field names are prefixed with syssf (see API Reference syssf fields). You can reuse these fields with this second generation Salesforce connector to be able to use the out-of-the-box Coveo.NET Front-End CRM search interface. c. Save your mapping file. 3. Using an administrator account, connect to the Coveo Master server, and copy your custom mapping file to a location accessible to CES. Example: On the Coveo Master server, save the mapping file for Knowledge Base articles as: D:\CES7\Config\Salesforce_KB_mapping.xml. You will specify the full path to this file when you configure your Salesforce source (see "Mapping File" on page 92). What's Next? Configure an security provider needed by the Salesforce security provider (see "Configuring an Security Provider" on page 84). 7.1 Salesforce Mapping File Example for Standard Objects The basic mapping file example presented in this topic includes mappings for Salesforce Service Cloud standard objects and fields that can be useful to index. This example is a good starting point to create a new Salesforce mapping file. The example contains mapping for the following Service Cloud standard objects: Binary data Account Case Case comment Contact Event Solution Task User Attachment 4www.coveo.com 66

71 <?xml version="1.0" encoding="utf-8"?> <Salesforce> <CommonMapping> <ContentType>binarydata</ContentType> <ModifiedDate>%[LastModifiedDate]</ModifiedDate> <CustomFields> <CustomField name="sourcetype">salesforce</customfield> <CustomField name="sforganizationid">%[coveo_organization_id]</customfield> <CustomField name="sysauthor">%[owner.name]</customfield> <CustomField name="sysdate">%[systemmodstamp]</customfield> <CustomField name="syssfid">%[id]</customfield> <CustomField name="sfid">%[id]</customfield> <CustomField name="sfname">%[name]</customfield> <CustomField name="sfcreateddate">%[createddate]</customfield> <CustomField name="sfcreatedbyname">%[createdby.name]</customfield> <CustomField name="sfcreatedbyid">%[createdby.id]</customfield> <CustomField name="sfisdeleted">%[isdeleted]</customfield> <CustomField name="sfparticipantid">%[createdby.id];%[owner.id];%[lastmodifiedby.id];% [Contact.Id]</CustomField> <CustomField name="sfparticipantname">%[createdby.name];%[owner.name];%[lastmodifiedby.name];% [Contact.Name]</CustomField> </CustomFields> </CommonMapping> <Mapping type="account"> <Title>%[Name]</Title> <Body>%[Description]</Body> <CustomFields> <CustomField name="objecttype">account</customfield> <CustomField name="objecttypename">account</customfield> <CustomField name="sfinterfaceid">service</customfield> <CustomField name="sfaccountannualrevenue">%[annualrevenue]</customfield> <CustomField name="sfaccountannualrevenueconverted">%[annualrevenue_converted]</customfield> <CustomField name="sfaccountdescription">%[description]</customfield> <CustomField name="sfaccountid">%[id]</customfield> <CustomField name="sfaccountname">%[name]</customfield> <CustomField name="sfaccountnumber">%[accountnumber]</customfield> <CustomField name="sfaccountnumberofemployees">%[numberofemployees]</customfield> <CustomField name="sfaccountownership">%[ownership]</customfield> <CustomField name="sfaccountphone">%[phone]</customfield> <CustomField name="sfaccountrating">%[rating]</customfield> <CustomField name="sfaccountsic">%[sic]</customfield> <CustomField name="sfaccountsicdesc">%[sicdesc]</customfield> <CustomField name="sfaccountsite">%[site]</customfield> <CustomField name="sfaccountsource">%[accountsource]</customfield> <CustomField name="sfaccounttickersymbol">%[tickersymbol]</customfield> <CustomField name="sfaccounttype">%[type]</customfield> <CustomField name="sfaccountwebsite">%[website]</customfield> <CustomField name="sfcity">%[billingcity]</customfield> <CustomField name="sfcountry">%[billingcountry]</customfield> <CustomField name="sffax">%[fax]</customfield> <CustomField name="sfindustry">%[industry]</customfield> <CustomField name="sfjigsaw">%[jigsaw]</customfield> <CustomField name="sfjigsawcompanyid">%[jigsawcompanyid]</customfield> <CustomField name="sflastactivitydate">%[lastactivitydate]</customfield> <CustomField name="sflastactivitydatefq">%[lastactivitydate_fiscalquarter]</customfield> <CustomField name="sflastactivitydatefy">%[lastactivitydate_fiscalyear]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfmasterrecordid">%[masterrecord.id]</customfield> <CustomField name="sfmasterrecordname">%[masterrecord.name]</customfield> <CustomField name="sfownerid">%[owner.id]</customfield> <CustomField name="sfownername">%[owner.name]</customfield> <CustomField name="sfparentid">%[parent.id]</customfield> 4www.coveo.com 67

72 <CustomField name="sfparentname">%[parent.name]</customfield> <CustomField name="sfpostalcode">%[billingpostalcode]</customfield> <CustomField name="sfstate">%[billingstate]</customfield> <CustomField name="sfstreet">%[billingstreet]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> </Mapping> <Mapping type="case"> <Title>%[Subject]</Title> <Body>%[Description]</Body> <CustomFields> <CustomField name="objecttype">case</customfield> <CustomField name="objecttypename">case</customfield> <CustomField name="sfinterfaceid">service</customfield> <CustomField name="sfaccountid">%[account.id]</customfield> <CustomField name="sfaccountname">%[account.name]</customfield> <CustomField name="sfassetid">%[asset.id]</customfield> <CustomField name="sfassetname">%[asset.name]</customfield> <CustomField name="sfcasecloseddate">%[closeddate]</customfield> <CustomField name="sfcasecloseddatefq">%[closeddate_fiscalquarter]</customfield> <CustomField name="sfcasecloseddatefy">%[closeddate_fiscalyear]</customfield> <CustomField name="sfcasedescription">%[description]</customfield> <CustomField name="sfcaseid">%[id]</customfield> <CustomField name="sfcaseisescalated">%[isescalated]</customfield> <CustomField name="sfcasenumber">%[casenumber]</customfield> <CustomField name="sfcaseorigin">%[origin]</customfield> <CustomField name="sfcasepriority">%[priority]</customfield> <CustomField name="sfcasereason">%[reason]</customfield> <CustomField name="sfcasestatus">%[status]</customfield> <CustomField name="sfcasesubject">%[subject]</customfield> <CustomField name="sfcasesuppliedcompany">%[suppliedcompany]</customfield> <CustomField name="sfcasesupplied ">%[supplied ]</customfield> <CustomField name="sfcasesupplied domainname">%[supplied _domainname]</customfield> <CustomField name="sfcasesupplied fulldomainname">%[supplied _fulldomainname] </CustomField> <CustomField name="sfcasesuppliedname">%[suppliedname]</customfield> <CustomField name="sfcasetype">%[type]</customfield> <CustomField name="sfcontactid">%[contact.id]</customfield> <CustomField name="sfcontactname">%[contact.name]</customfield> <CustomField name="sfgroupid">%[owner_group.id]</customfield> <CustomField name="sfgroupname">%[owner_group.name]</customfield> <CustomField name="sfisclosed">%[isclosed]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfownerid">%[owner.id]</customfield> <CustomField name="sfownername">%[owner.name]</customfield> <CustomField name="sfparentcasenumber">%[parent.casenumber]</customfield> <CustomField name="sfparentid">%[parent.id]</customfield> <CustomField name="sfparentsubject">%[parent.subject]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sfuserid">%[owner_user.id]</customfield> <CustomField name="sfusername">%[owner_user.name]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> </Mapping> <Mapping type="casecomment"> <Title>%[Parent.Subject]</Title> 4www.coveo.com 68

73 <Body>%[CommentBody]</Body> <CustomFields> <CustomField name="objecttype">casecomment</customfield> <CustomField name="objecttypename">case Comment</CustomField> <CustomField name="sfinterfaceid">service</customfield> <CustomField name="sfcasecommentid">%[id]</customfield> <CustomField name="sfcaseid">%[parent.id]</customfield> <CustomField name="sfcasenumber">%[parent.casenumber]</customfield> <CustomField name="sfcasesubject">%[parent.subject]</customfield> <CustomField name="sfcommentbody">%[commentbody]</customfield> <CustomField name="sfispublished">%[ispublished]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> </Mapping> <Mapping type="contact"> <Title>%[Name]</Title> <Body>%[Description]</Body> <CustomFields> <CustomField name="objecttype">contact</customfield> <CustomField name="objecttypename">contact</customfield> <CustomField name="sfinterfaceid">service</customfield> <CustomField name="sfaccountid">%[account.id]</customfield> <CustomField name="sfaccountname">%[account.name]</customfield> <CustomField name="sfbirthdate">%[birthdate]</customfield> <CustomField name="sfbirthdatefq">%[birthdate_fiscalquarter]</customfield> <CustomField name="sfbirthdatefy">%[birthdate_fiscalyear]</customfield> <CustomField name="sfcity">%[mailingcity]</customfield> <CustomField name="sfcontactassistantname">%[assistantname]</customfield> <CustomField name="sfcontactassistantphone">%[assistantphone]</customfield> <CustomField name="sfcontactdepartment">%[department]</customfield> <CustomField name="sfcontactdescription">%[description]</customfield> <CustomField name="sfcontactfirstname">%[firstname]</customfield> <CustomField name="sfcontactid">%[id]</customfield> <CustomField name="sfcontactlastname">%[lastname]</customfield> <CustomField name="sfcontactname">%[name]</customfield> <CustomField name="sfcontactphone">%[phone]</customfield> <CustomField name="sfcontactsalutation">%[salutation]</customfield> <CustomField name="sfcontacttitle">%[title]</customfield> <CustomField name="sfcountry">%[mailingcountry]</customfield> <CustomField name="sf ">%[ ]</customfield> <CustomField name="sf domainname">%[ _domainname]</customfield> <CustomField name="sf fulldomainname">%[ _fulldomainname]</customfield> <CustomField name="sffax">%[fax]</customfield> <CustomField name="sfhomephone">%[homephone]</customfield> <CustomField name="sfjigsaw">%[jigsaw]</customfield> <CustomField name="sfjigsawcontactid">%[jigsawcontactid]</customfield> <CustomField name="sflastactivitydate">%[lastactivitydate]</customfield> <CustomField name="sflastactivitydatefq">%[lastactivitydate_fiscalquarter]</customfield> <CustomField name="sflastactivitydatefy">%[lastactivitydate_fiscalyear]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfleadsource">%[leadsource]</customfield> <CustomField name="sfmasterrecordid">%[masterrecord.id]</customfield> <CustomField name="sfmasterrecordname">%[masterrecord.name]</customfield> <CustomField name="sfmobilephone">%[mobilephone]</customfield> <CustomField name="sfownerid">%[owner.id]</customfield> 4www.coveo.com 69

74 <CustomField name="sfownername">%[owner.name]</customfield> <CustomField name="sfpostalcode">%[mailingpostalcode]</customfield> <CustomField name="sfreportstoid">%[reportsto.id]</customfield> <CustomField name="sfreportstoname">%[reportsto.name]</customfield> <CustomField name="sfstate">%[mailingstate]</customfield> <CustomField name="sfstreet">%[mailingstreet]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> </Mapping> <Mapping type="event"> <Title>%[Subject]</Title> <Body>%[Subject]</Body> <CustomFields> <CustomField name="objecttype">event</customfield> <CustomField name="objecttypename">event</customfield> <CustomField name="sfinterfaceid">service</customfield> <CustomField name="sfaccountid">%[account.id]</customfield> <CustomField name="sfaccountname">%[account.name]</customfield> <CustomField name="sfactivitydate">%[activitydate]</customfield> <CustomField name="sfactivitydatefq">%[activitydate_fiscalquarter]</customfield> <CustomField name="sfactivitydatefy">%[activitydate_fiscalyear]</customfield> <CustomField name="sfassetid">%[what_asset.id]</customfield> <CustomField name="sfassetname">%[what_asset.name]</customfield> <CustomField name="sfcampaignid">%[what_campaign.id]</customfield> <CustomField name="sfcampaignname">%[what_campaign.name]</customfield> <CustomField name="sfcaseid">%[what_case.id]</customfield> <CustomField name="sfcasename">%[what_case.name]</customfield> <CustomField name="sfcontactid">%[who_contact.id]</customfield> <CustomField name="sfcontactname">%[who_contact.name]</customfield> <CustomField name="sfcontractid">%[what_contract.id]</customfield> <CustomField name="sfcontractname">%[what_contract.name]</customfield> <CustomField name="sfeventactivitydatetime">%[activitydatetime]</customfield> <CustomField name="sfeventactivitydatetimefq">%[activitydatetime_fiscalquarter]</customfield> <CustomField name="sfeventactivitydatetimefy">%[activitydatetime_fiscalyear]</customfield> <CustomField name="sfeventdescription">%[description]</customfield> <CustomField name="sfeventdurationinminutes">%[durationinminutes]</customfield> <CustomField name="sfeventenddatetime">%[enddatetime]</customfield> <CustomField name="sfeventenddatetimefq">%[enddatetime_fiscalquarter]</customfield> <CustomField name="sfeventenddatetimefy">%[enddatetime_fiscalyear]</customfield> <CustomField name="sfeventgroupeventtype">%[groupeventtype]</customfield> <CustomField name="sfeventid">%[id]</customfield> <CustomField name="sfeventisalldayevent">%[isalldayevent]</customfield> <CustomField name="sfeventischild">%[ischild]</customfield> <CustomField name="sfeventisgroupevent">%[isgroupevent]</customfield> <CustomField name="sfeventreminderdatetime">%[reminderdatetime]</customfield> <CustomField name="sfeventreminderdatetimefq">%[reminderdatetime_fiscalquarter]</customfield> <CustomField name="sfeventreminderdatetimefy">%[reminderdatetime_fiscalyear]</customfield> <CustomField name="sfeventshowas">%[showas]</customfield> <CustomField name="sfeventstartdatetime">%[startdatetime]</customfield> <CustomField name="sfeventstartdatetimefq">%[startdatetime_fiscalquarter]</customfield> <CustomField name="sfeventstartdatetimefy">%[startdatetime_fiscalyear]</customfield> <CustomField name="sfeventsubject">%[subject]</customfield> <CustomField name="sfisarchived">%[isarchived]</customfield> <CustomField name="sfisprivate">%[isprivate]</customfield> <CustomField name="sfisrecurrence">%[isrecurrence]</customfield> <CustomField name="sfisreminderset">%[isreminderset]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfleadid">%[who_lead.id]</customfield> <CustomField name="sfleadname">%[who_lead.name]</customfield> <CustomField name="sflocation">%[location]</customfield> 4www.coveo.com 70

75 <CustomField name="sfmagic_item cid">%[what_magic_item c.id]</customfield> <CustomField name="sfmagic_item cname">%[what_magic_item c.name]</customfield> <CustomField name="sfopportunityid">%[what_opportunity.id]</customfield> <CustomField name="sfopportunityname">%[what_opportunity.name]</customfield> <CustomField name="sfownerid">%[owner.id]</customfield> <CustomField name="sfownername">%[owner.name]</customfield> <CustomField name="sfproduct2id">%[what_product2.id]</customfield> <CustomField name="sfproduct2name">%[what_product2.name]</customfield> <CustomField name="sfrecurrencedayofmonth">%[recurrencedayofmonth]</customfield> <CustomField name="sfrecurrencedayofweekmask">%[recurrencedayofweekmask]</customfield> <CustomField name="sfrecurrenceenddateonly">%[recurrenceenddateonly]</customfield> <CustomField name="sfrecurrenceenddateonlyfq">%[recurrenceenddateonly_fiscalquarter] </CustomField> <CustomField name="sfrecurrenceenddateonlyfy">%[recurrenceenddateonly_fiscalyear] </CustomField> <CustomField name="sfrecurrenceinstance">%[recurrenceinstance]</customfield> <CustomField name="sfrecurrenceinterval">%[recurrenceinterval]</customfield> <CustomField name="sfrecurrencemonthofyear">%[recurrencemonthofyear]</customfield> <CustomField name="sfrecurrencestartdatetime">%[recurrencestartdatetime]</customfield> <CustomField name="sfrecurrencestartdatetimefq">%[recurrencestartdatetime_fiscalquarter] </CustomField> <CustomField name="sfrecurrencestartdatetimefy">%[recurrencestartdatetime_fiscalyear] </CustomField> <CustomField name="sfrecurrencetimezonesidkey">%[recurrencetimezonesidkey]</customfield> <CustomField name="sfrecurrencetype">%[recurrencetype]</customfield> <CustomField name="sfsolutionid">%[what_solution.id]</customfield> <CustomField name="sfsolutionname">%[what_solution.name]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sfwhatid">%[what.id]</customfield> <CustomField name="sfwhatname">%[what.name]</customfield> <CustomField name="sfwhoid">%[who.id]</customfield> <CustomField name="sfwhoname">%[who.name]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> </Mapping> <Mapping type="solution"> <Title>%[SolutionName]</Title> <Body>%[SolutionNote]</Body> <CustomFields> <CustomField name="objecttype">solution</customfield> <CustomField name="objecttypename">solution</customfield> <CustomField name="sfinterfaceid">service</customfield> <CustomField name="sfishtml">%[ishtml]</customfield> <CustomField name="sfispublished">%[ispublished]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfownerid">%[owner.id]</customfield> <CustomField name="sfownername">%[owner.name]</customfield> <CustomField name="sfsolutionid">%[id]</customfield> <CustomField name="sfsolutionispublishedinpublickb">%[ispublishedinpublickb]</customfield> <CustomField name="sfsolutionisreviewed">%[isreviewed]</customfield> <CustomField name="sfsolutionname">%[solutionname]</customfield> <CustomField name="sfsolutionsolutionnote">%[solutionnote]</customfield> <CustomField name="sfsolutionsolutionnumber">%[solutionnumber]</customfield> <CustomField name="sfsolutionstatus">%[status]</customfield> <CustomField name="sfsolutiontimesused">%[timesused]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> 4www.coveo.com 71

76 </Mapping> <Mapping type="task"> <Title>%[Subject]</Title> <Body>%[Subject]</Body> <CustomFields> <CustomField name="objecttype">task</customfield> <CustomField name="objecttypename">task</customfield> <CustomField name="sfinterfaceid">service</customfield> <CustomField name="sfaccountid">%[account.id]</customfield> <CustomField name="sfaccountname">%[account.name]</customfield> <CustomField name="sfactivitydate">%[activitydate]</customfield> <CustomField name="sfactivitydatefq">%[activitydate_fiscalquarter]</customfield> <CustomField name="sfactivitydatefy">%[activitydate_fiscalyear]</customfield> <CustomField name="sfassetid">%[what_asset.id]</customfield> <CustomField name="sfassetname">%[what_asset.name]</customfield> <CustomField name="sfcampaignid">%[what_campaign.id]</customfield> <CustomField name="sfcampaignname">%[what_campaign.name]</customfield> <CustomField name="sfcaseid">%[what_case.id]</customfield> <CustomField name="sfcasename">%[what_case.name]</customfield> <CustomField name="sfcontactid">%[who_contact.id]</customfield> <CustomField name="sfcontactname">%[who_contact.name]</customfield> <CustomField name="sfcontractid">%[what_contract.id]</customfield> <CustomField name="sfcontractname">%[what_contract.name]</customfield> <CustomField name="sfisarchived">%[isarchived]</customfield> <CustomField name="sfisclosed">%[isclosed]</customfield> <CustomField name="sfisrecurrence">%[isrecurrence]</customfield> <CustomField name="sfisreminderset">%[isreminderset]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfleadid">%[who_lead.id]</customfield> <CustomField name="sfleadname">%[who_lead.name]</customfield> <CustomField name="sfmagic_item cid">%[what_magic_item c.id]</customfield> <CustomField name="sfmagic_item cname">%[what_magic_item c.name]</customfield> <CustomField name="sfopportunityid">%[what_opportunity.id]</customfield> <CustomField name="sfopportunityname">%[what_opportunity.name]</customfield> <CustomField name="sfownerid">%[owner.id]</customfield> <CustomField name="sfownername">%[owner.name]</customfield> <CustomField name="sfproduct2id">%[what_product2.id]</customfield> <CustomField name="sfproduct2name">%[what_product2.name]</customfield> <CustomField name="sfrecurrencedayofmonth">%[recurrencedayofmonth]</customfield> <CustomField name="sfrecurrencedayofweekmask">%[recurrencedayofweekmask]</customfield> <CustomField name="sfrecurrenceenddateonly">%[recurrenceenddateonly]</customfield> <CustomField name="sfrecurrenceenddateonlyfq">%[recurrenceenddateonly_fiscalquarter] </CustomField> <CustomField name="sfrecurrenceenddateonlyfy">%[recurrenceenddateonly_fiscalyear] </CustomField> <CustomField name="sfrecurrenceinstance">%[recurrenceinstance]</customfield> <CustomField name="sfrecurrenceinterval">%[recurrenceinterval]</customfield> <CustomField name="sfrecurrencemonthofyear">%[recurrencemonthofyear]</customfield> <CustomField name="sfrecurrencestartdateonly">%[recurrencestartdateonly]</customfield> <CustomField name="sfrecurrencestartdateonlyfq">%[recurrencestartdateonly_fiscalquarter] </CustomField> <CustomField name="sfrecurrencestartdateonlyfy">%[recurrencestartdateonly_fiscalyear] </CustomField> <CustomField name="sfrecurrencetimezonesidkey">%[recurrencetimezonesidkey]</customfield> <CustomField name="sfrecurrencetype">%[recurrencetype]</customfield> <CustomField name="sfsolutionid">%[what_solution.id]</customfield> <CustomField name="sfsolutionname">%[what_solution.name]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sftaskcalldisposition">%[calldisposition]</customfield> <CustomField name="sftaskcalltype">%[calltype]</customfield> <CustomField name="sftaskdescription">%[description]</customfield> <CustomField name="sftaskid">%[id]</customfield> 4www.coveo.com 72

77 <CustomField name="sftaskpriority">%[priority]</customfield> <CustomField name="sftaskstatus">%[status]</customfield> <CustomField name="sftasksubject">%[subject]</customfield> <CustomField name="sfwhatid">%[what.id]</customfield> <CustomField name="sfwhatname">%[what.name]</customfield> <CustomField name="sfwhoid">%[who.id]</customfield> <CustomField name="sfwhoname">%[who.name]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> </Mapping> <Mapping type="user"> <Title>%[Name]</Title> <Body>%[Name]</Body> <CustomFields> <CustomField name="objecttype">user</customfield> <CustomField name="objecttypename">user</customfield> <CustomField name="sfinterfaceid">service</customfield> <CustomField name="sfcity">%[city]</customfield> <CustomField name="sfcontactid">%[contact.id]</customfield> <CustomField name="sfcontactname">%[contact.name]</customfield> <CustomField name="sfcountry">%[country]</customfield> <CustomField name="sf ">%[ ]</customfield> <CustomField name="sf domainname">%[ _domainname]</customfield> <CustomField name="sf fulldomainname">%[ _fulldomainname]</customfield> <CustomField name="sffax">%[fax]</customfield> <CustomField name="sffullphotourl">%[fullphotourl]</customfield> <CustomField name="sfisactive">%[isactive]</customfield> <CustomField name="sflanguagelocalekey">%[languagelocalekey]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfmanagerid">%[manager.id]</customfield> <CustomField name="sfmanagername">%[manager.name]</customfield> <CustomField name="sfmobilephone">%[mobilephone]</customfield> <CustomField name="sfpostalcode">%[postalcode]</customfield> <CustomField name="sfprofileid">%[profile.id]</customfield> <CustomField name="sfprofilename">%[profile.name]</customfield> <CustomField name="sfsmallphotourl">%[smallphotourl]</customfield> <CustomField name="sfstate">%[state]</customfield> <CustomField name="sfstreet">%[street]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sfuseraboutme">%[aboutme]</customfield> <CustomField name="sfuseralias">%[alias]</customfield> <CustomField name="sfusercommunitynickname">%[communitynickname]</customfield> <CustomField name="sfusercompanyname">%[companyname]</customfield> <CustomField name="sfuserdefaultgroupnotificationfrequency">% [DefaultGroupNotificationFrequency]</CustomField> <CustomField name="sfuserdepartment">%[department]</customfield> <CustomField name="sfuserdigestfrequency">%[digestfrequency]</customfield> <CustomField name="sfuserdivision">%[division]</customfield> <CustomField name="sfuser encodingkey">%[ encodingkey]</customfield> <CustomField name="sfuseremployeenumber">%[employeenumber]</customfield> <CustomField name="sfuserextension">%[extension]</customfield> <CustomField name="sfuserfederationidentifier">%[federationidentifier]</customfield> <CustomField name="sfuserfirstname">%[firstname]</customfield> <CustomField name="sfuserforecastenabled">%[forecastenabled]</customfield> <CustomField name="sfuserid">%[id]</customfield> <CustomField name="sfuserlastname">%[lastname]</customfield> <CustomField name="sfuserlocalesidkey">%[localesidkey]</customfield> <CustomField name="sfusername">%[name]</customfield> <CustomField name="sfuserphone">%[phone]</customfield> <CustomField name="sfuserreceivesadmininfo s">%[receivesadmininfo s]</customfield> <CustomField name="sfuserreceivesinfo s">%[receivesinfo s]</customfield> 4www.coveo.com 73

78 <CustomField name="sfuserroleid">%[userrole.id]</customfield> <CustomField name="sfuserrolename">%[userrole.name]</customfield> <CustomField name="sfusertimezonesidkey">%[timezonesidkey]</customfield> <CustomField name="sfusertitle">%[title]</customfield> <CustomField name="sfuseruserpermissionscallcenterautologin">% [UserPermissionsCallCenterAutoLogin]</CustomField> <CustomField name="sfuseruserpermissionschatteranswersuser">% [UserPermissionsChatterAnswersUser]</CustomField> <CustomField name="sfuseruserpermissionsinteractionuser">%[userpermissionsinteractionuser] </CustomField> <CustomField name="sfuseruserpermissionsknowledgeuser">%[userpermissionsknowledgeuser] </CustomField> <CustomField name="sfuseruserpermissionsmarketinguser">%[userpermissionsmarketinguser] </CustomField> <CustomField name="sfuseruserpermissionsmobileuser">%[userpermissionsmobileuser]</customfield> <CustomField name="sfuseruserpermissionsofflineuser">%[userpermissionsofflineuser] </CustomField> <CustomField name="sfuseruserpermissionssfcontentuser">%[userpermissionssfcontentuser] </CustomField> <CustomField name="sfuseruserpermissionssiteforcecontributoruser">% [UserPermissionsSiteforceContributorUser]</CustomField> <CustomField name="sfuseruserpermissionssiteforcepublisheruser">% [UserPermissionsSiteforcePublisherUser]</CustomField> <CustomField name="sfuseruserpermissionssupportuser">%[userpermissionssupportuser] </CustomField> <CustomField name="sfuseruserpreferencesactivityreminderspopup">% [UserPreferencesActivityRemindersPopup]</CustomField> <CustomField name="sfuseruserpreferencesapexpagesdevelopermode">% [UserPreferencesApexPagesDeveloperMode]</CustomField> <CustomField name="sfuseruserpreferencescontent asandwhen">% [UserPreferencesContent AsAndWhen]</CustomField> <CustomField name="sfuseruserpreferencescontentno ">%[userpreferencescontentno ] </CustomField> <CustomField name="sfuseruserpreferencesdiscommentafterlike ">% [UserPreferencesDisCommentAfterLike ]</CustomField> <CustomField name="sfuseruserpreferencesdismentionscomment ">% [UserPreferencesDisMentionsComment ]</CustomField> <CustomField name="sfuseruserpreferencesdisprofpostcomment ">% [UserPreferencesDisProfPostComment ]</CustomField> <CustomField name="sfuseruserpreferencesdisableallfeeds ">% [UserPreferencesDisableAllFeeds ]</CustomField> <CustomField name="sfuseruserpreferencesdisablebookmark ">% [UserPreferencesDisableBookmark ]</CustomField> <CustomField name="sfuseruserpreferencesdisablechangecomment ">% [UserPreferencesDisableChangeComment ]</CustomField> <CustomField name="sfuseruserpreferencesdisablefilesharenotificationsforapi">% [UserPreferencesDisableFileShareNotificationsForApi]</CustomField> <CustomField name="sfuseruserpreferencesdisablefollowers ">% [UserPreferencesDisableFollowers ]</CustomField> <CustomField name="sfuseruserpreferencesdisablelatercomment ">% [UserPreferencesDisableLaterComment ]</CustomField> <CustomField name="sfuseruserpreferencesdisablelike ">%[userpreferencesdisablelike ] </CustomField> <CustomField name="sfuseruserpreferencesdisablementionspost ">% [UserPreferencesDisableMentionsPost ]</CustomField> <CustomField name="sfuseruserpreferencesdisablemessage ">% [UserPreferencesDisableMessage ]</CustomField> <CustomField name="sfuseruserpreferencesdisableprofilepost ">% [UserPreferencesDisableProfilePost ]</CustomField> <CustomField name="sfuseruserpreferencesdisablesharepost ">% [UserPreferencesDisableSharePost ]</CustomField> <CustomField name="sfuseruserpreferencesenableautosubforfeeds">% [UserPreferencesEnableAutoSubForFeeds]</CustomField> <CustomField name="sfuseruserpreferenceseventreminderscheckboxdefault">% [UserPreferencesEventRemindersCheckboxDefault]</CustomField> <CustomField name="sfuseruserpreferenceshidecsndesktoptask">% [UserPreferencesHideCSNDesktopTask]</CustomField> <CustomField name="sfuseruserpreferenceshidecsngetchattermobiletask">% [UserPreferencesHideCSNGetChatterMobileTask]</CustomField> 4www.coveo.com 74

79 <CustomField name="sfuseruserpreferencesoptoutoftouch">%[userpreferencesoptoutoftouch] </CustomField> <CustomField name="sfuseruserpreferencesremindersoundoff">%[userpreferencesremindersoundoff] </CustomField> <CustomField name="sfuseruserpreferencestaskreminderscheckboxdefault">% [UserPreferencesTaskRemindersCheckboxDefault]</CustomField> <CustomField name="sfuserusertype">%[usertype]</customfield> <CustomField name="sfuserusername">%[username]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> </Mapping> <Mapping type="attachment"> <Title>%[Name]</Title> <CustomFields> <CustomField name="objecttype">attachment</customfield> <CustomField name="objecttypename">attachment</customfield> <CustomField name="sfinterfaceid">service</customfield> <CustomField name="sfaccountid">%[parent_account.id]</customfield> <CustomField name="sfaccountname">%[parent_account.name]</customfield> <CustomField name="sfassetid">%[parent_asset.id]</customfield> <CustomField name="sfassetname">%[parent_asset.name]</customfield> <CustomField name="sfattachmentbodylength">%[bodylength]</customfield> <CustomField name="sfattachmentdescription">%[description]</customfield> <CustomField name="sfattachmentid">%[id]</customfield> <CustomField name="sfattachmentname">%[name]</customfield> <CustomField name="sfcampaignid">%[parent_campaign.id]</customfield> <CustomField name="sfcampaignname">%[parent_campaign.name]</customfield> <CustomField name="sfcaseid">%[parent_case.id]</customfield> <CustomField name="sfcasename">%[parent_case.name]</customfield> <CustomField name="sfcontactid">%[parent_contact.id]</customfield> <CustomField name="sfcontactname">%[parent_contact.name]</customfield> <CustomField name="sfcontenttype">%[contenttype]</customfield> <CustomField name="sfcontractid">%[parent_contract.id]</customfield> <CustomField name="sfcontractname">%[parent_contract.name]</customfield> <CustomField name="sf templateid">%[parent_ template.id]</customfield> <CustomField name="sf templatename">%[parent_ template.name]</customfield> <CustomField name="sfeventid">%[parent_event.id]</customfield> <CustomField name="sfeventname">%[parent_event.name]</customfield> <CustomField name="sfisprivate">%[isprivate]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfleadid">%[parent_lead.id]</customfield> <CustomField name="sfleadname">%[parent_lead.name]</customfield> <CustomField name="sfmagic_item cid">%[parent_magic_item c.id]</customfield> <CustomField name="sfmagic_item cname">%[parent_magic_item c.name]</customfield> <CustomField name="sfopportunityid">%[parent_opportunity.id]</customfield> <CustomField name="sfopportunityname">%[parent_opportunity.name]</customfield> <CustomField name="sfownerid">%[owner.id]</customfield> <CustomField name="sfownername">%[owner.name]</customfield> <CustomField name="sfparentid">%[parent.id]</customfield> <CustomField name="sfparentname">%[parent.name]</customfield> <CustomField name="sfproduct2id">%[parent_product2.id]</customfield> <CustomField name="sfproduct2name">%[parent_product2.name]</customfield> <CustomField name="sfsolutionid">%[parent_solution.id]</customfield> <CustomField name="sfsolutionname">%[parent_solution.name]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sftaskid">%[parent_task.id]</customfield> <CustomField name="sftaskname">%[parent_task.name]</customfield> </CustomFields> </Mapping> <Mapping type="feeditem"> 4www.coveo.com 75

80 <Title>%[Title]</Title> <Body>%[LinkUrl] %[Body]</Body> <CustomFields> <CustomField name="sysfiletype">feeditem</customfield> </CustomFields> </Mapping> <Mapping type="feedcomment"> <Title>Comment by %[CreatedBy.Name]</Title> <Body>%[CommentBody]</Body> <CustomFields> <CustomField name="sysfiletype">feedcomment</customfield> </CustomFields> </Mapping> </Salesforce> 7.2 Salesforce Mapping File Example for Knowledge Base When your Salesforce organization includes Knowledge Base articles and you want to index their content, you must include additional mappings for Knowledge content types. The mapping file example presented in this topic maps two arbitrary named Knowledge Base objects: MyKBArticleType1 MyKBArticleType2 <?xml version="1.0" encoding="utf-8"?> <Salesforce> <CommonMapping> <ContentType>binarydata</ContentType> <ModifiedDate>%[LastModifiedDate]</ModifiedDate> <CustomFields> <CustomField name="sourcetype">salesforce</customfield> <CustomField name="sfchannelsflagmerged">internal App:%[kav_IsVisibleInApp];Customer Portal:% [kav_isvisibleincsp];public Knowledge Base:%[kav_IsVisibleInPkb];Partner Portal:%[kav_ IsVisibleInPrm];</CustomField> <CustomField name="sforganizationid">%[coveo_organization_id]</customfield> <CustomField name="sysauthor">%[kav_createdby.name]</customfield> <CustomField name="sysdate">%[kav_lastpublisheddate]</customfield> <CustomField name="syssfid">%[ka_id]</customfield> <CustomField name="sfid">%[ka_id]</customfield> <CustomField name="sfkbid">%[ka_id]</customfield> <CustomField name="kbid">%[ka_id]</customfield> <CustomField name="sfcreateddate">%[kav_lastpublisheddate]</customfield> <CustomField name="sfcreatedby">%[ka_createdby.name]</customfield> <CustomField name="sfcreatedbyid">%[ka_createdby.id]</customfield> <CustomField name="sfisdeleted">%[kav_isdeleted]</customfield> <CustomField name="sfparticipantid">%[ka_createdby.id];%[kav_lastmodifiedby.id];</customfield> <CustomField name="sfparticipantname">%[createdby.name];%[kav_ LastModifiedBy.Name];</CustomField> </CustomFields> </CommonMapping> <Mapping type="mykbarticletype1"> <Title>%[kav_Title]</Title> <Body>%[kav_Summary]</Body> <CustomFields> <CustomField name="objecttype">mykbarticletype1</customfield> <CustomField name="objecttypename">my KB Article Type1</CustomField> <CustomField name="sfinterfaceid">kb</customfield> 4www.coveo.com 76

81 <CustomField name="sfcaseid">%[ka_casearticles.caseid]</customfield> <CustomField name="sfcreatedbyname">%[kav_createdby.name]</customfield> <CustomField name="sfkbarchiveddate">%[ka_archiveddate]</customfield> <CustomField name="sfkbarchiveddatefq">%[ka_archiveddate_fiscalquarter]</customfield> <CustomField name="sfkbarchiveddatefy">%[ka_archiveddate_fiscalyear]</customfield> <CustomField name="sfkbarticlenumber">%[kav_articlenumber]</customfield> <CustomField name="sfkbcaseassociationcount">%[ka_caseassociationcount]</customfield> <CustomField name="sfkbfirstpublisheddate">%[kav_firstpublisheddate]</customfield> <CustomField name="sfkbfirstpublisheddatefq">%[kav_firstpublisheddate_fiscalquarter] </CustomField> <CustomField name="sfkbfirstpublisheddatefy">%[kav_firstpublisheddate_fiscalyear] </CustomField> <CustomField name="sfkbislatestversion">%[kav_islatestversion]</customfield> <CustomField name="sfkbisvisibleinapp">%[kav_isvisibleinapp]</customfield> <CustomField name="sfkbisvisibleincsp">%[kav_isvisibleincsp]</customfield> <CustomField name="sfkbisvisibleinpkb">%[kav_isvisibleinpkb]</customfield> <CustomField name="sfkbisvisibleinprm">%[kav_isvisibleinprm]</customfield> <CustomField name="sfkblastpublisheddate">%[kav_lastpublisheddate]</customfield> <CustomField name="sfkblastpublisheddatefq">%[kav_lastpublisheddate_fiscalquarter] </CustomField> <CustomField name="sfkblastpublisheddatefy">%[kav_lastpublisheddate_fiscalyear]</customfield> <CustomField name="sfkbpublishstatus">%[kav_publishstatus]</customfield> <CustomField name="sfkbsummary">%[kav_summary]</customfield> <CustomField name="sfkbtitle">%[kav_title]</customfield> <CustomField name="sfkbundecipherablecontentc">%[kav_undecipherable_content c]</customfield> <CustomField name="sfkburlname">%[kav_urlname]</customfield> <CustomField name="sfkbversionnumber">%[kav_versionnumber]</customfield> <CustomField name="sflanguage">%[kav_language]</customfield> <CustomField name="sflastmodifiedbyid">%[kav_lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[kav_lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[kav_lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[kav_lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[kav_lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfsystemmodstamp">%[kav_systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[kav_systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[kav_systemmodstamp_fiscalyear]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> </Mapping> <Mapping type="mykbarticletype2"> <Title>%[kav_Title]</Title> <Body>%[kav_Summary]</Body> <CustomFields> <CustomField name="objecttype">mykbarticletype2</customfield> <CustomField name="objecttypename">my KB Article Type2</CustomField> <CustomField name="sfinterfaceid">kb</customfield> <CustomField name="sfcaseid">%[ka_casearticles.caseid]</customfield> <CustomField name="sfcreatedbyname">%[kav_createdby.name]</customfield> <CustomField name="sfkbarchiveddate">%[ka_archiveddate]</customfield> <CustomField name="sfkbarchiveddatefq">%[ka_archiveddate_fiscalquarter]</customfield> <CustomField name="sfkbarchiveddatefy">%[ka_archiveddate_fiscalyear]</customfield> <CustomField name="sfkbarticlenumber">%[kav_articlenumber]</customfield> <CustomField name="sfkbcaseassociationcount">%[ka_caseassociationcount]</customfield> <CustomField name="sfkbfirstpublisheddate">%[kav_firstpublisheddate]</customfield> <CustomField name="sfkbfirstpublisheddatefq">%[kav_firstpublisheddate_fiscalquarter] </CustomField> <CustomField name="sfkbfirstpublisheddatefy">%[kav_firstpublisheddate_fiscalyear] </CustomField> <CustomField name="sfkbislatestversion">%[kav_islatestversion]</customfield> <CustomField name="sfkbisvisibleinapp">%[kav_isvisibleinapp]</customfield> <CustomField name="sfkbisvisibleincsp">%[kav_isvisibleincsp]</customfield> <CustomField name="sfkbisvisibleinpkb">%[kav_isvisibleinpkb]</customfield> <CustomField name="sfkbisvisibleinprm">%[kav_isvisibleinprm]</customfield> <CustomField name="sfkblastpublisheddate">%[kav_lastpublisheddate]</customfield> <CustomField name="sfkblastpublisheddatefq">%[kav_lastpublisheddate_fiscalquarter] </CustomField> <CustomField name="sfkblastpublisheddatefy">%[kav_lastpublisheddate_fiscalyear]</customfield> 4www.coveo.com 77

82 <CustomField name="sfkbpublishstatus">%[kav_publishstatus]</customfield> <CustomField name="sfkbrecipec">%[kav_recipe c]</customfield> <CustomField name="sfkbsummary">%[kav_summary]</customfield> <CustomField name="sfkbtitle">%[kav_title]</customfield> <CustomField name="sfkburlname">%[kav_urlname]</customfield> <CustomField name="sfkbversionnumber">%[kav_versionnumber]</customfield> <CustomField name="sflanguage">%[kav_language]</customfield> <CustomField name="sflastmodifiedbyid">%[kav_lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[kav_lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[kav_lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[kav_lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[kav_lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfsystemmodstamp">%[kav_systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[kav_systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[kav_systemmodstamp_fiscalyear]</customfield> <CustomField name="sysfiletype">salesforceitem</customfield> </CustomFields> </Mapping> </Salesforce> 7.3 Salesforce Mapping File Example for CRM Content With Salesforce CRM Content you can organize, share, search, and manage content within your organization and across key areas of the Salesforce application. Content can include all file types, from traditional business documents such as Microsoft PowerPoint presentations to audio files, video files, Web pages, and Google docs (see the Salesforce document Salesforce CRM Content Overview). When your Salesforce organization includes CRM content and you want to index the content of these files, you must include additional mappings for CRM content type. The following Salesforce CRM content mapping file example is a good starting point. <?xml version="1.0" encoding="utf-8"?> <Salesforce> <CommonMapping> <ContentType>binarydata</ContentType> <ModifiedDate>%[LastModifiedDate]</ModifiedDate> <CustomFields> <CustomField name="sourcetype">salesforce</customfield> <CustomField name="sforganizationid">%[coveo_organization_id]</customfield> <CustomField name="sysauthor">%[owner.name]</customfield> <CustomField name="sysdate">%[systemmodstamp]</customfield> <CustomField name="syssfid">%[id]</customfield> <CustomField name="sfid">%[id]</customfield> <CustomField name="sfname">%[name]</customfield> <CustomField name="sfcreateddate">%[createddate]</customfield> <CustomField name="sfcreatedbyname">%[createdby.name]</customfield> <CustomField name="sfcreatedbyid">%[createdby.id]</customfield> <CustomField name="sfisdeleted">%[isdeleted]</customfield> <CustomField name="sfparticipantid">%[createdby.id];%[owner.id];%[lastmodifiedby.id];% [Contact.Id]</CustomField> <CustomField name="sfparticipantname">%[createdby.name];%[owner.name];%[lastmodifiedby.name];% [Contact.Name]</CustomField> </CustomFields> </CommonMapping> <Mapping type="contentversion"> <Title>%[Title]</Title> <CustomFields> <CustomField name="objecttype">contentversion</customfield> 4www.coveo.com 78

83 <CustomField name="objecttypename">content</customfield> <CustomField name="sfinterfaceid">standard</customfield> <CustomField name="sfaccountid">%[firstpublishlocation_account.id]</customfield> <CustomField name="sfaccountname">%[firstpublishlocation_account.name]</customfield> <CustomField name="sfassetid">%[firstpublishlocation_asset.id]</customfield> <CustomField name="sfassetname">%[firstpublishlocation_asset.name]</customfield> <CustomField name="sfcampaignid">%[firstpublishlocation_campaign.id]</customfield> <CustomField name="sfcampaignname">%[firstpublishlocation_campaign.name]</customfield> <CustomField name="sfcaseid">%[firstpublishlocation_case.id]</customfield> <CustomField name="sfcasename">%[firstpublishlocation_case.name]</customfield> <CustomField name="sfcollaborationgroupid">%[firstpublishlocation_collaborationgroup.id] </CustomField> <CustomField name="sfcollaborationgroupname">%[firstpublishlocation_collaborationgroup.name] </CustomField> <CustomField name="sfcontactid">%[firstpublishlocation_contact.id]</customfield> <CustomField name="sfcontactname">%[firstpublishlocation_contact.name]</customfield> <CustomField name="sfcontentdocumentid">%[contentdocument.id]</customfield> <CustomField name="sfcontentdocumenttitle">%[contentdocument.title]</customfield> <CustomField name="sfcontentmodifieddate">%[contentmodifieddate]</customfield> <CustomField name="sfcontentmodifieddatefq">%[contentmodifieddate_fiscalquarter]</customfield> <CustomField name="sfcontentmodifieddatefy">%[contentmodifieddate_fiscalyear]</customfield> <CustomField name="sfcontentsize">%[contentsize]</customfield> <CustomField name="sfcontenturl">%[contenturl]</customfield> <CustomField name="sfcontentversionid">%[id]</customfield> <CustomField name="sfcontentversionislatest">%[islatest]</customfield> <CustomField name="sfcontentversionorigin">%[origin]</customfield> <CustomField name="sfcontentversionpublishstatus">%[publishstatus]</customfield> <CustomField name="sfcontentversiontitle">%[title]</customfield> <CustomField name="sfcontentworkspaceid">%[firstpublishlocation_contentworkspace.id] </CustomField> <CustomField name="sfcontentworkspacename">%[firstpublishlocation_contentworkspace.name] </CustomField> <CustomField name="sfcontractid">%[firstpublishlocation_contract.id]</customfield> <CustomField name="sfcontractname">%[firstpublishlocation_contract.name]</customfield> <CustomField name="sfdashboardcomponentid">%[firstpublishlocation_dashboardcomponent.id] </CustomField> <CustomField name="sfdashboardcomponentname">%[firstpublishlocation_dashboardcomponent.name] </CustomField> <CustomField name="sfdashboardid">%[firstpublishlocation_dashboard.id]</customfield> <CustomField name="sfdashboardname">%[firstpublishlocation_dashboard.name]</customfield> <CustomField name="sfeventid">%[firstpublishlocation_event.id]</customfield> <CustomField name="sfeventname">%[firstpublishlocation_event.name]</customfield> <CustomField name="sffirstpublishlocationid">%[firstpublishlocation.id]</customfield> <CustomField name="sffirstpublishlocationname">%[firstpublishlocation.name]</customfield> <CustomField name="sflastmodifiedbyid">%[lastmodifiedby.id]</customfield> <CustomField name="sflastmodifiedbyname">%[lastmodifiedby.name]</customfield> <CustomField name="sflastmodifieddate">%[lastmodifieddate]</customfield> <CustomField name="sflastmodifieddatefq">%[lastmodifieddate_fiscalquarter]</customfield> <CustomField name="sflastmodifieddatefy">%[lastmodifieddate_fiscalyear]</customfield> <CustomField name="sfleadid">%[firstpublishlocation_lead.id]</customfield> <CustomField name="sfleadname">%[firstpublishlocation_lead.name]</customfield> <CustomField name="sflost_scroll kaid">%[firstpublishlocation_lost_scroll ka.id] </CustomField> <CustomField name="sflost_scroll kaname">%[firstpublishlocation_lost_scroll ka.name] </CustomField> <CustomField name="sfmagic_item cid">%[firstpublishlocation_magic_item c.id]</customfield> <CustomField name="sfmagic_item cname">%[firstpublishlocation_magic_item c.name] </CustomField> <CustomField name="sfmagic_spell kaid">%[firstpublishlocation_magic_spell ka.id] </CustomField> <CustomField name="sfmagic_spell kaname">%[firstpublishlocation_magic_spell ka.name] </CustomField> <CustomField name="sfopportunityid">%[firstpublishlocation_opportunity.id]</customfield> <CustomField name="sfopportunityname">%[firstpublishlocation_opportunity.name]</customfield> <CustomField name="sfownerid">%[owner.id]</customfield> <CustomField name="sfownername">%[owner.name]</customfield> <CustomField name="sfproduct2id">%[firstpublishlocation_product2.id]</customfield> <CustomField name="sfproduct2name">%[firstpublishlocation_product2.name]</customfield> <CustomField name="sfreportid">%[firstpublishlocation_report.id]</customfield> 4www.coveo.com 79

84 <CustomField name="sfreportname">%[firstpublishlocation_report.name]</customfield> <CustomField name="sfsiteid">%[firstpublishlocation_site.id]</customfield> <CustomField name="sfsitename">%[firstpublishlocation_site.name]</customfield> <CustomField name="sfsolutionid">%[firstpublishlocation_solution.id]</customfield> <CustomField name="sfsolutionname">%[firstpublishlocation_solution.name]</customfield> <CustomField name="sfsystemmodstamp">%[systemmodstamp]</customfield> <CustomField name="sfsystemmodstampfq">%[systemmodstamp_fiscalquarter]</customfield> <CustomField name="sfsystemmodstampfy">%[systemmodstamp_fiscalyear]</customfield> <CustomField name="sftaskid">%[firstpublishlocation_task.id]</customfield> <CustomField name="sftaskname">%[firstpublishlocation_task.name]</customfield> <CustomField name="sfuserid">%[firstpublishlocation_user.id]</customfield> <CustomField name="sfusername">%[firstpublishlocation_user.name]</customfield> </CustomFields> </Mapping> </Salesforce> 7.4 Salesforce Mapping File Example for Chatter Objects Chatter feed items appear in various Salesforce objects. You can make the content of Chatter feed searchable. Once the Chatter objects are available (see "Salesforce ObjectsToGet Configuration File Example for Chatter Objects" on page 51), you must include appropriate mappings for these Chatter objects and fields. The following Chatter mapping file example is a good starting point. <?xml version="1.0" encoding="utf-8"?> <Salesforce> <Mapping type="feeditem"> <Title>%[Title]</Title> <Body>%[LinkUrl] %[Body]</Body> <CustomFields> <CustomField name="sysfiletype">feeditem</customfield> </CustomFields> </Mapping> <Mapping type="feedcomment"> <Title>Comment by %[CreatedBy.Name]</Title> <Body>%[CommentBody]</Body> <CustomFields> <CustomField name="sysfiletype">feedcomment</customfield> </CustomFields> </Mapping> <Mapping type="contentversion"> <Title>%[Title]</Title> <CustomFields> <CustomField name="sysfiletype"> ContentVersion</CustomField> </CustomFields> </Mapping> </Salesforce> 4www.coveo.com 80

85 Note: CES (November 2014) FeedComment can have access to information on the FeedItem: 1. In your ObjectToGet configuration file, add all needed FeedItem fields [i.e. NetworkScope (<string>networkscope</string>] on a FeedComment (see FeedItem Fields). 2. In your Salesforce mapping file, add all needed mappings on the FeedComment with a FeedItem.[Field] relationship [i.e. <CustomField name="sffeeditemnetworkscope">%[feeditem.networkscope] </CustomField>] (see FeedItem Fields). 3. Add the custom field(s) in your Salesforce field set [i.e. SFFeedItemNetworkScope]. 4. On the Coveo server, access the Administration Tool. 5. Rebuild the Salesforce source. In a search interface, all needed FeedItem information appear on a FeedComment record. 4www.coveo.com 81

86 8. Configuring a Salesforce Security Provider A Salesforce source requires a Salesforce security provider to index permissions on Salesforce items so that when end-users search for Salesforce content, in search results, they only see Salesforce items that they have permissions to see. Notes: You do not need to perform this procedure when you want to index Knowledge Base articles. It is not possible to index Knowledge Base permissions so no Salesforce security providers is needed. You can get familiar with how Coveo components deal with permissions on documents both at indexing and query time. To configure a Salesforce security provider 1. On the Coveo server, access the Administration Tool. 2. On the menu, select Configuration > Security. 3. In the navigation panel on the left, select Security Providers. 4. In the Security - Security Providers page, click Add. 5. In the Modify Security Provider page: 4www.coveo.com 82

87 a. In the Name box, enter a name of your choice for your Salesforce security provider. b. In the Security Provider Type list, select Salesforce. Note: CES (July 2013) The Salesforce item corresponds to the source type now identified as Salesforce (Legacy). c. In the User Identity list, select the user identity that you created for the Salesforce organization that you want to index (see "Creating a Salesforce User Identity" on page 10). d. In the Client Id box, paste the Customer Key value that you obtained earlier (see "Getting Salesforce Client_ID and Client_Secret Values" on page 14). e. In the Client Secret box, paste the Customer Secret value that you obtained earlier (see "Getting Salesforce Client_ID and Client_Secret Values" on page 14). f. Select the Sandbox check box only when you want to use this security provider with a source for a 4www.coveo.com 83

88 Salesforce sandbox (test.salesforce.com) rather than for your Salesforce production environment (login.salesforce.com). g. Leave the Use Refresh Token check box cleared unless you want to use the refresh token authentication method. This method is typically used when an application configures the security provider (such as in the Coveo cloud platform). h. In the Working Folder box, you can change the default security provider working folder path (C:\tmp) when for example your Coveo server is equipped with a separate hard disk for temporary files. i. In the Security Cache Refresh Frequency box, consider changing the time interval (in minutes) at which the internal cache of the Salesforce security provider is refreshed. The default value is 60 minutes. The Salesforce security provider must refresh its internal cache to maintain the freshness of the Salesforce data used when the security cache is updated (see "Refreshing Security Caches" on page 102). Example: The internal cache of the Salesforce security provider contains the user profiles. If the profile of a user changes in Salesforce, the internal cache of the security provider must first be refreshed to make this change available for the next security cache update. Consider increasing the Security Cache Refresh Frequency value when you have more than 100,000 users. The rule of thumb is 60 minutes per 100,000 users. It is not recommended to reduce the value below 60 minutes to prevent increasing too much the number of API calls made to Salesforce. j. In the Security Provider list, select the , Active Directory, or custom security provider that you created earlier (see Salesforce Connector Deployment Overview). k. Leave the Allow Complex Identities option cleared as it does not apply to this type of security provider. l. Click Apply Changes. What's Next? Create your Salesforce source (see "Configuring and Indexing a Salesforce Source" on page 89). 8.1 Configuring an Security Provider An security provider is a simple user identity container that can be used by another security provider to recognize users by their addresses. When used by more than one security providers attached to sources of various types, an security provider can act as a single sign-on system. An security provider does not connect to any system so it does not need a user identity. Note: You can get familiar with how Coveo components deal with permissions on documents both at indexing and query time. To configure an security provider 1. On the Coveo server, access the Administration Tool. 2. On the menu, select Configuration > Security. 4www.coveo.com 84

89 3. In the navigation panel on the left, select Security Providers. 4. In the Security - Security Providers page, click Add. 5. In the Modify Security Provider page: a. In the Name box, enter a name of your choice for your security provider. b. In the Security Provider Type list, select . Note: CES to (August to September 2013) The security provider DLL file is missing in the CES distribution so you will not see the option in the Security Provider Type list. To resolve this issue: i. Contact Coveo Support to get a copy of the Coveo.CES.CustomCrawlers. SecurityProvider.dll file. ii. iii. iv. When you receive the file, using an administrator account, connect to the Coveo Master server, and then copy the file to the [CES_Path]\bin folder. When your Coveo instance includes a Mirror server, also copy the file to the [CES_Path]\bin folder on the Coveo Mirror server. Restart the CES service so that the new DLL is recognized. c. In the User Identity list, leave (none). 4www.coveo.com 85

90 d. CES (August 2015) (Optional) In the Security Provider list, select another security provider to map identities to another identity type. Example: You want to map identities to Active Directory (AD) ones so you select an LDAP Lookup security provider that is chained to an AD security provider. The LDAP Lookup security provider is then able to find a user in AD from his and extracts his User Principal Name (UPN), thus allowing a mapping of the identity to an AD one. Contact Coveo Support for assistance on how to create an LDAP Lookup security provider. e. Leave the Allow Complex Identities option cleared as it does not apply to this type of security provider. f. Click Apply Changes. What's Next? Configure a security provider that will use this security provider. 8.2 Configuring an Active Directory Security Provider You must use an Active Directory (AD) security provider when you create a source to index the content of an Active Directory domain. Other security providers may need to use an Active Directory security provider to expand, map, or resolve users or groups defined in Active Directory. Coveo Enterprise Search (CES) comes with a default Active Directory security provider to which no user identity is assigned. In this case, the Active Directory security provider takes the CES service account as the user to access AD. When CES is in the same domain as AD, you can use the default Active Directory security provider as is. No configuration is needed. You may need to create another Active Directory security provider only when CES and AD are in different and untrusted domains. In this case, you only need to assign a user identity containing any user that has access to the other domain to be able to use the security provider to expand, map, or resolve users or groups defined in Active Directory of this domain. Note: You can get familiar with how Coveo components deal with permissions on documents both at indexing and query time. To create or modify an Active Directory security provider 1. On the Coveo server, access the Administration Tool. 2. Select Configuration > Security. 3. In the navigation panel on the left, select Security Providers. 4. In the Security Providers page: Click Add to create a new security provider. OR Click an existing Active Directory security provider to modify it. 5. In the Modify Security Provider page: 4www.coveo.com 86

91 a. In the Name box, enter a name to identify this security provider. b. In the Security Provider Type drop-down list: i. On a 32-bit server, select Active Directory (x86). ii. On a 64-bit server, select Active Directory (x64). c. In the User Identity section: i. In the drop-down list, select a user identity containing an account that has access to the desired domain. Example: When the user identity contains the domaina\oneusername account, the security provider connects to Domain A Active Directory. Note: When User Identity is set to (none), the security provider takes the CES service account by default. ii. When needed, click Add, Edit, or Manage user identities respectively to create, modify, or manage user identities. d. CES (January 2015) In the Provider section: 4www.coveo.com 87

92 i. In the drop-down list, select the provider that recognizes your users by their addresses. Note: When you do not want to map Active Directory (AD) users to their , select (none). ii. When needed, click Add, Edit, or Manage security providers respectively to create, modify, or manage security providers. e. In the Parameters section, in rare cases the Coveo Support could instruct you to click Add Parameters to specify other security provider parameter names and values that could help to troubleshoot security provider issues. f. Leave the Allow Complex Identities option cleared as it does not apply to this type of security provider. g. Click Save or Apply Changes, depending whether you are creating or modifying a security provider. What's Next? When you are creating or modifying the security provider: For an Active Directory source, configure and index the source. To be used by another security provider, create or modify the other security provider. 4www.coveo.com 88

93 9. Configuring and Indexing a Salesforce Source A source defines a set of configuration parameters for a specific Salesforce database. Note: When you have access to more than one Salesforce organization, you must define one source for each Salesforce organization that you want to index. To configure and index a Salesforce source 1. On the Coveo server, access the Administration Tool. 2. Select Index > Sources and Collections. 3. In the Collections section: a. Select an existing collection in which you want to add the new source. OR b. Click Add to create a new collection. 4. In the Sources section, click Add. The Add Source page that appears is organized in three sections. 5. In the General Settings section of the Add Source page: 4www.coveo.com 89

94 a. Enter the appropriate value for the following required parameters: Name A descriptive name of your choice for the connector source. Example: When the source only includes standard Salesforce objects, you could enter: MyCompany Salesforce Organization (Standard Objects) Source Type The connector used by this source. In this case, select Salesforce. Notes: If you do not see Salesforce in the Source Type list, ensure that your current environment meets the requirements (see "Salesforce Connector Requirements" on page 9). CES (July 2013) The Salesforce item correspond to the source type now identified as Salesforce (Legacy). Addresses Enter the Salesforce Website URL: Fields Select the field set that you created for this source (see Salesforce Connector Deployment Overview). Refresh Schedule Time interval at which the index is automatically refreshed to keep the index content up-to-date. By default, the Every day option instructs CES to refresh the source everyday at 12 AM. The incremental refresh takes care of maintaining the source up-to-date, so you can select a longer interval such as Every Sunday. For a CRM Content source, since deleted items cannot be detected by incremental refreshes, you may want to select a shorter interval. Tip: After you create or modify the source configuration, and for each incremental refresh for changed or new items, a Coveo source typically performs the following number of API calls to your Salesforce organization: One API call per about 1000 objects One API call per attachment One API call per about 1000 users One API call per group/role/profile/permission sets With a normal usage, these calls alone shall not reach the Salesforce organization daily limit of API calls. Note: You can create new or modify existing source refresh schedules. b. Review the value for the following parameters that often do not need to be modified: 4www.coveo.com 90

95 Rating Change this value only when you want to globally change the rating associated with all items in this source relative to the rating to other sources. Example: When this source indexes a new repository that replaces a legacy repository, you may want to set this parameter to High, so that in the search interface, results from this source appear earlier in the list compared to those from the legacy repository. Document Types If you defined a custom document type set for this source, select it. Active Languages If you defined custom active language sets, ensure to select the most appropriate for this source. 6. In the Specific Connector Parameters & Options section of the Add Source page: a. Review the following parameters: ObjectsToGet File Enter the absolute full path(s) pointing to where you saved the custom ObjectsToGet configuration file (s) that you created (see "Creating a Salesforce ObjectsToGet Configuration File" on page 32). When you have more than one ObjectsToGet configuration files, separate the full file paths with a semicolon (;) character. Note: CES (July 2014) The parameter can only contain one path. 4www.coveo.com 91

96 Example: D:\CES7\Config\SalesforceObjectsToGet.xml ;D:\CES7\Config\SalesforceObjectsToGet2.xml Client ID Enter the Customer Key value for the Salesforce organization that you want to index (see "Getting Salesforce Client_ID and Client_Secret Values" on page 14). Client Secret Enter the Customer Secret value for the Salesforce organization that you want to index (see "Getting Salesforce Client_ID and Client_Secret Values" on page 14). Mapping File Leave this parameter empty when you want to automatically map all available Salesforce metadata to CES fields using the same name If you created a mapping file, enter the absolute full path pointing to where you saved the mapping file that you created (see "Creating a Salesforce Mapping File" on page 65). Example: D:\CES7\Config\SalesforceMapping.xml Number of Refresh Threads When needed, change the number of simultaneous downloads that the connector can handle. The default value is 2. Sandbox Select this option only when you want the connector to connect to your Salesforce sandbox (test.salesforce.com) rather than to your Salesforce production environment (login.salesforce.com). Use Refresh Token Leave the Use Refresh Token check box cleared unless you want to use the refresh token authentication method. This method is typically used when an application configures the source (such as in the Coveo cloud platform). b. In the Parameters section, click Add Parameter when you want to show and configure advanced hidden source parameters (see "Modifying Hidden Salesforce Source Parameters" on page 95). c. In the Option section, the state of check boxes generally does not need to be changed: Index Subfolders Keep this check box selected (recommended). By doing so, all subfolders from the specified starting address are indexed. Index the document's metadata When selected, CES indexes all the document metadata, even metadata that are not associated with a 4www.coveo.com 92

97 field. The orphan metadata are added to the body of the document so that they can be searched using free text queries. When cleared (default), only the values of system and custom fields that have the Free Text Queries attribute selected will be searchable without using a field query. Example: A document has two metadata: LastEditedBy containing the value Hector Smith Department containing the value RH In CES, the custom field CorpDepartment is bound to the metadata Department and its Free Text Queries attribute is selected. When the Index the document's metadata option is cleared, searching for RH returns the document because a field is indexing this value. Searching for hector does not return the document because no field is indexing this value. When the Index the document's metadata option is selected, searching for hector also returns the document because CES indexed orphan metadata. Document's addresses are case-sensitive Leave the check box cleared. This parameter needs to be checked only in rare cases for systems in which distinct documents may have the same name but different casing. Generate a cached HTML version of indexed documents When you select this check box (recommended), at indexing time, CES creates HTML versions of indexed documents. In the search interfaces, users can then more rapidly review the content by clicking the Quick View link rather than opening the original document with the original application. Consider clearing this check box only when you do not want to use Quick View links or to save resources when building the source. Open results with cached version Leave this check box cleared (recommended) so that in the search interfaces, the main search result link opens the original document in Salesforce. Consider selecting this check box only when you do not want users to be able to open the original document but only see the HTML version of the document as a Quick View. In this case, you must also select Generate a cached HTML version of indexed documents. 7. In the Security section of the Add Source page: 4www.coveo.com 93

98 a. In the Security Provider drop-down list: Note: The selected security provider must have the same values as this source for the Client ID, Client Secret, and Sandbox parameters. i. For standard objects and fields and CRM Content sources, select the security provider that you created for this source (see "Configuring a Salesforce Security Provider" on page 82). ii. For a Knowledge Base source, select (none), since no security provider is required for this type of source. b. In the Authentication drop-down list, select the Salesforce user identity that you created for this source. c. Click Save to save the source configuration. 8. When the source is for Salesforce Knowledge Base articles, you have to add permissions at the source level. 9. Rebuild the source. 10. Validate that the source building process is executed without errors: In the navigation panel on the left, click Status, and then validate that the indexing proceeds without errors. OR Open the CES Console to monitor the source building activities. What's Next? Set an incremental refresh schedule for your source. If you encounter issues: Solve typical issues that return error messages (see "Troubleshooting Salesforce Connector Issues" on page 101). Consider adding and modifying default values of hidden source parameters (see "Modifying Hidden Salesforce Source Parameters" on page 95). 4www.coveo.com 94

99 9.1 Modifying Hidden Salesforce Source Parameters The Add Source and Source:... General pages of the Administration Tool present the parameters with which you can configure the connector for most Salesforce setups. More advanced and more rarely used parameters are hidden. You can choose to make one or more of these parameters appear in the Add Source and Source:... General pages of the Administration Tool so that you can change their default value. Consider changing values of hidden parameters only when you encounter time out error messages or performance issues. The following list describes the available advanced hidden parameters for Salesforce sources. The parameter type (integer, string ) appears between parentheses following the parameter name. ExtractPrivateObjectsSharingPermissions (Boolean) CES (May 2014) Whether to retrieve and index sharing permissions of private objects, or not. The default is true, in which case when the UseNewPermissionModel parameter is also set to true, for a document with sharing permissions, you can see from the Index Browser a permission model with two levels for share permissions where the second level is READ ACCESS & SHARING for sharing permissions. IndexSharingSettings (Boolean) Whether to retrieve and index content documents sharing settings. The default value is True. Indexing sharing settings require one API call per Salesforce record. When indexing sharing permissions is not important for your Salesforce organization, you can turn this option off to save API calls. IndexArchivedActivities (Boolean) Whether the connector should index archived activities (tasks and events). The default value is False. LoadFiscalYearMetadata (Boolean) Whether the connector should query the Salesforce API to add metadata about fiscal year information. The default value is True. The fiscal period metadata is available when the Fiscal Year feature is enabled in Salesforce (see How do I set Fiscal Year and start month?). The following table describes additional fiscal period metadata that will be added for every DateTime metadata that is already available on the item (ex.: if the item contains 2 metadata of type DateTime, then 8 new metadata will be added on the item). 4www.coveo.com 95

Coveo Platform 7.0. Oracle Knowledge Connector Guide

Coveo Platform 7.0. Oracle Knowledge Connector Guide Coveo Platform 7.0 Oracle Knowledge 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

More information

Coveo Platform 7.0. Microsoft Active Directory Connector Guide

Coveo Platform 7.0. Microsoft Active Directory Connector Guide Coveo Platform 7.0 Microsoft Active Directory Connector Guide Notice The content in this document represents the current view of Coveo as of the date of publication. Because Coveo continually responds

More information

Coveo Platform 7.0. Microsoft Dynamics CRM Connector Guide

Coveo Platform 7.0. Microsoft Dynamics CRM Connector Guide Coveo Platform 7.0 Microsoft Dynamics CRM 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

More information

Salesforce Files Connect Implementation Guide

Salesforce Files Connect Implementation Guide Salesforce Files Connect Implementation Guide Salesforce, Winter 16 @salesforcedocs Last updated: December 10, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered

More information

Coveo Platform 7.0. Microsoft SharePoint Connector Guide

Coveo Platform 7.0. Microsoft SharePoint Connector Guide Coveo Platform 7.0 Microsoft SharePoint 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

More information

Configuration Guide - OneDesk to SalesForce Connector

Configuration Guide - OneDesk to SalesForce Connector Configuration Guide - OneDesk to SalesForce Connector Introduction The OneDesk to SalesForce Connector allows users to capture customer feedback and issues in OneDesk without leaving their familiar SalesForce

More information

Fairsail REST API: Guide for Developers

Fairsail REST API: Guide for Developers Fairsail REST API: Guide for Developers Version 1.02 FS-API-REST-PG-201509--R001.02 Fairsail 2015. All rights reserved. This document contains information proprietary to Fairsail and may not be reproduced,

More information

SpringCM Integration Guide. for Salesforce

SpringCM Integration Guide. for Salesforce SpringCM Integration Guide for Salesforce January 2013 Introduction You are minutes away from fully integrating SpringCM into your Salesforce account. The SpringCM Open Cloud Connector will allow you to

More information

Coveo Platform 7.0. Microsoft Exchange Connector Guide

Coveo Platform 7.0. Microsoft Exchange Connector Guide Coveo Platform 7.0 Microsoft Exchange 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

More information

Salesforce Opportunities Portlet Documentation v2

Salesforce Opportunities Portlet Documentation v2 Salesforce Opportunities Portlet Documentation v2 From ACA IT-Solutions Ilgatlaan 5C 3500 Hasselt liferay@aca-it.be Date 29.04.2014 This document will describe how the Salesforce Opportunities portlet

More information

SpringCM Integration Guide. for Salesforce

SpringCM Integration Guide. for Salesforce SpringCM Integration Guide for Salesforce September 2014 Introduction You are minutes away from fully integrating SpringCM into your Salesforce account. The SpringCM Open Cloud Connector will allow you

More information

SpringCM Troubleshooting Guide for Salesforce

SpringCM Troubleshooting Guide for Salesforce SpringCM Troubleshooting Guide for Salesforce July 2013 TABLE OF CONTENTS FAQS:... 3 WHY DID I NOT RECEIVE A SPRINGCM ACTIVATION EMAIL?... 3 WHY DON T MY SALESFORCE USERS HAVE ACCESS TO SPRINGCM?... 3

More information

Enterprise Territory Management Implementation Guide

Enterprise Territory Management Implementation Guide Enterprise Territory Management Implementation Guide Salesforce, Winter 16 @salesforcedocs Last updated: December 8, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered

More information

Salesforce Integration User Guide Version 1.1

Salesforce Integration User Guide Version 1.1 1 Introduction Occasionally, a question or comment in customer community forum cannot be resolved right away by a community manager and must be escalated to another employee via a CRM system. Vanilla s

More information

Creating a Public Knowledge Base with Salesforce Knowledge

Creating a Public Knowledge Base with Salesforce Knowledge Salesforce.com: Spring 13 Creating a Public Knowledge Base with Salesforce Knowledge Last updated: February 1, 2013 Copyright 2000 2013 salesforce.com, inc. All rights reserved. Salesforce.com is a registered

More information

Contents. 2 Alfresco API Version 1.0

Contents. 2 Alfresco API Version 1.0 The Alfresco API Contents The Alfresco API... 3 How does an application do work on behalf of a user?... 4 Registering your application... 4 Authorization... 4 Refreshing an access token...7 Alfresco CMIS

More information

DocuSign Connect for Salesforce Guide

DocuSign Connect for Salesforce Guide Information Guide 1 DocuSign Connect for Salesforce Guide 1 Copyright 2003-2013 DocuSign, Inc. All rights reserved. For information about DocuSign trademarks, copyrights and patents refer to the DocuSign

More information

DocuSign for Salesforce Administrator Guide v6.1.1 Rev A Published: July 16, 2015

DocuSign for Salesforce Administrator Guide v6.1.1 Rev A Published: July 16, 2015 DocuSign for Salesforce Administrator Guide v6.1.1 Rev A Published: July 16, 2015 Copyright Copyright 2003-2015 DocuSign, Inc. All rights reserved. For information about DocuSign trademarks, copyrights

More information

Salesforce Customer Portal Implementation Guide

Salesforce Customer Portal Implementation Guide Salesforce Customer Portal Implementation Guide Salesforce, Winter 16 @salesforcedocs Last updated: December 10, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered

More information

Chatter Answers Implementation Guide

Chatter Answers Implementation Guide Chatter Answers Implementation Guide Salesforce, Winter 16 @salesforcedocs Last updated: October 16, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark

More information

Adeptia Suite 6.2. Application Services Guide. Release Date October 16, 2014

Adeptia Suite 6.2. Application Services Guide. Release Date October 16, 2014 Adeptia Suite 6.2 Application Services Guide Release Date October 16, 2014 343 West Erie, Suite 440 Chicago, IL 60654, USA Phone: (312) 229-1727 x111 Fax: (312) 229-1736 Document Information DOCUMENT INFORMATION

More information

License Management App 2.1 Administration and User Guide

License Management App 2.1 Administration and User Guide Salesforce.com: Winter '11 License Management App 2.1 Administration and User Guide Last updated: November 30, 2010 Copyright 2000-2010 salesforce.com, inc. All rights reserved. Salesforce.com is a registered

More information

How To Use Salesforce Identity Features

How To Use Salesforce Identity Features Identity Implementation Guide Version 35.0, Winter 16 @salesforcedocs Last updated: October 27, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of

More information

Chatter Answers Implementation Guide

Chatter Answers Implementation Guide Chatter Answers Implementation Guide Salesforce, Summer 16 @salesforcedocs Last updated: May 27, 2016 Copyright 2000 2016 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark

More information

License Management and Support Guide

License Management and Support Guide License Management and Support Guide Salesforce, Winter 16 @salesforcedocs Last updated: December 8, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark

More information

Installation and Administration Guide

Installation and Administration Guide Installation and Administration Guide Release 8 This installation guide will walk you through how to install and deploy Conga Composer, including recommended settings for the application. Contact Support:

More information

Salesforce.com Integration Guide

Salesforce.com Integration Guide ServicePattern Version 3.6 Revision SP36-SFDC-41855 Bright Pattern, Inc. 1111 Bayhill Drive, Suite 275, San Bruno, CA 94066 Phone: +1 (855) 631.4553 or +1 (650) 529.4099 Fax: +1 (415) 480.1782 www.brightpattern.com

More information

Virtual Contact Center

Virtual Contact Center Virtual Contact Center Salesforce Multichannel Integration Configuration Guide Version 7.0 Revision 2.0 Copyright 2012, 8x8, Inc. All rights reserved. This document is provided for information purposes

More information

CRM Migration Manager 3.1.1 for Microsoft Dynamics CRM. User Guide

CRM Migration Manager 3.1.1 for Microsoft Dynamics CRM. User Guide CRM Migration Manager 3.1.1 for Microsoft Dynamics CRM User Guide Revision D Issued July 2014 Table of Contents About CRM Migration Manager... 4 System Requirements... 5 Operating Systems... 5 Dynamics

More information

Getting Started with the Ed-Fi ODS and Ed-Fi ODS API

Getting Started with the Ed-Fi ODS and Ed-Fi ODS API Getting Started with the Ed-Fi ODS and Ed-Fi ODS API Ed-Fi ODS and Ed-Fi ODS API Version 2.0 - Technical Preview October 2014 2014 Ed-Fi Alliance, LLC. All rights reserved. Ed-Fi is a registered trademark

More information

SETTING UP YOUR JAVA DEVELOPER ENVIRONMENT

SETTING UP YOUR JAVA DEVELOPER ENVIRONMENT SETTING UP YOUR JAVA DEVELOPER ENVIRONMENT Summary This tipsheet describes how to set up your local developer environment for integrating with Salesforce. This tipsheet describes how to set up your local

More information

Force.com REST API Developer's Guide

Force.com REST API Developer's Guide Force.com REST API Developer's Guide Version 35.0, Winter 16 @salesforcedocs Last updated: December 10, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark

More information

for Salesforce CRM INSTALLATION GUIDE February 2011 www.crm.hoovers.com/salesforce

for Salesforce CRM INSTALLATION GUIDE February 2011 www.crm.hoovers.com/salesforce for Salesforce CRM INSTALLATION GUIDE February 2011 www.crm.hoovers.com/salesforce Table of Contents Before You Begin... 3 First Time Installing Access Hoover s... 3 Updating Access Hoover s... 3 Note

More information

HOTPin Integration Guide: Salesforce SSO with Active Directory Federated Services

HOTPin Integration Guide: Salesforce SSO with Active Directory Federated Services 1 HOTPin Integration Guide: Salesforce SSO with Active Directory Federated Services Disclaimer Disclaimer of Warranties and Limitation of Liabilities All information contained in this document is provided

More information

Set Up and Maintain Customer Support Tools

Set Up and Maintain Customer Support Tools Set Up and Maintain Customer Support Tools Salesforce, Winter 16 @salesforcedocs Last updated: December 10, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered

More information

Glyma Deployment Instructions

Glyma Deployment Instructions Glyma Deployment Instructions Version 0.8 Copyright 2015 Christopher Tomich and Paul Culmsee and Peter Chow Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except

More information

McAfee Cloud Identity Manager

McAfee Cloud Identity Manager Salesforce Cloud Connector Guide McAfee Cloud Identity Manager version 1.1 or later COPYRIGHT Copyright 2013 McAfee, Inc. All Rights Reserved. No part of this publication may be reproduced, transmitted,

More information

Kofax Export Connector 8.3.0 for Microsoft SharePoint

Kofax Export Connector 8.3.0 for Microsoft SharePoint Kofax Export Connector 8.3.0 for Microsoft SharePoint Administrator's Guide 2013-02-27 2013 Kofax, Inc., 15211 Laguna Canyon Road, Irvine, California 92618, U.S.A. All rights reserved. Use is subject to

More information

INTEGRATION GUIDE. DIGIPASS Authentication for Salesforce using IDENTIKEY Federation Server

INTEGRATION GUIDE. DIGIPASS Authentication for Salesforce using IDENTIKEY Federation Server INTEGRATION GUIDE DIGIPASS Authentication for Salesforce using IDENTIKEY Federation Server Disclaimer Disclaimer of Warranties and Limitation of Liabilities All information contained in this document is

More information

Cloud Elements! Marketing Hub Provisioning and Usage Guide!

Cloud Elements! Marketing Hub Provisioning and Usage Guide! Cloud Elements Marketing Hub Provisioning and Usage Guide API Version 2.0 Page 1 Introduction The Cloud Elements Marketing Hub is the first API that unifies marketing automation across the industry s leading

More information

Application Notes: MaxACD Connector For Salesforce

Application Notes: MaxACD Connector For Salesforce Application Notes: MaxACD Connector For Salesforce March 2013 Contents Introduction... 3 Requirements... 3 Installing the MaxACD Salesforce Connector... 4 Step 1: Import the Call Center File into Salesforce...

More information

Wave Analytics Platform Setup Guide

Wave Analytics Platform Setup Guide Wave Analytics Platform Setup Guide Salesforce, Winter 16 @salesforcedocs Last updated: December 15, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark

More information

Course Details V1.0. Selinis Technologies Pvt Ltd. 2012, All Rights Reserved

Course Details V1.0. Selinis Technologies Pvt Ltd. 2012, All Rights Reserved Salesforce.com CRM Administration & Development Course Details V1.0 Selinis Pvt Ltd. 2012, All Rights Reserved Salesforce.com Administration Course Details V1.0 CRM Overview Introduction to CRM? Why CRM?

More information

Setting Up Person Accounts

Setting Up Person Accounts Setting Up Person Accounts Salesforce, Summer 15 @salesforcedocs Last updated: June 30, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of salesforce.com,

More information

USER GUIDE for Salesforce

USER GUIDE for Salesforce for Salesforce USER GUIDE Contents 3 Introduction to Backupify 5 Quick-start guide 6 Administration 6 Logging in 6 Administrative dashboard 7 General settings 8 Account settings 9 Add services 9 Contact

More information

W H IT E P A P E R. Salesforce CRM Security Audit Guide

W H IT E P A P E R. Salesforce CRM Security Audit Guide W HITEPAPER Salesforce CRM Security Audit Guide Contents Introduction...1 Background...1 Security and Compliance Related Settings...1 Password Settings... 2 Audit and Recommendation... 2 Session Settings...

More information

Jet Data Manager 2012 User Guide

Jet Data Manager 2012 User Guide Jet Data Manager 2012 User Guide Welcome This documentation provides descriptions of the concepts and features of the Jet Data Manager and how to use with them. With the Jet Data Manager you can transform

More information

Salesforce Platform Encryption Implementation Guide

Salesforce Platform Encryption Implementation Guide Salesforce Platform Encryption Implementation Guide @salesforcedocs Last updated: December 10, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of

More information

Getting Started with Relationship Groups

Getting Started with Relationship Groups Getting Started with Relationship Groups Understanding & Implementing Salesforce, Winter 16 @salesforcedocs Last updated: December 10, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved.

More information

Qlik REST Connector Installation and User Guide

Qlik REST Connector Installation and User Guide Qlik REST Connector Installation and User Guide Qlik REST Connector Version 1.0 Newton, Massachusetts, November 2015 Authored by QlikTech International AB Copyright QlikTech International AB 2015, All

More information

OAuth 2.0 Developers Guide. Ping Identity, Inc. 1001 17th Street, Suite 100, Denver, CO 80202 303.468.2900

OAuth 2.0 Developers Guide. Ping Identity, Inc. 1001 17th Street, Suite 100, Denver, CO 80202 303.468.2900 OAuth 2.0 Developers Guide Ping Identity, Inc. 1001 17th Street, Suite 100, Denver, CO 80202 303.468.2900 Table of Contents Contents TABLE OF CONTENTS... 2 ABOUT THIS DOCUMENT... 3 GETTING STARTED... 4

More information

Copyright Pivotal Software Inc, 2013-2015 1 of 10

Copyright Pivotal Software Inc, 2013-2015 1 of 10 Table of Contents Table of Contents Getting Started with Pivotal Single Sign-On Adding Users to a Single Sign-On Service Plan Administering Pivotal Single Sign-On Choosing an Application Type 1 2 5 7 10

More information

Quick Actions Implementation Guide

Quick Actions Implementation Guide Quick Actions Implementation Guide Salesforce, Spring 16 @salesforcedocs Last updated: February 3, 2016 Copyright 2000 2016 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark

More information

Salesforce Platform Encryption Implementation Guide

Salesforce Platform Encryption Implementation Guide Salesforce Platform Encryption Implementation Guide @salesforcedocs Last updated: January 21, 2016 Copyright 2000 2016 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of

More information

Introduction to Google Apps for Business Integration

Introduction to Google Apps for Business Integration Introduction to Google Apps for Business Integration Overview Providing employees with mobile email access can introduce a number of security concerns not addressed by most standard email security infrastructures.

More information

Management Reporter Integration Guide for Microsoft Dynamics AX

Management Reporter Integration Guide for Microsoft Dynamics AX Microsoft Dynamics Management Reporter Integration Guide for Microsoft Dynamics AX July 2013 Find updates to this documentation at the following location: http://go.microsoft.com/fwlink/?linkid=162565

More information

Connector for Microsoft Dynamics Configuration Guide for Microsoft Dynamics SL

Connector for Microsoft Dynamics Configuration Guide for Microsoft Dynamics SL Microsoft Dynamics Connector for Microsoft Dynamics Configuration Guide for Microsoft Dynamics SL Revised August, 2012 Find updates to this documentation at the following location: http://www.microsoft.com/download/en/details.aspx?id=10381

More information

Cloud Elements ecommerce Hub Provisioning Guide API Version 2.0 BETA

Cloud Elements ecommerce Hub Provisioning Guide API Version 2.0 BETA Cloud Elements ecommerce Hub Provisioning Guide API Version 2.0 BETA Page 1 Introduction The ecommerce Hub provides a uniform API to allow applications to use various endpoints such as Shopify. The following

More information

Setting Up Resources in VMware Identity Manager

Setting Up Resources in VMware Identity Manager Setting Up Resources in VMware Identity Manager VMware Identity Manager 2.4 This document supports the version of each product listed and supports all subsequent versions until the document is replaced

More information

Citrix Systems, Inc.

Citrix Systems, Inc. Citrix Password Manager Quick Deployment Guide Install and Use Password Manager on Presentation Server in Under Two Hours Citrix Systems, Inc. Notice The information in this publication is subject to change

More information

How To Use Kiteworks On A Microsoft Webmail Account On A Pc Or Macbook Or Ipad (For A Webmail Password) On A Webcomposer (For An Ipad) On An Ipa Or Ipa (For

How To Use Kiteworks On A Microsoft Webmail Account On A Pc Or Macbook Or Ipad (For A Webmail Password) On A Webcomposer (For An Ipad) On An Ipa Or Ipa (For GETTING STARTED WITH KITEWORKS DEVELOPER GUIDE Version 1.0 Version 1.0 Copyright 2014 Accellion, Inc. All rights reserved. These products, documents, and materials are protected by copyright law and distributed

More information

SmartConnect User Credentials 2012

SmartConnect User Credentials 2012 User Credentials Used When The SmartConnect client connects to Microsoft Dynamics GP When connecting to the Microsoft Dynamics GP the credentials of the current AD user are used to connect to Dynamics

More information

Vyapin Office 365 Management Suite

Vyapin Office 365 Management Suite Vyapin Office 365 Management Suite Last Updated: May 2015 Copyright 2015 Vyapin Software Systems Private Limited. All rights reserved. This document is being furnished by Vyapin Software Systems Private

More information

Salesforce Integration. Installation Manual Release

Salesforce Integration. Installation Manual Release Salesforce Integration Installation Manual Release Table of Contents Salesforce Integration... Error! Bookmark not defined. 1. Integration with LeadForce1(Manual)... 3 2. Integration with LeadForce1 (Automated

More information

Installation Guide ARGUS Symphony 1.6 and Business App Toolkit. 6/13/2014 2014 ARGUS Software, Inc.

Installation Guide ARGUS Symphony 1.6 and Business App Toolkit. 6/13/2014 2014 ARGUS Software, Inc. ARGUS Symphony 1.6 and Business App Toolkit 6/13/2014 2014 ARGUS Software, Inc. Installation Guide for ARGUS Symphony 1.600.0 6/13/2014 Published by: ARGUS Software, Inc. 3050 Post Oak Boulevard Suite

More information

SnapLogic Salesforce Snap Reference

SnapLogic Salesforce Snap Reference SnapLogic Salesforce Snap Reference Document Release: October 2012 SnapLogic, Inc. 71 East Third Avenue San Mateo, California 94401 U.S.A. www.snaplogic.com Copyright Information 2012 SnapLogic, Inc. All

More information

BEST PRACTICES EMAIL ARCHIVE in contentaccess version 2.5

BEST PRACTICES EMAIL ARCHIVE in contentaccess version 2.5 BEST PRACTICES EMAIL ARCHIVE in contentaccess version 2.5 Use case: Email Archive configuration for companies with up to 2,000 mailboxes This document gives you an overview how to configure email archive

More information

Getting Started With Communities

Getting Started With Communities Getting Started With Communities Salesforce, Winter 16 @salesforcedocs Last updated: December 17, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark

More information

Copyright 2014 Jaspersoft Corporation. All rights reserved. Printed in the U.S.A. Jaspersoft, the Jaspersoft

Copyright 2014 Jaspersoft Corporation. All rights reserved. Printed in the U.S.A. Jaspersoft, the Jaspersoft 5.6 Copyright 2014 Jaspersoft Corporation. All rights reserved. Printed in the U.S.A. Jaspersoft, the Jaspersoft logo, Jaspersoft ireport Designer, JasperReports Library, JasperReports Server, Jaspersoft

More information

Integrating LivePerson with Salesforce

Integrating LivePerson with Salesforce Integrating LivePerson with Salesforce V 9.2 March 2, 2010 Implementation Guide Description Who should use this guide? Duration This guide describes the process of integrating LivePerson and Salesforce

More information

IBM Campaign and IBM Silverpop Engage Version 1 Release 2 August 31, 2015. Integration Guide IBM

IBM Campaign and IBM Silverpop Engage Version 1 Release 2 August 31, 2015. Integration Guide IBM IBM Campaign and IBM Silverpop Engage Version 1 Release 2 August 31, 2015 Integration Guide IBM Note Before using this information and the product it supports, read the information in Notices on page 93.

More information

multiple placeholders bound to one definition, 158 page approval not match author/editor rights, 157 problems with, 156 troubleshooting, 156 158

multiple placeholders bound to one definition, 158 page approval not match author/editor rights, 157 problems with, 156 troubleshooting, 156 158 Index A Active Directory Active Directory nested groups, 96 creating user accounts, 67 custom authentication, 66 group members cannot log on, 153 mapping certificates, 65 mapping user to Active Directory

More information

WatchDox Administrator's Guide. Application Version 3.7.5

WatchDox Administrator's Guide. Application Version 3.7.5 Application Version 3.7.5 Confidentiality This document contains confidential material that is proprietary WatchDox. The information and ideas herein may not be disclosed to any unauthorized individuals

More information

User's Guide. ControlPoint. Change Manager (Advanced Copy) SharePoint Migration. v. 4.0

User's Guide. ControlPoint. Change Manager (Advanced Copy) SharePoint Migration. v. 4.0 User's Guide ControlPoint Change Manager (Advanced Copy) SharePoint Migration v. 4.0 Last Updated 7 August 2013 i Contents Preface 3 What's New in Version 4.0... 3 Components... 3 The ControlPoint Central

More information

Integration Guide. SafeNet Authentication Service. Using SAS as an Identity Provider for Salesforce

Integration Guide. SafeNet Authentication Service. Using SAS as an Identity Provider for Salesforce SafeNet Authentication Service Integration Guide Technical Manual Template Release 1.0, PN: 000-000000-000, Rev. A, March 2013, Copyright 2013 SafeNet, Inc. All rights reserved. 1 Document Information

More information

RoomWizard Synchronization Software Manual Installation Instructions

RoomWizard Synchronization Software Manual Installation Instructions 2 RoomWizard Synchronization Software Manual Installation Instructions Table of Contents Exchange Server Configuration... 4 RoomWizard Synchronization Software Installation and Configuration... 5 System

More information

Introduction to Directory Services

Introduction to Directory Services Introduction to Directory Services Overview This document explains how AirWatch integrates with your organization's existing directory service such as Active Directory, Lotus Domino and Novell e-directory

More information

Getting Started with the Aloha Community Template for Salesforce Identity

Getting Started with the Aloha Community Template for Salesforce Identity Getting Started with the Aloha Community Template for Salesforce Identity Salesforce, Winter 16 @salesforcedocs Last updated: December 10, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved.

More information

NS DISCOVER 4.0 ADMINISTRATOR S GUIDE. July, 2015. Version 4.0

NS DISCOVER 4.0 ADMINISTRATOR S GUIDE. July, 2015. Version 4.0 NS DISCOVER 4.0 ADMINISTRATOR S GUIDE July, 2015 Version 4.0 TABLE OF CONTENTS 1 General Information... 4 1.1 Objective... 4 1.2 New 4.0 Features Improvements... 4 1.3 Migrating from 3.x to 4.x... 5 2

More information

User Guide Release Management for Visual Studio 2013

User Guide Release Management for Visual Studio 2013 User Guide Release Management for Visual Studio 2013 ABOUT THIS GUIDE The User Guide for the release management features is for administrators and users. The following related documents for release management

More information

For details about using automatic user provisioning with Salesforce, see Configuring user provisioning for Salesforce.

For details about using automatic user provisioning with Salesforce, see Configuring user provisioning for Salesforce. Chapter 41 Configuring Salesforce The following is an overview of how to configure the Salesforce.com application for singlesign on: 1 Prepare Salesforce for single sign-on: This involves the following:

More information

Genius in Salesforce.com Pre- Installation Setup

Genius in Salesforce.com Pre- Installation Setup Genius in Salesforce.com Pre- Installation Setup Contents Introduction... 3 License Level... 3 Salesforce Profile Permission... 3 Administration Permissions:... 3 General User Permissions:... 4 Standard

More information

PaperCut Payment Gateway Module - PayPal Payflow Link - Quick Start Guide

PaperCut Payment Gateway Module - PayPal Payflow Link - Quick Start Guide PaperCut Payment Gateway Module - PayPal Payflow Link - Quick Start Guide This guide is designed to supplement the Payment Gateway Module documentation and provides a guide to installing, setting up, and

More information

29200 Northwestern Hwy Suite 350 Southfield, MI 48034. 1-866-4WINSPC winspc.com

29200 Northwestern Hwy Suite 350 Southfield, MI 48034. 1-866-4WINSPC winspc.com 29200 Northwestern Hwy Suite 350 Southfield, MI 48034 1-866-4WINSPC winspc.com 2016 DataNet Quality Systems. All rights reserved. WinSPC is a registered trademark of DataNet Quality Systems. Document Version:

More information

PingFederate. Windows Live Cloud Identity Connector. User Guide. Version 1.0

PingFederate. Windows Live Cloud Identity Connector. User Guide. Version 1.0 Windows Live Cloud Identity Connector Version 1.0 User Guide 2011 Ping Identity Corporation. All rights reserved. Windows Live Cloud Identity Connector User Guide Version 1.0 April, 2011 Ping Identity

More information

Field Audit Trail Implementation Guide

Field Audit Trail Implementation Guide Field Audit Trail Implementation Guide Salesforce, Spring 16 @salesforcedocs Last updated: January 19, 2016 Copyright 2000 2016 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark

More information

Configuring Salesforce

Configuring Salesforce Chapter 94 Configuring Salesforce The following is an overview of how to configure the Salesforce.com application for singlesign on: 1 Prepare Salesforce for single sign-on: This involves the following:

More information

Identity Implementation Guide

Identity Implementation Guide Identity Implementation Guide Version 37.0, Summer 16 @salesforcedocs Last updated: May 26, 2016 Copyright 2000 2016 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of salesforce.com,

More information

Customization & Enhancement Guide. Table of Contents. Index Page. Using This Document

Customization & Enhancement Guide. Table of Contents. Index Page. Using This Document Customization & Enhancement Guide Table of Contents Using This Document This document provides information about using, installing and configuring FTP Attachments applications provided by Enzigma. It also

More information

INTEGRATION GUIDE. DIGIPASS Authentication for Google Apps using IDENTIKEY Federation Server

INTEGRATION GUIDE. DIGIPASS Authentication for Google Apps using IDENTIKEY Federation Server INTEGRATION GUIDE DIGIPASS Authentication for Google Apps using IDENTIKEY Federation Server Disclaimer Disclaimer of Warranties and Limitation of Liabilities All information contained in this document

More information

Salesforce.com Winter 14 Release Notes

Salesforce.com Winter 14 Release Notes Salesforce.com: Winter 14 Salesforce.com Winter 14 Release Notes Last updated: January 4, 2014 Copyright 2000 2013 salesforce.com, inc. All rights reserved. Salesforce.com is a registered trademark of

More information

Integrating Oracle Sales Cloud, Release 9 with JD Edwards EnterpriseOne release 9.1 Implementation Guide

Integrating Oracle Sales Cloud, Release 9 with JD Edwards EnterpriseOne release 9.1 Implementation Guide December 2014 Integrating Oracle Sales Cloud, Release 9 with JD Edwards EnterpriseOne release 9.1 Implementation Guide Doc version 1.0 Copyright 2005, 2014 Oracle and/or its affiliates. All rights reserved.

More information

Hubcase for Salesforce Installation and Configuration Guide

Hubcase for Salesforce Installation and Configuration Guide Hubcase for Salesforce Installation and Configuration Guide Note: This document is intended for system administrator, and not for end users. Installation and configuration require understanding of both

More information

How To Install An Aneka Cloud On A Windows 7 Computer (For Free)

How To Install An Aneka Cloud On A Windows 7 Computer (For Free) MANJRASOFT PTY LTD Aneka 3.0 Manjrasoft 5/13/2013 This document describes in detail the steps involved in installing and configuring an Aneka Cloud. It covers the prerequisites for the installation, the

More information

Configuration Guide. BES12 Cloud

Configuration Guide. BES12 Cloud Configuration Guide BES12 Cloud Published: 2016-04-08 SWD-20160408113328879 Contents About this guide... 6 Getting started... 7 Configuring BES12 for the first time...7 Administrator permissions you need

More information

Force.com Sites Implementation Guide

Force.com Sites Implementation Guide Force.com Sites Implementation Guide Salesforce, Winter 16 @salesforcedocs Last updated: October 16, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark

More information

Qvidian Playbooks & Salesforce Setup Guide. Fall Release 2013

Qvidian Playbooks & Salesforce Setup Guide. Fall Release 2013 Qvidian Playbooks & Salesforce Setup Guide Fall Release 2013 Last Updated: 11/12/2013 Introduction Welcome to Qvidian Sales Playbooks & Analytics! This guide is directed toward CRM Administrators, Playbook

More information

Dell One Identity Cloud Access Manager 8.0.1 - How to Develop OpenID Connect Apps

Dell One Identity Cloud Access Manager 8.0.1 - How to Develop OpenID Connect Apps Dell One Identity Cloud Access Manager 8.0.1 - How to Develop OpenID Connect Apps May 2015 This guide includes: What is OAuth v2.0? What is OpenID Connect? Example: Providing OpenID Connect SSO to a Salesforce.com

More information

Results CRM 2012 User Manual

Results CRM 2012 User Manual Results CRM 2012 User Manual A Guide to Using Results CRM Standard, Results CRM Plus, & Results CRM Business Suite Table of Contents Installation Instructions... 1 Single User & Evaluation Installation

More information

TREENO ELECTRONIC DOCUMENT MANAGEMENT. Administration Guide

TREENO ELECTRONIC DOCUMENT MANAGEMENT. Administration Guide TREENO ELECTRONIC DOCUMENT MANAGEMENT Administration Guide October 2012 Contents Introduction... 8 About This Guide... 9 About Treeno... 9 Managing Security... 10 Treeno Security Overview... 10 Administrator

More information