Apex - SOSL

Ogni azienda o applicazione ha la funzionalità di ricerca come uno dei requisiti di base. Per questo, Salesforce.com fornisce due approcci principali utilizzando SOSL e SOQL. Discutiamo in dettaglio l'approccio SOSL in questo capitolo.

SOSL

La ricerca della stringa di testo nell'oggetto e nel campo verrà eseguita utilizzando SOSL. Questo è il linguaggio di ricerca degli oggetti di Salesforce. Ha la capacità di cercare una particolare stringa su più oggetti.

Le istruzioni SOSL restituiscono un elenco di oggetti, in cui ogni elenco contiene i risultati della ricerca per un particolare tipo di oggetto. Gli elenchi dei risultati vengono sempre restituiti nello stesso ordine in cui sono stati specificati nella query SOSL.

Esempio di query SOSL

Consideriamo un caso aziendale in cui dobbiamo sviluppare un programma in grado di cercare una stringa specificata. Supponiamo di dover cercare la stringa "ABC" nel campo Nome cliente dell'oggetto Fattura. Il codice è il seguente:

Innanzitutto, devi creare un singolo record nell'oggetto Fattura con il nome del cliente come "ABC" in modo che possiamo ottenere risultati validi durante la ricerca.

// 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

Questo è quasi lo stesso di SOQL. È possibile utilizzarlo per recuperare i record dell'oggetto da un oggetto solo alla volta. Puoi scrivere query nidificate e anche recuperare i record dall'oggetto padre o figlio su cui stai interrogando ora.

Esploreremo SOQL nel prossimo capitolo.