ความแตกต่างระหว่าง data() และ buf2Buf() ใน Dynamics AX 2012
ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 22 นาฬิกา 54 นาที 15 วินาที UTC
ปรับปรุงล่าสุด : 12 มกราคม 2026 เวลา 8 นาฬิกา 41 นาที 15 วินาที UTC
บทความนี้อธิบายถึงความแตกต่างระหว่างเมธอด buf2Buf() และ data() ใน Dynamics AX 2012 รวมถึงสถานการณ์ที่เหมาะสมในการใช้งานแต่ละเมธอด และตัวอย่างโค้ด X++
The Difference Between data() and buf2Buf() in Dynamics AX 2012
ข้อมูลในโพสต์นี้อ้างอิงจาก Dynamics AX 2012 R3 อาจใช้ได้หรือไม่ก็ได้กับเวอร์ชันอื่นๆ
เมื่อคุณต้องการคัดลอกค่าของทุกฟิลด์จากบัฟเฟอร์ตารางหนึ่งไปยังอีกบัฟเฟอร์หนึ่งใน Dynamics AX โดยทั่วไปแล้วคุณจะต้องทำดังนี้:
วิธีนี้ได้ผลดีและในกรณีส่วนใหญ่เป็นวิธีที่ดีที่สุด
อย่างไรก็ตาม คุณยังมีตัวเลือกในการใช้ฟังก์ชัน buf2Buf แทนได้อีกด้วย:
วิธีนี้ก็ใช้ได้ดีเช่นกัน แล้วความแตกต่างอยู่ตรงไหน?
ความแตกต่างคือ buf2Buf ไม่คัดลอกฟิลด์ระบบ ฟิลด์ระบบได้แก่ฟิลด์ต่างๆ เช่น RecId, TableId และที่สำคัญที่สุดในบริบทนี้คือ DataAreaId เหตุผลที่ฟิลด์หลังนี้สำคัญที่สุดก็คือ กรณีทั่วไปที่สุดที่คุณจะใช้ buf2Buf() แทน data() คือการคัดลอกเรคอร์ดระหว่างบัญชีบริษัท ซึ่งโดยทั่วไปแล้วจะใช้คีย์เวิร์ด changeCompany
ตัวอย่างเช่น หากคุณอยู่ในบริษัท "dat" และมีอีกบริษัทหนึ่งชื่อ "com" ที่คุณต้องการคัดลอกข้อมูลทั้งหมดใน CustTable จากบริษัทนั้น:
{
buf2Buf(custTableFrom, custTableTo);
custTableTo.insert();
}
ในกรณีนี้ มันจะทำงานได้เพราะ buf2Buf จะคัดลอกค่าฟิลด์ทั้งหมด ยกเว้นฟิลด์ระบบ ไปยังบัฟเฟอร์ใหม่ หากคุณใช้ data() แทน ข้อมูลใหม่จะถูกแทรกเข้าไปในบัญชีบริษัท "com" เพราะค่าเหล่านั้นจะถูกคัดลอกไปยังบัฟเฟอร์ใหม่ด้วยเช่นกัน
(ที่จริงแล้ว มันจะทำให้เกิดข้อผิดพลาดเกี่ยวกับรหัสซ้ำ แต่นั่นก็ไม่ใช่สิ่งที่คุณต้องการเช่นกัน)
อ่านเพิ่มเติม
หากคุณชอบโพสต์นี้ คุณอาจชอบคำแนะนำเหล่านี้ด้วย:
- การจัดรูปแบบสตริงด้วยแมโครและ strFmt ใน Dynamics AX 2012
- การใช้เฟรมเวิร์ก SysExtension เพื่อค้นหาว่าคลาสย่อยที่จะสร้างอินสแตนซ์ใน Dynamics AX 2012
- การระบุคลาสเอกสารและแบบสอบถามสำหรับบริการ AIF ใน Dynamics AX 2012
