Salesforce Apex – แผนที่

Salesforce Apex Phaenthi



แผนที่ Salesforce Apex เป็นโครงสร้างข้อมูลที่ส่วนใหญ่จะใช้ในสถานการณ์ทริกเกอร์ และช่วยในการโหลดข้อมูลครั้งละมากขึ้นไปยังฐานข้อมูล Salesforce เช่น รายการ แต่จะจัดเก็บและจัดระเบียบข้อมูลในรูปแบบคู่ {key:value} เราจะหารือเกี่ยวกับการรวบรวมแผนที่ในภาษาการเขียนโปรแกรม Apex และวิธีการของมัน ในที่นี้ เราจะใช้อ็อบเจ็กต์มาตรฐานของบัญชีใน Salesforce สำหรับตัวอย่างทั้งหมด มาดำดิ่งสู่บทช่วยสอนนี้อย่างรวดเร็ว

แผนที่

แผนที่ใช้ข้อมูลคู่ {key:value} เป็นอินพุตและจัดเก็บไว้ในมาตรฐานของ Salesforce หรือวัตถุที่กำหนดเอง สามารถใช้ sObject เป็นคีย์หรือค่า







การสร้างแผนที่

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



ไวยากรณ์แผนที่ว่างเปล่า:

แผนที่ map_obj = แผนที่ใหม่():

ไวยากรณ์ทั่วไป:

แผนที่ map_obj = แผนที่ใหม่{

คีย์ => ค่า,....};

ไวยากรณ์ของวัตถุ:

แผนที่ map_obj = แผนที่ใหม่{

คีย์ => ค่า,....};

ที่นี่ sObject สามารถเป็นวัตถุมาตรฐานหรือแบบกำหนดเอง ในบทความนี้เราจะจัดการกับแผนที่ด้วยวัตถุ 'บัญชี' เท่านั้น



มาดูวิธีการที่รองรับโดยชุด 'แผนที่' ของ Apex ทีละรายการ





การตั้งค่าสภาพแวดล้อม

1. เข้าสู่ระบบ Salesforce อย่างรวดเร็วและเปิด “Developer Console” โดยคลิกที่ไอคอนรูปเฟือง



2. จากนั้นเปิด “หน้าต่างที่ไม่ระบุตัวตน” โดยคลิกที่ “ดีบั๊ก” และ “เปิดหน้าต่างปฏิบัติการไม่ระบุชื่อ”

ตัวอย่างทั่วไป:

อันดับแรก เราจะเห็นการสร้างแผนที่ทั่วไปโดยสร้างแผนที่ที่มีหัวเรื่องสองชื่อ: “subject_id” ซึ่งทำหน้าที่เป็นคีย์ และ “ค่า” เป็นชื่อหัวเรื่อง

แผนที่<จำนวนเต็ม, สตริง> การเขียนโปรแกรม=แผนที่ใหม่<จำนวนเต็ม,สตริง>{1=> 'Linux',2=> 'Python'};

system.debug(การเขียนโปรแกรม);

เอาท์พุต:

  1. คลิกที่ 'ดำเนินการ'
  2. ทำเครื่องหมายที่ตัวเลือก 'Debug Only' คุณสามารถดูผลลัพธ์ได้ใน 'บันทึกการดำเนินการ'

วิธีการแผนที่

ขั้นแรก เราสร้างแผนที่จากวัตถุ 'บัญชี' เราสร้างสามบัญชีด้วยชื่อทีละบัญชี จากนั้นเราประกาศแผนที่ด้วยคีย์และค่าเป็น พิมพ์และส่งสามบัญชีก่อนหน้าไปยังแผนที่โดยระบุค่าบางอย่าง

// สร้าง 3 บัญชีด้วยชื่อ

บัญชี account1 = บัญชีใหม่ (ชื่อ = 'Linux Hint');

บัญชี บัญชี 2 = บัญชีใหม่ (ชื่อ = 'Salesforce');

บัญชี account3 = บัญชีใหม่ (ชื่อ = 'Python');

// เพิ่มบัญชีด้านบนเป็นคีย์ใน map_obj

แผนที่ 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');

แผนที่ map_obj1 = แผนที่ใหม่{

บัญชี 1 => 1,000};

System.debug('แผนที่ - 1:' + map_obj1);

// บัญชี-2

บัญชี account2 = บัญชีใหม่ (ชื่อ = 'Linux Hint');

แผนที่ map_obj2 = แผนที่ใหม่{

บัญชี 2 => 1,000};

System.debug('แผนที่ - 2:' + map_obj1);

// บัญชี-3

บัญชี account3 = บัญชีใหม่ (ชื่อ = 'Python');

แผนที่ map_obj3 = แผนที่ใหม่{

บัญชี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');

แผนที่ map_obj1 = แผนที่ใหม่{

บัญชี 1 => 1,000};



// บัญชี-2

แผนที่ map_obj2 = แผนที่ใหม่();

// มันว่างเปล่า()

System.debug('แผนที่-1 ว่างเปล่า: '+map_obj1.isEmpty());

System.debug('แผนที่-2 ว่างเปล่า: '+map_obj2.isEmpty());

เอาท์พุต:

แผนที่แรกไม่ว่างเปล่าเนื่องจากมีคู่คีย์-ค่าหนึ่งคู่ แผนที่ที่สองว่างเปล่าเนื่องจากไม่มีเลย

8. แผนที่ ลบ ()

วิธีการลบ () ในคอลเลกชันแผนที่ Apex ใช้เพื่อลบคู่คีย์-ค่าเฉพาะตามคีย์ที่ระบุเป็นพารามิเตอร์ หากไม่มีคีย์ จะเกิดข้อผิดพลาดขึ้น

ไวยากรณ์:

map_object.remove (คีย์)

ตัวอย่าง:

มาสร้างแผนที่ที่มีสองรายการและนำรายการแรกออก

บัญชี account1 = บัญชีใหม่ (ชื่อ = 'Linux Hint');

บัญชี account2 = บัญชีใหม่ (ชื่อ = 'Python');

แผนที่ map_obj = แผนที่ใหม่{

บัญชี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');

แผนที่ map_obj1 = แผนที่ใหม่{

บัญชี 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');

แผนที่ map_obj1 = แผนที่ใหม่{

บัญชี 1 => 1,000, บัญชี 2 => 2,000};

System.debug(map_obj1);

แผนที่ map_obj2 = แผนที่ใหม่();

// ใส่ทั้งหมด ()

map_obj2.putAll(map_obj1);

System.debug(map_obj2);

เอาท์พุต:

บทสรุป

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