เอเพ็กซ์ - 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 ในบทต่อไป