เอเพ็กซ์ - SOSL
ทุกธุรกิจหรือแอปพลิเคชันมีฟังก์ชันการค้นหาเป็นหนึ่งในข้อกำหนดพื้นฐาน สำหรับสิ่งนี้ Salesforce.com มีสองแนวทางหลัก ๆ โดยใช้ SOSL และ SOQL ให้เราหารือเกี่ยวกับแนวทาง SOSL โดยละเอียดในบทนี้
SOSL
การค้นหาสตริงข้อความข้ามออบเจ็กต์และในฟิลด์จะทำได้โดยใช้ SOSL นี่คือภาษาค้นหาวัตถุของ Salesforce มีความสามารถในการค้นหาสตริงเฉพาะในหลายวัตถุ
คำสั่ง SOSL ประเมินเป็นรายการ sObjects โดยแต่ละรายการมีผลการค้นหาสำหรับประเภท sObject เฉพาะ รายการผลลัพธ์จะถูกส่งกลับในลำดับเดียวกับที่ระบุไว้ในแบบสอบถาม SOSL เสมอ
ตัวอย่างแบบสอบถาม SOSL
พิจารณากรณีทางธุรกิจซึ่งเราจำเป็นต้องพัฒนาโปรแกรมที่สามารถค้นหาสตริงที่ระบุได้ สมมติว่าเราต้องค้นหาสตริง 'ABC' ในฟิลด์ชื่อลูกค้าของออบเจ็กต์ใบแจ้งหนี้ รหัสมีดังนี้ -
ขั้นแรกคุณต้องสร้างระเบียนเดียวในออบเจ็กต์ใบแจ้งหนี้โดยมีชื่อลูกค้าเป็น '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 ในบทต่อไป