Custom Settings
- Accédez à la section Custom Settings. Un custom setting nommé DQE Unify Lookup est disponible.
- Cliquez sur Manage et créez une instance au niveau par défaut de votre organisation.
- Renseignez les informations requises.
- Allow Skip : permet aux utilisateurs d'ignorer les suggestions de Unify Lookup et de créer un nouvel enregistrement.
- App Named Cred : nom du named credential.
- Displayed Fields : champs affichés dans le tableau de suggestions.
Accès à l'application Record Lookup
Vous pouvez maintenant accéder à l'application Lightning Record Lookup et cliquer sur Connect en bas de l'onglet Setup. Cela établit la connexion entre votre org Salesforce et votre instance Unify Lookup Server.
Record Lookup
Une fois l'installation terminée, configurez l'application Record Lookup en suivant les étapes ci-dessous :
- Connectez-la au named credential Customer_Dqe_one.
- Importez votre règle et sélectionnez l'objet à indexer.
Ensuite, suivez les étapes ci-dessous pour remplacer le bouton standard New par le bouton Record Lookup :
- Accédez à Salesforce Setup.
- Ouvrez Object Manager.
- Sélectionnez l'objet concerné.
- Repérez le bouton New.
- Remplacez le bouton par le bouton Record Lookup.
Ce guide explique comment configurer Record Lookup dans Salesforce.
Guide de l'API
Cette section décrit les API exposées par l'application Record Lookup.
Federated Search
OpenSearch Description
Salesforce fournit un protocole d'intégration pour les sources de données externes. La documentation complète est disponible dans la documentation Salesforce Federated Search.
Pour être conforme à ce protocole, l'application Unify Lookup expose une API XML-Atom en deux parties. La première partie décrit le format.
- Route : /api/openSearch.xml
-
Appel :
curl -X GET https://[YOUR APP URL]/api/openSearch.xml - Réponse :
Le format devant être unique pour toutes les réponses, la liste des champs est immuable. Pour chaque type d'enregistrement indexé dans l'application Unify Lookup, vous pouvez mapper une adresse, un email, un numéro de téléphone, un prénom et un nom.
Le champ Source correspond au type d'enregistrement. Par exemple, si l'application indexe des objets Salesforce, les valeurs possibles incluent Lead, Account et Contact. Pour les tables PostgreSQL externes, la source porte le nom de la table.
OpenSearch Format
La seconde API OpenSearch est la requête pour une ressource elle-même.
Lorsque cette API est utilisée depuis la barre de recherche de source externe dans votre org Salesforce, les paramètres sont transmis automatiquement.
- Route : /api/openSearch
-
Paramètres :
- search (string) : termes de recherche
- orgId (string) : ID de l'org Salesforce
-
Appel :
curl -X GET https://[YOUR APP URL]/api/openSearch?search=Ms. Cha Fadner&orgId=[YOUR ORG ID] - Réponse :
API REST
En plus des API XML utilisées par votre org Salesforce, le serveur Unify Lookup expose des API qui permettent d'effectuer des recherches de pré-existence en temps réel depuis des systèmes externes. Cette section décrit ces API et leurs méthodes d'appel.
Authentification
Toutes les API décrites ci-dessous sont sécurisées avec Basic Auth. Le nom d'utilisateur est l'identifiant de l'organisation Salesforce enregistrée, et le mot de passe est la clé de licence fournie par DQE Software. Il s'agit de la même clé que celle saisie dans les variables d'environnement de votre application.
Recherche
Cette API est un moteur d'autocomplétion sur une seule ligne de recherche. Elle renvoie une liste d'enregistrements potentiels suggérés correspondant aux critères de recherche.
Route : /api/searchRecords
Paramètres :
- search (string) : termes de recherche
Structure de la réponse :
La réponse est une liste d'objets structurés avec des champs tels que Id, Source, FirstName, LastName, Phone, Email, Street, City, PostalCode, State et Country.
Exemple d'appel :
curl -X GET \
-H "Authorization: Basic {authorization_header}" \
https://[YOUR APP URL]/api/searchRecords?search=Ms. Chantal Fadner
Exemple de réponse :
[
{
"Id": "00Q0900000E3ded7FUEAZ",
"Source": "Lead",
"FirstName": "rerere",
"LastName": "azazaza",
"Phone": "0*****31",
"Email": "*****@hotmail.fr",
"Street": "R************NIERES",
"City": "A**********X",
"PostalCode": "12345",
"State": "",
"Country": "France"
}
]
Lookup
Cette API effectue une recherche de pré-existence en comparant un enregistrement complet avec tous les enregistrements indexés.
Route : /api/lookupRecords
Paramètres :
Vous pouvez fournir n'importe quelle paire clé/valeur présente dans votre formulaire, que ce soit dans le corps de votre requête ou dans les paramètres de requête. Les clés sont sensibles à la casse. Les clés introuvables dans les enregistrements sont ignorées.
Structure de la réponse :
La réponse est une liste d'objets structurés avec des champs tels que Id, Source, FirstName, LastName, Phone, Email, Street, City, PostalCode, State et Country.
Exemple d'appel :
curl -X GET \
-H "Authorization: Basic {authorization_header}" \
https://[YOUR APP URL]/api/lookupRecords?Email=airelue.fc@laposte.net&PostalCode=77961&Phone=0695473336&Street=Rue du Clos Gillet&FirstName=Aurélie&LastName=FUALKNER
Exemple de réponse :
[
{
"Phone": "**********",
"City": "A*****LE",
"FirstName": "Au****ei",
"MobilePhone": "",
"State": "",
"PostalCode": "12345",
"LastName": "F****ER",
"Country": "France",
"Email": "ai******@laposte.net",
"Street": "Rue ********et",
"Id": "00Q0900000E37F3EAJ",
"Source": "Lead"
}
]
Si aucun jeu de règles de déduplication n'a été importé dans votre application :
{
"status": "error",
"error": "No rules set loaded yet"
}
Golden record
Cette API effectue une recherche de pré-existence en comparant un enregistrement complet avec tous les enregistrements indexés. Contrairement à l'API précédente, elle ne renvoie que l'enregistrement ayant le meilleur score de correspondance.
Route : /api/lookupGolden
Paramètres :
Vous pouvez fournir n'importe quelle paire clé/valeur présente dans votre formulaire, que ce soit dans le corps de votre requête ou dans les paramètres de requête. Les clés sont sensibles à la casse. Les clés introuvables dans les enregistrements sont ignorées.
Structure de la réponse :
La réponse contient le taux de certitude de correspondance, la règle qui a permis de faire correspondre l'enregistrement, et le meilleur enregistrement correspondant.
Exemple d'appel GET :
curl -X GET \
-H "Authorization: Basic {authorization_header}" \
https://[YOUR APP URL]/api/lookupGolden?Email=ai************.net&PostalCode=1234&Phone=*******&Street=Ru*********t&FirstName=A******&LastName=F*****
Exemple d'appel POST :
curl --location 'https://[YOUR APP URL]/api/lookupGolden' \
--header "Authorization: Basic {authorization_header}" \
--header 'Content-Type: text/plain' \
--data-raw '{
"recordType": "PersonAccount",
"FirstName": "S*****",
"LastName": "T****",
"PersonEmail": "s************id"
}'
Exemple de réponse :
{
"certainty": 0.05298333333333333335,
"matched_by": "Address",
"record": {
"Phone": "***************",
"City": "**********",
"FirstName": "Au***********",
"MobilePhone": "",
"State": "",
"PostalCode": "12345",
"LastName": "*******************",
"Country": "France",
"Email": "******************.net",
"Street": "Rue ****************et",
"Id": "00Q0900000E37F3EAJ",
"Source": "Lead"
}
}
Si aucun jeu de règles de déduplication n'a été importé dans votre application :
{
"status": "error",
"error": "No rules set loaded yet"
}
Dans tous les autres cas :
{
"status": "error",
"error": "bad request"
}
Ajouter un enregistrement
Utilisez cette API pour ajouter un enregistrement à votre registre d'indexation sans avoir à relancer un traitement sur l'ensemble de la base de données Salesforce.
Route : /api/add
Paramètres :
- recordType : nom API du SObject, par exemple Lead, Account ou Contact
- Id : ID Salesforce
Vous pouvez également fournir n'importe quelle paire clé/valeur présente dans votre enregistrement dans les paramètres de requête. Les clés sont sensibles à la casse. Les clés introuvables dans les enregistrements sont ignorées.
Exemple d'appel GET :
curl -X GET \
-H "Authorization: Basic {authorization_header}" \
https://[YOUR APP URL]/api/add?recordType=Lead&Email=a************e.net&PostalCode=12345&Phone=0************&Street=Rue*************&FirstName=A**********&LastName=F********R
Exemple d'appel POST :
curl --location 'https://[YOUR APP URL]/api/add' \
--header 'Authorization: Basic {authorization_header}' \
--header 'Content-Type: text/plain' \
--data-raw '{
"0": {
"Phone": "0***********6",
"BillingStreet": "R***********t",
"BillingPostalCode": "12345",
"LastName": "*****",
"PersonEmail": "a**************t",
"BillingCity": "H*****************Y",
"id": "[SALESFORCE ID]",
"FirstName": "A****************e",
"attributes": {"type":"PersonAccount"}
}
}'
Réponse en cas de succès :
{
"status": "success",
"label": "Record added"
}
Si le nom de l'API de l'objet ne fait pas partie des objets actuellement autorisés à être indexés :
{
"status": "error",
"label": "RecordType not mapped in your application"
}
Dans ce cas, accédez à l'application Lightning Unify Lookup et ajoutez l'objet.
Si l'enregistrement n'a pas pu être ajouté car la base de données Redis manque d'espace de stockage :
{
"status": "error",
"label": "memory > max memory"
}
Dans tous les autres cas :
{
"status": "error",
"error": "bad request"
}
Supprimer un enregistrement
Utilisez cette API pour supprimer un enregistrement de votre registre d'indexation sans avoir à relancer un traitement sur l'ensemble de la base de données Salesforce.
Route : /api/delete
Paramètres :
- recordType : nom API du SObject, par exemple Lead, Account ou Contact
- Id : ID Salesforce
Vous pouvez également fournir n'importe quelle paire clé/valeur présente dans votre enregistrement dans les paramètres de requête. Les clés sont sensibles à la casse. Les clés introuvables dans les enregistrements sont ignorées.
Supprimer un seul enregistrement :
curl -X GET \
-H "Authorization: Basic {authorization_header}" \
https://[YOUR APP URL]/api/delete?Id=00DX00000DJ19Q&recordType=Lead&Email=a*********net
Supprimer plusieurs enregistrements :
curl -X POST https://[YOUR APP URL]/api/delete \
-H "Authorization: Basic {authorization_header}" \
-d "[JSON Data]"
Le corps JSON doit être structuré comme suit :
{
"recordId": {
"attributes": {
"type": "recordType"
}
}
}
Réponse en cas de succès :
{
"status": "success",
"label": "Record(s) removed"
}
Dans tous les autres cas :
{
"status": "error",
"error": "Failed to remove record"
}
Indexer la base de données
Cette API démarre le processus d'indexation globale sur un objet. L'objet doit déjà avoir été ajouté via l'interface à la liste des objets, et un jeu de règles doit être configuré pour celui-ci.
Route : /api/index
Paramètres :
- recordType : nom API du SObject, par exemple Lead, Account ou Contact
-
target : URL de l'org Salesforce, au format
https://xxx.my.salesforce.com - token : jeton de session Salesforce valide
- user : nom d'utilisateur Salesforce associé au jeton de session
Exemple d'appel :
curl -X GET \
-H "Authorization: Basic {authorization_header}" \
https://[YOUR APP URL]/api/index?recordType=Lead&token=XXXXXXXXXX&user=myusername@test.com&target=mysforg.my.salesforce.com
Réponse en cas de succès :
{
"status": "success",
"label": "indexing by Bulk started"
}
Si le nom de l'API de l'objet ne fait pas partie des objets actuellement autorisés à être indexés :
{
"status": "error",
"label": "RecordType not mapped in your application"
}
Dans ce cas, accédez à l'application Lightning Unify Lookup et ajoutez l'objet.
Dans tous les autres cas :
{
"status": "error",
"error": "bad request"
}
Ressources Apex REST
Le package AppExchange Unify Lookup fournit des ressources sous forme de classes Apex, invocables depuis vos classes Apex ou via des API.
Authentification
Les ressources API décrites ci-dessous ne sont accessibles qu'avec un jeton Salesforce valide, obtenu via l'API OAuth2. La variable {authorization_header} dans les exemples suivants représente ce jeton de session.
UpdateDB
Pour insérer ou supprimer des enregistrements de la base de données indexée, utilisez cette ressource REST. Indiquez les ID des enregistrements, le type d'objet, et l'opération à appliquer.
Route : [YOUR SALESFORCE DOMAIN]/services/apexrest/UnifyLookup/updateDB/
Paramètres :
- ids : ID des enregistrements Salesforce séparés par des virgules
- recordType : nom API du SObject, par exemple Lead, Account ou Contact
- action : Insert ou Delete
Exemple d'appel :
curl -X GET https://[YOUR SALESFORCE DOMAIN]/services/apexrest/UnifyLookup/updateDB/?ids=0017R00002ryGbZQAU,0017R00002kqzFHQAY&sObjectName=Account&action=insert \
-H "Authorization: Bearer {authorization_header}"
Réponse en cas de succès :
{
"status": "success",
"label": "Record added"
}
Si une erreur se produit :
{
"status": "error",
"label": "Failed to add record"
}
Appel depuis une classe Apex
Vous pouvez également appeler les fonctions directement depuis vos classes Apex, car les fonctions Apex sont définies comme globales.
deleteRecord
List<String> ids = new List<String>{'0017R00002ryGbZQAU', '0017R00002kqzFHQAY'};
String sObjectName = 'Account';
Map<String, String> res = UnifyLookup.DQE_Lookup_update_db.deleteRecord(ids, sObjectName);
insertRecord
List<String> ids = new List<String>{'0017R00002ryGbZQAU', '0017R00002kqzFHQAY'};
String sObjectName = 'Account';
Map<String, String> res = UnifyLookup.DQE_Lookup_update_db.insertRecord(ids, sObjectName);
Associé à