كيفية إصلاح DEPENDENCY_EXISTS في عمليات نشر Salesforce

لا يحذف Salesforce حقلاً أو كائنًا أو قيمة picklist لأن مكونًا آخر لا يزال يشير إليها.

تظهر أثناء: حذف metadata، عبر destructiveChanges.xml أو Setup

المعنى

يمنع DEPENDENCY_EXISTS حذف metadata، حقل مخصص، كائن، نوع سجل، أو قيمة picklist، لأن شيئًا آخر في المؤسسة لا يزال يشير إليها: formula، أو validation rule، أو flow، أو report، أو page layout. يحمي Salesforce تكامل البيانات برفض إزالة مكون بينما لا يزال معتمَدًا عليه.

يظهر هذا فقط عندما تكون metadata موجودة بالفعل في المؤسسة المستهدفة وشيء ما يحذفها، سواء عبر Setup، أو عملية نشر destructiveChanges.xml، أو Tooling API؛ ولا يظهر أبدًا في عملية نشر إضافية عادية لـ metadata جديدة.

التشخيص

الأسباب الشائعة

حقل formula أو validation rule يشير إليه
يقرأ formula field أو validation rule أو workflow rule الحقل أو الكائن الذي يتم حذفه، ويرفض Salesforce كسر ذلك المرجع.
لا تزال التقارير أو list views تستخدمه
يقوم report محفوظ أو report type أو list view بتصفية الحقل أو عرضه، مما يبقيه "قيد الاستخدام" حتى لو لم يعد أحد يشغّله.
لا يزال Flow أو Apex يشير إلى الحقل
يقوم Flow أو عملية Process Builder أو class من Apex باستعلام الحقل أو تعيينه، لذا تعامله المنصة كتبعية فعّالة.

الحل

  1. ابحث عن كل تبعية باستخدام فحص التبعيات في Salesforce
    استخدم أداة "Where is this used?" في Setup على الحقل أو الكائن لسرد كل formula وflow وreport وlayout يشير إليه.
  2. أزل أو حدّث كل تبعية أولاً
    عدّل أو احذف الـ formula أو flow أو validation rule أو report المرجعية بحيث لم تعد تشير إلى المكون.
  3. احذف المكون في خطوة منفصلة
    بمجرد عدم بقاء أي تبعيات، احذف الحقل أو الكائن بمفرده، بعد وصول تنظيف التبعيات إلى المؤسسة المستهدفة.
    <!-- destructiveChangesPost.xml, deployed after the dependency cleanup lands -->
    <Package xmlns="http://soap.sforce.com/2006/04/metadata">
      <types>
        <members>Account.Legacy_Score__c</members>
        <name>CustomField</name>
      </types>
      <version>62.0</version>
    </Package>
من واقع الاستخدام

إزاي Serpent بتمنع ده

يجري Serpent فحص تبعيات preflight قبل أن يصل الحذف إلى مؤسسة مشتركة، بحيث يظهر الحقل الذي لا يزال مُشار إليه كمهمة محظورة بدلاً من عملية نشر إنتاج فاشلة. راجع مكتبة أخطاء نشر Salesforce.

أداة بناء pipelines لـ CI/CD بلا كود في Serpent

الوقاية

شغّل فحص التبعيات قبل جدولة أي إيقاف لحقل أو كائن
اجعل "Where is this used?" خطوة إلزامية في قائمة التحقق من الإيقاف، لا خطوة تصحيح تلجأ إليها بعد أول فشل.
أوقف المراجع قبل جدولة الحذف
أدرج تنظيف الـ formulas وflows وreports كعملية نشر مستقلة، ثم جدول الحذف الإتلافي كإصدار منفصل ولاحق.
استخدم نمط النشر الإتلافي ثنائي المرحلة الخاص بـ Metadata API
انشر destructiveChangesPre.xml للتنظيف المسبق وdestructiveChangesPost.xml للإزالة النهائية، بما يتوافق مع تسلسل الحذف الموصى به من Salesforce نفسها.
أسئلة شائعة

DEPENDENCY_EXISTS، بالإجابات

لماذا لا يظهر DEPENDENCY_EXISTS إلا عند النشر إلى sandbox أو الإنتاج؟
لأن بيئات sandbox والإنتاج غالبًا ما تحتوي على reports أو flows أو layouts غير موجودة في scratch org أو dev sandbox، لذا تكون التبعية غير مرئية حتى تنشر في مكان توجد فيه تلك التبعيات فعليًا.
هل تلتقط أداة "Where is this used?" كل نوع من التبعيات؟
تلتقط معظم التبعيات التصريحية، formulas وflows وlayouts وreports، لكنها قد تفوّت المراجع الديناميكية داخل Apex، مثل اسم حقل مُكوَّن من سلسلة نصية في SOQL، لذا ابحث في قاعدة الكود لديك أيضًا قبل الحذف.
هل يمكنني حذف حقل يُشار إليه فقط في إصدار Flow غير نشط؟
لا. يتحقق Salesforce من جميع إصدارات الـ Flow، وليس فقط النشط منها، لذا فإن إصدارًا غير نشط يشير إلى الحقل لا يزال يمنع الحذف.

ابدأ مجانًا. بدون بطاقة ائتمان، وبدون تثبيت، وبدون التزام.

يتم الإعداد في أقل من 15 دقيقة. دون الحاجة لتوظيف متخصص DevOps.

هل تريد معرفة كيف يمكنكم الشحن أسرع قبل البدء؟ لنتحدث

بدون التزام.