English 中文(简体)
Apex - SOSL
  • 时间:2024-10-18

Apex - SOSL


Previous Page Next Page  

Every business or apppcation has search functionapty as one of the basic requirements. For this, Salesforce.com provides two major approaches using SOSL and SOQL. Let us discuss the SOSL approach in detail in this chapter.

SOSL

Searching the text string across the object and across the field will be done by using SOSL. This is Salesforce Object Search Language. It has the capabipty of searching a particular string across multiple objects.

SOSL statements evaluate to a pst of sObjects, wherein, each pst contains the search results for a particular sObject type. The result psts are always returned in the same order as they were specified in the SOSL query.

SOSL Query Example

Consider a business case wherein, we need to develop a program which can search a specified string. Suppose, we need to search for string ABC in the Customer Name field of Invoice object. The code goes as follows −

First, you have to create a single record in Invoice object with Customer name as ABC so that we can get vapd result when searched.

// Program To Search the given string in all Object
// List to hold the returned results of sObject generic type
List<pst<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 pke to search string  ABC  in two objects,
// that is Invoice and Account. Then for this query goes pke 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 pst will hold the returned results for Invoice Object
APEX_Invoice__c [] searchedInvoice = ((List<APEX_Invoice_c>)invoiceAndSearchList[0]);

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

This is almost the same as SOQL. You can use this to fetch the object records from one object only at a time. You can write nested queries and also fetch the records from parent or child object on which you are querying now.

We will explore SOQL in the next chapter.

Advertisements