Учебники

Апекс — SOSL

У каждого бизнеса или приложения есть функциональность поиска как одно из основных требований. Для этого Salesforce.com предлагает два основных подхода с использованием SOSL и SOQL. Давайте обсудим подход SOSL подробно в этой главе.

SOSL

Поиск текстовой строки по объекту и по полю будет выполняться с помощью SOSL. Это язык поиска объектов Salesforce. Он имеет возможность поиска определенной строки по нескольким объектам.

Операторы SOSL оцениваются как список объектов sObject, причем каждый список содержит результаты поиска для определенного типа sObject. Списки результатов всегда возвращаются в том же порядке, в котором они были указаны в запросе SOSL.

Пример запроса SOSL

Рассмотрим бизнес-пример, в котором нам нужно разработать программу, которая может искать указанную строку. Предположим, нам нужно найти строку «ABC» в поле «Имя клиента» объекта «Счет». Код выглядит следующим образом —

Во-первых, вам нужно создать одну запись в объекте Invoice с именем клиента как «ABC», чтобы мы могли получить действительный результат при поиске.

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

Это почти так же, как SOQL. Вы можете использовать это, чтобы получить записи объекта из одного объекта только за один раз. Вы можете написать вложенные запросы, а также извлечь записи из родительского или дочернего объекта, к которому вы обращаетесь сейчас.

Мы рассмотрим SOQL в следующей главе.