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