แผนที่ Salesforce Apex เป็นโครงสร้างข้อมูลที่ส่วนใหญ่จะใช้ในสถานการณ์ทริกเกอร์ และช่วยในการโหลดข้อมูลครั้งละมากขึ้นไปยังฐานข้อมูล Salesforce เช่น รายการ แต่จะจัดเก็บและจัดระเบียบข้อมูลในรูปแบบคู่ {key:value} เราจะหารือเกี่ยวกับการรวบรวมแผนที่ในภาษาการเขียนโปรแกรม Apex และวิธีการของมัน ในที่นี้ เราจะใช้อ็อบเจ็กต์มาตรฐานของบัญชีใน Salesforce สำหรับตัวอย่างทั้งหมด มาดำดิ่งสู่บทช่วยสอนนี้อย่างรวดเร็ว
แผนที่
แผนที่ใช้ข้อมูลคู่ {key:value} เป็นอินพุตและจัดเก็บไว้ในมาตรฐานของ Salesforce หรือวัตถุที่กำหนดเอง สามารถใช้ sObject เป็นคีย์หรือค่า
การสร้างแผนที่
ด้วยการระบุประเภทข้อมูลของคีย์และค่าพร้อมกับชื่ออ็อบเจกต์ สามารถสร้างแผนที่ได้ ที่นี่ใช้คำหลักใหม่เพื่อสร้าง สามารถเลือกส่งองค์ประกอบระหว่างการสร้างได้
ไวยากรณ์แผนที่ว่างเปล่า:
แผนที่ไวยากรณ์ทั่วไป:
แผนที่คีย์ => ค่า,....};
ไวยากรณ์ของวัตถุ:
แผนที่คีย์ => ค่า,....};
ที่นี่ sObject สามารถเป็นวัตถุมาตรฐานหรือแบบกำหนดเอง ในบทความนี้เราจะจัดการกับแผนที่ด้วยวัตถุ 'บัญชี' เท่านั้น
มาดูวิธีการที่รองรับโดยชุด 'แผนที่' ของ Apex ทีละรายการ
การตั้งค่าสภาพแวดล้อม
1. เข้าสู่ระบบ Salesforce อย่างรวดเร็วและเปิด “Developer Console” โดยคลิกที่ไอคอนรูปเฟือง
2. จากนั้นเปิด “หน้าต่างที่ไม่ระบุตัวตน” โดยคลิกที่ “ดีบั๊ก” และ “เปิดหน้าต่างปฏิบัติการไม่ระบุชื่อ”
ตัวอย่างทั่วไป:
อันดับแรก เราจะเห็นการสร้างแผนที่ทั่วไปโดยสร้างแผนที่ที่มีหัวเรื่องสองชื่อ: “subject_id” ซึ่งทำหน้าที่เป็นคีย์ และ “ค่า” เป็นชื่อหัวเรื่อง
แผนที่<จำนวนเต็ม, สตริง> การเขียนโปรแกรม=แผนที่ใหม่<จำนวนเต็ม,สตริง>{1=> 'Linux',2=> 'Python'};system.debug(การเขียนโปรแกรม);
เอาท์พุต:
- คลิกที่ 'ดำเนินการ'
- ทำเครื่องหมายที่ตัวเลือก 'Debug Only' คุณสามารถดูผลลัพธ์ได้ใน 'บันทึกการดำเนินการ'
วิธีการแผนที่
ขั้นแรก เราสร้างแผนที่จากวัตถุ 'บัญชี' เราสร้างสามบัญชีด้วยชื่อทีละบัญชี จากนั้นเราประกาศแผนที่ด้วยคีย์และค่าเป็น
บัญชี account1 = บัญชีใหม่ (ชื่อ = 'Linux Hint');
บัญชี บัญชี 2 = บัญชีใหม่ (ชื่อ = 'Salesforce');
บัญชี account3 = บัญชีใหม่ (ชื่อ = 'Python');
// เพิ่มบัญชีด้านบนเป็นคีย์ใน map_obj
แผนที่
บัญชี 1 => 1,000,บัญชี 2 => 2,000,บัญชี 3 => 3,000};
System.debug(map_obj);
เอาท์พุต:
คุณจะเห็นว่า “map_obj” เก็บสามบัญชี
1. แผนที่.values()
หากต้องการส่งกลับเฉพาะค่าจากแผนที่ที่กำหนด เราสามารถใช้เมธอดค่า () จะไม่ใช้พารามิเตอร์ใดๆ มันเพียงแค่ส่งกลับรายการของค่าที่คั่นด้วยเครื่องหมายจุลภาค
ไวยากรณ์:
map_object.values()ตัวอย่าง:
คืนค่าทั้งหมดจากแผนที่ก่อนหน้า ตรวจสอบให้แน่ใจว่าคุณต้องดำเนินการโค้ดตัวอย่างก่อนหน้า (สร้างแผนที่ด้วยสามบัญชี) มิฉะนั้น คุณจะได้รับข้อผิดพลาด รหัสควรมีอยู่ในคอนโซลด้วย
// คืนค่าสำหรับคีย์ทั้งหมดโดยใช้ค่า ()System.debug(map_obj.values());
เอาท์พุต:
มีเพียงสามคู่คีย์:ค่าใน map_obj ค่าคือ: 1,000, 2000 และ 3000
2. แผนที่.keySet()
ส่งคืนคีย์ที่มีอยู่ในวัตถุแผนที่ เช่นเดียวกับค่า () ไม่จำเป็นต้องส่งพารามิเตอร์ใด ๆ ไปยังเมธอดนี้
ไวยากรณ์:
map_object.keySet()ตัวอย่าง:
เรามาคืนกุญแจทั้งหมดจากแผนที่ก่อนหน้ากันเถอะ ตรวจสอบให้แน่ใจว่าคุณใช้โค้ดตัวอย่างก่อนหน้า (สร้างแผนที่ด้วยสามบัญชี) มิฉะนั้น คุณจะได้รับข้อผิดพลาด รหัสควรมีอยู่ในคอนโซลด้วย
// ส่งคืนคีย์ทั้งหมดโดยใช้ keySet()System.debug(map_obj.keySet());
เอาท์พุต:
มีเพียงสามคู่คีย์:ค่าใน map_obj คีย์คือ: {บัญชี:{Name=Linux Hint}, บัญชี:{Name=Python} และบัญชี:{Name=Salesforce}
3. แผนที่.ขนาด()
ในบางสถานการณ์ เราจำเป็นต้องทราบคู่ของรายการทั้งหมด (คีย์:ค่า) ที่มีอยู่ในแผนที่เอเพ็กซ์ Size() เป็นเมธอดที่คืนค่าคู่ทั้งหมด (key:value) ที่มีอยู่ใน map_object ไม่จำเป็นต้องใช้พารามิเตอร์สำหรับวิธีนี้
ไวยากรณ์:
map_object.size()ตัวอย่าง:
คืนขนาดของวัตถุแผนที่ก่อนหน้า
// ส่งกลับจำนวนคู่ทั้งหมดโดยใช้ size()System.debug(map_obj.size());
เอาท์พุต:
เนื่องจากมีเพียง 3 คู่ ขนาดที่ส่งคืน () คือ 3
4. แผนที่.get()
การเข้าถึงค่าจากแผนที่โดยใช้คีย์ทำได้โดยใช้เมธอด get() ในการทำเช่นนี้เราต้องส่งคีย์เป็นพารามิเตอร์ไปยังเมธอด get() หากมีการส่งผ่านคีย์ที่ไม่รู้จัก มันจะส่งกลับข้อผิดพลาด
ไวยากรณ์:
map_object.get (คีย์)ตัวอย่าง:
คืนค่าของ key-2 และ key-1 แยกกัน
// รับค่าของคีย์ที่สองSystem.debug (map_obj.get (บัญชี 2));
// รับค่าของคีย์แรก
System.debug(map_obj.get(บัญชี1));
เอาท์พุต:
ในที่นี้ 2000 คือค่าของคีย์ “Salesforce” และ 1,000 คือค่าของคีย์ “Linux Hint”
5. แผนที่.ชัดเจน()
สามารถลบคู่ทั้งหมดในคอลเลกชันแผนที่ Apex ได้ในแต่ละครั้งโดยใช้เมธอด clear() จะไม่ใช้พารามิเตอร์ใดๆ
ไวยากรณ์:
map_object.clear()ตัวอย่าง:
ลบคู่ใน 'map_obj' ก่อนหน้า
// ก่อนล้าง ()System.debug(map_obj);
// ลบคู่ทั้งหมดโดยใช้ clear()
map_obj.clear();
// หลังจากล้าง ()
System.debug(map_obj);
เอาท์พุต:
ก่อนหน้านี้ มีคู่คีย์-ค่า 3 คู่ใน “map_obj” หลังจากใช้วิธี clear() ทั้ง 3 รายการจะถูกลบ
6. แผนที่เท่ากับ ()
เราสามารถเปรียบเทียบวัตถุแผนที่สองชิ้นโดยใช้วิธีการเท่ากับ () ค่าบูลีนของ true จะถูกส่งกลับหากคีย์และค่าทั้งหมดเหมือนกันในวัตถุแผนที่ทั้งสอง ในขณะที่ค่าบูลีนของเท็จจะถูกส่งกลับหากมีค่าที่แตกต่างกันอย่างน้อยหนึ่งค่า
ไวยากรณ์:
map_object1.equals(map_object2)ตัวอย่าง:
มาสร้างออบเจกต์แผนที่สามรายการด้วยคู่คีย์:ค่าหนึ่งรายการ โดยแต่ละรายการเกี่ยวข้องกับออบเจ็กต์ 'บัญชี' เปรียบเทียบวัตถุเหล่านี้ระหว่างพวกเขา
// บัญชี-1บัญชี account1 = บัญชีใหม่ (ชื่อ = 'Linux Hint');
แผนที่
บัญชี 1 => 1,000};
System.debug('แผนที่ - 1:' + map_obj1);
// บัญชี-2
บัญชี account2 = บัญชีใหม่ (ชื่อ = 'Linux Hint');
แผนที่
บัญชี 2 => 1,000};
System.debug('แผนที่ - 2:' + map_obj1);
// บัญชี-3
บัญชี account3 = บัญชีใหม่ (ชื่อ = 'Python');
แผนที่
บัญชี3 => 2000};
System.debug('แผนที่ - 3:' + map_obj3);
// เท่ากับ ()
System.debug('แผนที่ 1 & แผนที่ 2 เท่ากัน: '+ map_obj1.equals(map_obj2));
System.debug('แผนที่ 1 & แผนที่ 3 เท่ากัน: '+ map_obj1.equals(map_obj3));
เอาท์พุต:
วัตถุแผนที่ตัวแรกและตัวที่สองมีค่าเท่ากันเนื่องจากทั้งคีย์และค่าเหมือนกันในวัตถุทั้งสอง วัตถุแผนที่ตัวแรกและตัวที่สามไม่เท่ากันเนื่องจากคีย์และค่าต่างกัน
7. Map.isEmpty()
เราสามารถตรวจสอบว่าแผนที่ว่างเปล่าหรือไม่โดยใช้เมธอด isEmpty() True จะถูกส่งคืนหากคอลเลกชันแผนที่ Apex ว่างเปล่า มิฉะนั้นจะส่งกลับค่าเท็จ คล้ายกับเมธอด size() ซึ่งจะไม่ใช้พารามิเตอร์ใดๆ
ไวยากรณ์:
map_object.isEmpty()ตัวอย่าง:
มาสร้างแผนที่สองวัตถุที่เกี่ยวข้องกับ 'บัญชี' และตรวจสอบว่าทั้งสองว่างเปล่าหรือไม่
// บัญชี-1บัญชี account1 = บัญชีใหม่ (ชื่อ = 'Linux Hint');
แผนที่
บัญชี 1 => 1,000};
// บัญชี-2
แผนที่
// มันว่างเปล่า()
System.debug('แผนที่-1 ว่างเปล่า: '+map_obj1.isEmpty());
System.debug('แผนที่-2 ว่างเปล่า: '+map_obj2.isEmpty());
เอาท์พุต:
แผนที่แรกไม่ว่างเปล่าเนื่องจากมีคู่คีย์-ค่าหนึ่งคู่ แผนที่ที่สองว่างเปล่าเนื่องจากไม่มีเลย
8. แผนที่ ลบ ()
วิธีการลบ () ในคอลเลกชันแผนที่ Apex ใช้เพื่อลบคู่คีย์-ค่าเฉพาะตามคีย์ที่ระบุเป็นพารามิเตอร์ หากไม่มีคีย์ จะเกิดข้อผิดพลาดขึ้น
ไวยากรณ์:
map_object.remove (คีย์)ตัวอย่าง:
มาสร้างแผนที่ที่มีสองรายการและนำรายการแรกออก
บัญชี account1 = บัญชีใหม่ (ชื่อ = 'Linux Hint');บัญชี account2 = บัญชีใหม่ (ชื่อ = 'Python');
แผนที่
บัญชี1 => 1,000,บัญชี2 => 4000};
System.debug('แผนที่ที่มีอยู่'+ map_obj);
//ลบ()
map_obj.remove (บัญชี 1);
System.debug('หลังจากลบรายการแรก:'+map_obj);
เอาท์พุต:
หลังจากลบรายการแรกออกจากแผนที่ มีเพียงรายการเดียวเท่านั้น – {บัญชี:{Name=Python}=4000}
9. Map.put()
เมื่อใช้วิธีนี้ เราสามารถเพิ่มหนึ่งรายการไปยังวัตถุแผนที่ได้โดยตรงในแต่ละครั้ง ยอมรับพารามิเตอร์สองตัว: 'key' เป็นพารามิเตอร์แรกในขณะที่ 'value' เป็นพารามิเตอร์ที่สอง
ไวยากรณ์:
map_object.put(คีย์,ค่า)ตัวอย่าง:
มาสร้างแผนที่ด้วยคู่คีย์-ค่าหนึ่งคู่ จากนั้นเราใช้วิธี 'ใส่' เพื่อแทรก 'บัญชี 2'
// บัญชี-1บัญชี account1 = บัญชีใหม่ (ชื่อ = 'Linux Hint');
แผนที่
บัญชี 1 => 1,000};
System.debug('แผนที่จริง:'+map_obj1);
// บัญชี-2
บัญชี account2 = บัญชีใหม่ (ชื่อ = 'Python');
// ใส่()
map_obj1.put(บัญชี2,2000);
System.debug('แผนที่สุดท้าย: '+map_obj1);
เอาท์พุต:
ก่อนหน้านี้ มีคู่คีย์-ค่าเพียงคู่เดียวในแผนที่ ซึ่งก็คือ {Account:{Name=Linux Hint}=1000} หลังจากเพิ่ม “account2” แผนที่สุดท้ายจะมีคู่คีย์-ค่าสองคู่ ซึ่งได้แก่ {Account:{Name=Linux Hint}=1000 และ Account:{Name=Python}=2000}
10. Map.putAll()
เมื่อใช้วิธีนี้ เราสามารถเพิ่มรายการเดียวหรือหลายรายการไปยังวัตถุแผนที่ได้โดยตรงในแต่ละครั้ง ใช้วัตถุคอลเลกชันแผนที่เป็นพารามิเตอร์
ไวยากรณ์:
map_object1.putAll(map_object2)ตัวอย่าง:
มาสร้างแผนที่ที่มีคู่คีย์-ค่า 2 คู่ และสร้างออบเจกต์แผนที่เปล่าอีกครั้งโดยไม่มีรายการ ใช้เมธอด putAll() เพื่อเพิ่มรายการที่มีอยู่ในวัตถุแผนที่แรกไปยังวัตถุแผนที่ที่สอง
บัญชี account1 = บัญชีใหม่ (ชื่อ = 'Linux Hint');บัญชี account2 = บัญชีใหม่ (ชื่อ = 'Python');
แผนที่
บัญชี 1 => 1,000, บัญชี 2 => 2,000};
System.debug(map_obj1);
แผนที่
// ใส่ทั้งหมด ()
map_obj2.putAll(map_obj1);
System.debug(map_obj2);
เอาท์พุต:
บทสรุป
แผนที่เป็นโครงสร้างข้อมูลที่ส่วนใหญ่จะใช้ในสถานการณ์ทริกเกอร์และช่วยในการโหลดข้อมูลจำนวนมากขึ้นในฐานข้อมูล Salesforce เช่นรายการในแต่ละครั้ง เรามีสองตัวเลือกในการเพิ่มรายการลงในแผนที่: โดยใช้ put() และ putAll() วิธีการลบ () ใช้เพื่อลบรายการเฉพาะออกจากคอลเล็กชันแผนที่ Apex ใช้เมธอด clear() เพื่อลบรายการทั้งหมด นอกจากนี้ เราได้เรียนรู้วิธีคืนค่าและคีย์โดยใช้เมธอดค่า () และคีย์เซ็ต ()