Introduction
Salesforce permet très facilement d’avoir une instance développeur pour tester certaines fonctionnalités du produit. Comme Salesforce est très utilisé par les entreprises, il s’agit d’une application représentative lors de nos démos pour du SSO, du provisioning, etc.
La documentation de Salesforce est assez complète mais elle ne relate pas toujours des spécificités de l’édition développeur. Voici quelques notes pour travailler avec Salesforce
Authentification API
Pour utiliser les API, on doit obtenir un jeton d’accès ou access token. Salesforce utilise OAuth2.0 et pour l’instant, j’ai réussi à faire fonctionner 2 méthodes:
-
Authorization Code
-
Refresh Token
Salesforce définit la notion d'"Application connectée". Pour créer une application, dans la partie Setup en Lightning, sous "Administration", aller dans Apps > App Manager et cliquer sur le bouton New Connected App.
Plus tard, il est possible d’éditer une application en allant, cette fois-ci en Classic, Build > Create > Apps, puis Edit sur l’application choisie.
Ainsi, il est possible de générer un Client ID et un Client Secret en cliquant sur le bouton Manage Consumer Details.
Authorization Code
Postman supporte cette méthode, ce qui est très pratique. Il y a un certain nombre de condition à remplir:
-
L’URL de redirection (Callback URL) est donné par Postman (https://oauth.pstmn.io/v1/callback)
-
Utiliser le Client ID et Client Secret générés précédemment
Même pour une instance Développeur, Les URL sont:
-
Authorization/Authentification: https://login.salesforce.com/services/oauth2/authorize
Refresh Token
La génération d’un Refresh Token est un peu fastidieux mais permet des communications "Machine à Machine".
La première étape consiste à créer une application avec comme URL de redirection https://login.salesforce.com/. L’application doit avoir un scope "Perform requests at any time (refresh_token, offline_access)".
Créer l’URL de connexion de la forme
https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=<clientId>&redirect_uri=https://login.salesforce.com/&scope=offline_access
en remplaçant <clientId>
par celui de l’application générée.
En ouvrant cette URL dans le navigateur, après authentification et consentement, le navigateur est redirigé vers https://login.salesforce.com/ avec dans l’URL un paramètre code
.
Récupéré la valeur du paramètre code
. Attention, la valeur est URL-encodée. Il faut alors la URL-décoder (Notepad++ est ton ami par exemple).
A ce stade, il faut échanger le code contre des tokens. Pour ce faire, il suffit de faire un POST
sur https://login.salesforce.com/services/oauth2/token avec les paramètres:
-
client_id
-
client_secret
-
redirect_uri
=https://login.salesforce.com/
-
grant_type
=authorization_code
-
code
En retour, un Refresh Token sera donné.
Etendre un objet
Il est très facile d’étendre un objet dans Salesforce. Sans rentrer dans les considération de vue, de sécurité, etc. on peut ajouter un nouvel attribut (ex: une référence externe) en allant dans Object Manager, puis pour l’objet souhaité Fields & Relationships.
API SObjects
L’API SObjects permet de manipuler les objets Salesforce:
-
Description d’un objet (ses attributs)
-
Création d’un objet
-
Détail d’un objet
-
Récupération d’un objet par référence externe
L’URL de base est construite de la façon suivante
https://<instance>.develop.my.salesforce.com/services/data/<version>/sobjects/<Objet>/<Méthode>
En étant connecté à Salesforce, on accès par exemple à:
https://<instance>.develop.lightning.force.com/one/one.app
Les versions sont données en accédant à https://<instance>.develop.my.salesforce.com/services/data/
. Au moment de la rédaction de cet article, la dernière version est v56.0
.
Pour obtenir la liste des attributs d’un compte, on peut alors accéder à :
https://<instance>.develop.my.salesforce.com/services/data/<version>/sobjects/Account/describe
Il est possible d’obtenir un objet par sa référence interne (/sobjects/Account/<AccountId
) ou une référence externe (/sobjects/Account/Business_Partner_Code__c/TEST1
).
API de requête
Pour requêter (lister) des objets, Salesforce a défini le Salesforce Object Query Language (SOQL) qui s’apparente fortement au SQL.
Pour lister les comptes on peut par exemple exécuter
https://<instance>.develop.my.salesforce.com/services/data/<version>/query?q=SELECT Name FROM Account WHERE Name='TEST1'
API Composite
Il est possible de chaîner des requêtes qui peuvent ainsi se référencer les unes avec les autres.
On peut donc imaginer :
-
Rechercher un compte
-
Créer un contact dans ce compte
-
Créer un utilisateur associé
La requête composite est rendue "transactionnelle" avec le flag allOrNone
.
Ci-dessous
{
"allOrNone": true,
"compositeRequest": [
{
"method": "GET",
"url": "/services/data/v56.0/sobjects/Account/Business_Partner_Code__c/TEST1",
"referenceId": "refAccount"
},
{
"method": "POST",
"url": "/services/data/v56.0/sobjects/Contact",
"referenceId": "xxx",
"body": {
"LastName": "Fernandez",
"FirstName": "Linda",
"AccountId": "@{refAccount.Id}",
"Email": "XXX@yopmail.com"
}
},
{
"method": "POST",
"url": "/services/data/v56.0/sobjects/User",
"referenceId": "newUser",
"body": {
"LastName": "Fernandez",
"FirstName": "Linda",
"ContactId": "@{newContact.id}",
"Email": "XXX@yopmail.com",
"EmailEncodingKey": "UTF-8",
"ProfileId": "00eDn000001vctqIAA",
"Username": "XXX@yopmail.com",
"Alias": "LFernand",
"TimeZoneSidKey": "America/Los_Angeles",
"LocaleSidKey": "en_US",
"LanguageLocaleKey": "en_US"
}
}
]
}
La casse est importante et pas toujours cohérente. Ainsi, dans le contact créé, il faut utiliser id mais pour récupérer l’Id du compte précédemment recherché, il faut utiliser Id .
|
Le retour de la requête composite donne le retour de chaque requête. En créant sa requête composite progressivement, on peut voir le retour et y faire référence plus facilement. |
Conclusion
Salesforce dispose d’une documentation propre assez riche et d’une multitude de contenu par sa communauté. Voici ma contribution 😆.