วิธีการในอนาคตเทียบกับ Apex ที่สามารถเข้าคิวได้ใน Salesforce

เผยแพร่แล้ว: 2023-11-20

ในโลกที่เปลี่ยนแปลงไปอย่างรวดเร็วของการพัฒนา Salesforce การทำความเข้าใจเครื่องมือและวิธีการที่ดีที่สุดสำหรับการเขียนโค้ดที่มีประสิทธิภาพและประสิทธิผลถือเป็นสิ่งสำคัญ บทความนี้เจาะลึกสองแนวคิดหลัก: วิธีในอนาคตและ Apex ที่สามารถจัดคิวได้ ทั้งสองเป็นเทคนิคที่มีประสิทธิภาพที่ใช้ใน Salesforce เพื่อจัดการกับการดำเนินการแบบอะซิงโครนัส แต่มีคุณสมบัติและกรณีการใช้งานที่แตกต่างกัน

เราจะสำรวจความแตกต่างของ Future Method และ Queueable Apex เปรียบเทียบฟังก์ชันการทำงาน ข้อดี และเวลาที่ควรใช้แต่ละอย่างในโปรเจ็กต์ Salesforce ของคุณ ไม่ว่าคุณจะเป็นนักพัฒนาที่มีประสบการณ์หรือเพิ่งเริ่มใช้ Salesforce การเปรียบเทียบนี้จะให้ข้อมูลเชิงลึกอันมีค่า ช่วยให้คุณมีข้อมูลในการตัดสินใจเพื่อเพิ่มประสิทธิภาพโค้ดของคุณ

คอยติดตามในขณะที่เราเปิดเผยความซับซ้อนและเปิดเผยศักยภาพของวิธีการในอนาคตและ Apex ที่สามารถรอคิวได้ใน Salesforce!

สารบัญ

ทำไมต้องใช้วิธีในอนาคต?

หากคุณต้องการรันกระบวนการในเธรดแยกต่างหาก ในภายหลัง และต้องการรันโค้ดแบบอะซิงโครนัส เราจำเป็นต้องใช้วิธีการในอนาคต

จะใช้เมื่อไหร่?

สิ่งเหล่านี้ใช้สำหรับการดำเนินการที่ใช้เวลานาน เช่น การเรียกไปยังบริการเว็บภายนอก หรือการดำเนินการใดๆ ที่คุณต้องการเรียกใช้ในเธรดของตัวเอง

ทำไมเอเพ็กซ์ถึงต้องคิว?

เช่นเดียวกับอนาคตที่ใช้ในการรันโค้ดอะซิงโครนัส และทำให้คุณสามารถเพิ่มงานในคิวและปรับปรุงวิธีการรันโค้ดอะซิงโครนัสเมื่อเปรียบเทียบกับวิธีการในอนาคต

จะใช้เมื่อไหร่?

สำหรับกระบวนการ Apex ที่ทำงานเป็นเวลานาน เช่น การดำเนินการฐานข้อมูลที่กว้างขวางหรือการเรียกบริการเว็บภายนอก คุณสามารถเรียกใช้กระบวนการเหล่านั้นแบบอะซิงโครนัสได้โดยใช้อินเทอร์เฟซแบบ Queueable

อ่านเพิ่มเติม: วิธีการใช้ Salesforce SSO โดยใช้ OAuth

ความแตกต่างระหว่างอนาคตและเอเพ็กซ์ที่รอคิวได้:

วิธีการในอนาคต เอเพ็กซ์ที่รอคิวได้
1. Future จะไม่ใช้เพื่อทำงานกับ SObjects หรือประเภทวัตถุ

2. เมื่อใช้วิธีการในอนาคต เราไม่สามารถติดตามงานที่กำลังดำเนินการได้

3. ไม่สามารถเรียกเมธอดในอนาคตได้ภายในคลาสในอนาคตหรือคลาสแบทช์

4. วิธีการในอนาคตจะไม่ถูกจัดคิว

1. งานที่อยู่ในคิวสามารถมีตัวแปรสมาชิกเป็น SObjects หรือประเภท Apex แบบกำหนดเอง

2. เมื่อใช้งานแบบ Queueable จะทำให้ AsyncApexJob ที่เราสามารถตรวจสอบได้เหมือนกับ Scheduled job

3. สามารถเรียก Apex ที่สามารถเข้าคิวได้จากอนาคตและคลาสแบทช์

4. การใช้ Queueable Apex จะเชื่อมโยงกับงานที่จัดคิวได้ และใน Developer Edition จะมีเพียง 5 งานเท่านั้น

เอเพ็กซ์ที่รอคิวได้

คลาส Queueable เป็นคลาสที่สร้างขึ้นโดยการใช้อินเทอร์เฟซ "Queueable" ที่กำหนดไว้ล่วงหน้า อินเทอร์เฟซนี้ช่วยให้สามารถรันงานอะซิงโครนัสหรือโค้ดของงานได้โดยเปรียบเทียบกับวิธีในอนาคต จะช่วยให้คุณสามารถตรวจสอบงานที่อยู่ในคิว (คิวนี้ถูกสร้างขึ้นโดยอินเทอร์เฟซที่สามารถจัดคิวได้ เพื่อให้งานสามารถรันแบบอะซิงโครนัสได้)

ไวยากรณ์:

 คลาสสาธารณะ <ชื่อของคลาสที่สามารถเข้าคิวได้> ใช้งาน Queueable {
//นี่เป็นวิธีเดียวที่มีอยู่ใน Queueable Interface และจำเป็นต้องสืบทอดวิธีการนี้ในคลาส Queueable
การดำเนินการโมฆะสาธารณะ (บริบท QueueableContext) {
//โค้ดที่ต้องดำเนินการ
}
}

กระบวนการ Apex ใดๆ ที่ใช้เวลานานในการดำเนินการ เช่น การดำเนินการฐานข้อมูลที่กว้างขวางหรือการเรียกบริการเว็บภายนอก คุณสามารถรันกระบวนการเหล่านั้นแบบอะซิงโครนัสได้โดยใช้อินเทอร์เฟซแบบ Queueable และเพิ่มงานลงในคิวงาน Apex

งาน apex แบบอะซิงโครนัสของคุณทำงานในพื้นหลังในเธรดของตัวเอง และไม่ทำให้การดำเนินการตรรกะ Apex หลักของคุณล่าช้า แต่ละงานที่อยู่ในคิวจะทำงานเมื่อทรัพยากรระบบพร้อมใช้งาน ประโยชน์ของการใช้วิธีอินเทอร์เฟซก็คือขีดจำกัดของ Governor บางอย่างจะสูงกว่า Apex แบบซิงโครนัส เช่น ขีดจำกัดขนาดฮีป

วิธีเอเพ็กซ์ในอนาคต

เอเพ็กซ์ในอนาคตใช้เพื่อรันกระบวนการในเธรดที่แยกจากกัน ในภายหลังเมื่อทรัพยากรระบบพร้อมใช้งาน สำหรับการใช้ Future apex เราไม่จำเป็นต้องสร้างคลาสใดๆ เราเพียงแค่ต้องใช้คำอธิบายประกอบ “@future” เพื่อระบุวิธีการที่ทำงานแบบอะซิงโครนัส และเพื่อแสดงว่าวิธีที่อธิบายไว้ด้านล่างคำอธิบายประกอบนี้เป็นวิธีการในอนาคต

เมื่อใช้การประมวลผลแบบซิงโครนัส การเรียกใช้เมธอดทั้งหมดจะทำจากเธรดเดียวกันที่กำลังรันโค้ด Apex และไม่สามารถประมวลผลเพิ่มเติมได้จนกว่ากระบวนการจะเสร็จสมบูรณ์ คุณสามารถใช้วิธีการในอนาคตสำหรับการดำเนินการใดๆ ที่คุณต้องการเรียกใช้แบบอะซิงโครนัสในเธรดของตัวเอง สิ่งนี้ให้ประโยชน์ของการไม่บล็อกผู้ใช้จากการดำเนินการอื่น และให้ผู้ว่าการและขีดจำกัดการดำเนินการที่สูงขึ้นสำหรับกระบวนการ
ไวยากรณ์:

 คลาสระดับโลก <ClassName> {
//ด้านล่างเป็นคำอธิบายประกอบในอนาคตซึ่งกำหนดวิธีการที่กำหนดคือวิธีการในอนาคต
@อนาคต
โมฆะคงสาธารณะ <FutureMethodName> (รายการ <Id> recordIds) {
รายการบัญชี <ผู้ติดต่อ> = [เลือก Id, ชื่อ, นามสกุลจากผู้ติดต่อ โดยที่ Id IN :recordIds];
// ประมวลผลบันทึกผู้ติดต่อเพื่อทำสิ่งที่ยอดเยี่ยม
}
}

อ่านเพิ่มเติม: วิธีการเชื่อมต่อ Pipedrive และ Salesforce Integration

โดยทั่วไปวิธีการในอนาคตจะใช้สำหรับ

คำบรรยายไปยังบริการเว็บภายนอก หากคุณกำลังทำการเรียกจากทริกเกอร์หรือหลังจากดำเนินการ DML คุณต้องใช้วิธีการในอนาคตหรือในคิว คำบรรยายในทริกเกอร์จะทำให้การเชื่อมต่อฐานข้อมูลเปิดอยู่ตลอดอายุของคำบรรยาย

การดำเนินการที่คุณต้องการเรียกใช้ในเธรดของตนเองเมื่อเวลาเอื้ออำนวย เช่น การคำนวณหรือการประมวลผลบันทึกที่ต้องใช้ทรัพยากรมากบางประเภท

หมายเหตุ: เหตุผลของอ็อบเจ็กต์ไม่สามารถส่งผ่านเป็นอาร์กิวเมนต์ไปยังเมธอดในอนาคตได้ เนื่องจากอ็อบเจ็กต์สามารถเปลี่ยนแปลงได้ระหว่างเวลาที่คุณเรียกใช้เมธอดกับเวลาที่มันดำเนินการจริง วิธีการในอนาคตจะทำงานเมื่อทรัพยากรระบบพร้อมใช้งาน เมื่อวิธีการในอนาคตดำเนินการ มันอาจมีค่าอ็อบเจกต์เก่า ซึ่งอาจทำให้เกิดสิ่งเลวร้ายทุกประเภทเกิดขึ้นได้

สิ่งที่ต้องจำ

  • วิธีการในอนาคตจะต้องคงที่
  • ประเภทการส่งคืนจะต้องถือเป็นโมฆะ
  • พารามิเตอร์ที่ระบุต้องเป็นประเภทข้อมูลดั้งเดิม อาร์เรย์ของประเภทข้อมูลดั้งเดิม หรือการรวบรวมข้อมูลประเภทดั้งเดิม
  • คุณสามารถเรียกเมธอดในอนาคตได้ในลักษณะเดียวกับที่คุณเรียกเมธอดอื่นๆ อย่างไรก็ตาม วิธีการในอนาคตไม่สามารถเรียกวิธีอื่นในอนาคตได้
  • การเรียกใช้เมธอดไม่เกิน 50 เมธอดต่อการร้องขอ Apex
  • การเรียกแบบอะซิงโครนัส เช่น @future หรือExecuteBatch ที่ถูกเรียกในบล็อก startTest, stopTest จะไม่นับรวมในขีดจำกัดของคุณสำหรับจำนวนงานที่อยู่ในคิว
จ้างนักพัฒนาฝ่ายขาย

ตัวอย่างวิธีการในอนาคตและคลาสที่สามารถจัดคิวได้

วิธีการในอนาคตและคลาสที่สามารถเข้าคิวได้

ที่นี่ฉันได้รับมูลค่า 4 สกุลเงินในสกุลเงินดอลลาร์แคนาดา สำหรับ GBP, USD, AUD, CAD และบันทึกค่าเป็นสกุลเงินเมตาดาต้าที่กำหนดเอง สำหรับ HTTPREQUEST ที่นี่ ฉันใช้วิธี Future และเนื่องจากกำลังอัปเดตหลายรายการพร้อมกันในขณะที่รันแบตช์ ฉันจึงใช้ Queueable Apex ซึ่งกำลังอัปเดตหลายรายการพร้อมกัน

การอัปเดตข้อมูลเมตาที่กำหนดเองแบบกำหนดเอง

การอัปเดตข้อมูลเมตาที่กำหนดเองแบบกำหนดเอง

ชั้นเรียนที่สามารถเข้าคิวได้

ชั้นเรียนที่สามารถเข้าคิวได้

วิธีการเรียก Future และส่งรายการเพื่ออัพเดตในคลาส Queueable

การเรียกวิธีอนาคต

Emizentech เป็นบริษัทที่ปรึกษาด้านการขายที่แท้จริงและมีประสบการณ์ และนักพัฒนาพนักงานขายที่เชี่ยวชาญของเราสามารถให้ความช่วยเหลืออย่างมืออาชีพแก่คุณสำหรับโครงการพนักงานขายครั้งต่อไปของคุณ

อ่านเพิ่มเติม: จะสร้างส่วนประกอบ Salesforce Lightning Map ได้อย่างไร