Apex - SOSL

Mọi doanh nghiệp hoặc ứng dụng đều có chức năng tìm kiếm là một trong những yêu cầu cơ bản. Đối với điều này, Salesforce.com cung cấp hai cách tiếp cận chính sử dụng SOSL và SOQL. Chúng ta hãy thảo luận chi tiết về cách tiếp cận SOSL trong chương này.

SOSL

Tìm kiếm chuỗi văn bản trên đối tượng và trên toàn trường sẽ được thực hiện bằng cách sử dụng SOSL. Đây là Ngôn ngữ Tìm kiếm Đối tượng của Salesforce. Nó có khả năng tìm kiếm một chuỗi cụ thể trên nhiều đối tượng.

Các câu lệnh SOSL đánh giá một danh sách các sObject, trong đó, mỗi danh sách chứa các kết quả tìm kiếm cho một loại sObject cụ thể. Danh sách kết quả luôn được trả về theo thứ tự như chúng được chỉ định trong truy vấn SOSL.

Ví dụ về truy vấn SOSL

Hãy xem xét một trường hợp kinh doanh, trong đó, chúng ta cần phát triển một chương trình có thể tìm kiếm một chuỗi cụ thể. Giả sử, chúng ta cần tìm kiếm chuỗi 'ABC' trong trường Tên khách hàng của đối tượng Hóa đơn. Đoạn mã như sau:

Đầu tiên, bạn phải tạo một bản ghi duy nhất trong đối tượng Hóa đơn với tên Khách hàng là 'ABC' để chúng tôi có thể nhận được kết quả hợp lệ khi tìm kiếm.

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

Điều này gần giống như SOQL. Bạn có thể sử dụng điều này để tìm nạp các bản ghi đối tượng từ một đối tượng duy nhất tại một thời điểm. Bạn có thể viết các truy vấn lồng nhau và cũng có thể tìm nạp các bản ghi từ đối tượng mẹ hoặc con mà bạn đang truy vấn bây giờ.

Chúng ta sẽ khám phá SOQL trong chương tiếp theo.