ความแตกต่างระหว่าง data() และ buf2Buf() ใน Dynamics AX 2012
ที่ตีพิมพ์: 15 กุมภาพันธ์ 2025 เวลา 22 นาฬิกา 54 นาที 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" เนื่องจากค่านั้นจะถูกคัดลอกไปยังบัฟเฟอร์ใหม่เช่นกัน
(อันที่จริงมันจะส่งผลให้เกิดข้อผิดพลาดของคีย์ที่ซ้ํากัน แต่นั่นไม่ใช่สิ่งที่คุณต้องการเช่นกัน)