الفرق بين data() وbuf2Buf() في Dynamics AX 2012
نُشرت: ١٥ فبراير ٢٠٢٥ م في ١٠:٥٣:٠٣ م 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" لأن هذه القيمة سيتم نسخها إلى المخزن المؤقت الجديد أيضًا.
(في الواقع، كان من الممكن أن يؤدي ذلك إلى خطأ مفتاح مكرر، ولكن هذا ليس ما تريده أيضًا).