Apex - SOSL

Todo negócio ou aplicativo tem a funcionalidade de pesquisa como um dos requisitos básicos. Para isso, a Salesforce.com oferece duas abordagens principais usando SOSL e SOQL. Vamos discutir a abordagem SOSL em detalhes neste capítulo.

SOSL

A pesquisa da string de texto no objeto e no campo será feita usando SOSL. Esta é a linguagem de pesquisa de objetos do Salesforce. Ele tem a capacidade de pesquisar uma string específica em vários objetos.

As instruções SOSL são avaliadas como uma lista de sObjects, em que cada lista contém os resultados da pesquisa para um determinado tipo de sObject. As listas de resultados são sempre retornadas na mesma ordem em que foram especificadas na consulta SOSL.

Exemplo de consulta SOSL

Considere um caso de negócios em que precisamos desenvolver um programa que possa pesquisar uma string especificada. Suponha que precisamos pesquisar a string 'ABC' no campo Nome do cliente do objeto Fatura. O código é o seguinte -

Primeiro, você deve criar um único registro no objeto Fatura com o nome do cliente como 'ABC' para que possamos obter um resultado válido quando pesquisado.

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

Isso é quase o mesmo que SOQL. Você pode usar isso para buscar os registros do objeto de um objeto apenas por vez. Você pode escrever consultas aninhadas e também buscar os registros do objeto pai ou filho no qual você está consultando agora.

Exploraremos SOQL no próximo capítulo.