كيفية إصلاح DUPLICATE_EXTERNAL_ID في عمليات نشر Salesforce
تطابق عملية upsert أكثر من سجل موجود بنفس قيمة المعرف الخارجي، فلا تستطيع Salesforce تحديد أيها يجب تحديثه.
يظهر أثناء: عمليات upsert DML في تحميل البيانات والتكاملات وApexالمعنى
يعني DUPLICATE_EXTERNAL_ID أن استدعاء upsert وجد أكثر من سجل واحد في المؤسسة الهدف يشترك في نفس القيمة في حقل المعرف الخارجي الذي يتم المطابقة عليه. تعتمد عملية upsert على أن يكون ذلك الحقل فريدًا حقًا لكل سجل؛ فعندما توجد تكرارات، لا تجد Salesforce طريقة لتحديد السجل الذي يجب أن تُحدّثه البيانات الواردة، لذا ترفض العملية بدلًا من التخمين.
هذه مشكلة تتعلق فقط بحالة البيانات في المؤسسة الهدف، وليست خللًا في الحمولة الواردة نفسها؛ نفس استدعاء upsert سينجح بمجرد حل القيم المكررة في المؤسسة الهدف.
الأسباب الشائعة
الحل
- أزل التكرار أولًا من السجلات المشتركة في نفس المعرف الخارجياستعلم في المؤسسة الهدف عن القيمة المخالفة، وحدد أي سجل هو المرجعي، وادمج أو احذف الباقي قبل إعادة المحاولة.
SELECT External_Id__c, COUNT(Id) FROM Account GROUP BY External_Id__c HAVING COUNT(Id) > 1 - فعّل خاصية Unique على الحقلعدّل تعريف حقل المعرف الخارجي بحيث تفرض Salesforce التفرد من الآن فصاعدًا وتمنع التكرارات الجديدة وقت الإدخال.
- استخدم مفتاحًا مركبًا أكثر تحديدًاإذا كان سجلان مختلفان فعليًا يمكن أن يشتركا في القيمة الأساسية، فادمجها مع حقل ثانٍ بحيث تكون المطابقة قاطعة.
إزاي Serpent بتمنع ده
يحافظ Serpent على مزامنة كل sandbox وscratch org من نفس المصدر، ما يقلل بشكل كبير من احتمال تراكم قيم معرفات خارجية مكررة ناتجة عن بيانات قديمة مُحمّلة يدويًا بين البيئات. اطّلع على مكتبة أخطاء نشر Salesforce.

الوقاية
أخطاء ذات صلة
DUPLICATE_EXTERNAL_ID: الإجابة
ابدأ مجانًا. بدون بطاقة ائتمان، وبدون تثبيت، وبدون التزام.
يتم الإعداد في أقل من 15 دقيقة. بدون الحاجة لتوظيف DevOps.
