Apex - SOSL

Chaque entreprise ou application a une fonctionnalité de recherche comme l'une des exigences de base. Pour cela, Salesforce.com propose deux approches majeures utilisant SOSL et SOQL. Laissez-nous discuter de l'approche SOSL en détail dans ce chapitre.

SOSL

La recherche de la chaîne de texte à travers l'objet et dans le champ sera effectuée à l'aide de SOSL. Il s'agit du langage de recherche d'objets Salesforce. Il a la capacité de rechercher une chaîne particulière sur plusieurs objets.

Les instructions SOSL s'évaluent en une liste de sObjects, où chaque liste contient les résultats de la recherche pour un type de sObject particulier. Les listes de résultats sont toujours renvoyées dans le même ordre que celui spécifié dans la requête SOSL.

Exemple de requête SOSL

Prenons une analyse de rentabilisation dans laquelle nous devons développer un programme qui peut rechercher une chaîne spécifiée. Supposons que nous devions rechercher la chaîne «ABC» dans le champ Nom du client de l'objet Facture. Le code va comme suit -

Tout d'abord, vous devez créer un seul enregistrement dans l'objet Facture avec le nom du client comme «ABC» afin que nous puissions obtenir un résultat valide lors de la recherche.

// Program To Search the given string in all Object
// List to hold the returned results of sObject generic type
List<list<SObject>> invoiceSearchList = new List<List<SObject>>();

// SOSL query which will search for 'ABC' string in Customer Name field of Invoice Object
invoiceSearchList = [FIND 'ABC*' IN ALL FIELDS RETURNING APEX_Invoice_c
   (Id,APEX_Customer_r.Name)];

// Returned result will be printed
System.debug('Search Result '+invoiceSearchList);

// Now suppose, you would like to search string 'ABC' in two objects,
// that is Invoice and Account. Then for this query goes like this:

// Program To Search the given string in Invoice and Account object,
// you could specify more objects if you want, create an Account with Name as ABC.

// List to hold the returned results of sObject generic type
List<List<SObject>> invoiceAndSearchList = new List<List<SObject>>();

// SOSL query which will search for 'ABC' string in Invoice and in Account object's fields
invoiceAndSearchList = [FIND 'ABC*' IN ALL FIELDS RETURNING APEX_Invoice__c
   (Id,APEX_Customer__r.Name), Account];

// Returned result will be printed
System.debug('Search Result '+invoiceAndSearchList);

// This list will hold the returned results for Invoice Object
APEX_Invoice__c [] searchedInvoice = ((List<APEX_Invoice_c>)invoiceAndSearchList[0]);

// This list will hold the returned results for Account Object
Account [] searchedAccount = ((List<Account>)invoiceAndSearchList[1]);
System.debug('Value of searchedInvoice'+searchedInvoice+'Value of searchedAccount'
   + searchedAccount);

SOQL

C'est presque la même chose que SOQL. Vous pouvez l'utiliser pour récupérer les enregistrements d'objets à partir d'un seul objet à la fois. Vous pouvez écrire des requêtes imbriquées et également récupérer les enregistrements de l'objet parent ou enfant sur lequel vous interrogez maintenant.

Nous explorerons SOQL dans le prochain chapitre.