كيفية إصلاح CANNOT_CASCADE_PRODUCT_ACTIVE في عمليات نشر Salesforce
لا يمكن إلغاء تفعيل أو حذف سجل Product2 لأن PricebookEntry نشطًا لا يزال يشير إليه.
يظهر أثناء: عمليات DML على سجلات Product2، عادة ضمن سكربت ترحيل بيانات أو تنظيفالمعنى
يظهر خطأ CANNOT_CASCADE_PRODUCT_ACTIVE عندما تحاول عملية إلغاء تفعيل أو إزالة سجل Product2 بينما لا يزال يُشار إليه من قبل PricebookEntry نشط. لا يقوم Salesforce بترحيل التغيير تلقائيًا عبر سجلات التسعير التابعة، لذا يبقى المنتج محظورًا حتى تتم إزالة التبعية صراحةً.
هذا خطأ بيانات وقت التشغيل، وليس خطأ نشر ميتاداتا: يحدث لحظة تنفيذ عبارة DML، سواء من Data Loader أو سكربت ترحيل بيانات مكتوب بلغة Apex أو مهمة تنظيف CPQ، وليس أثناء نشر عبر Metadata API.
الأسباب الشائعة
الحل
- ألغِ تفعيل PricebookEntries أولاًقم بتحديث أو إلغاء تفعيل كل PricebookEntry مرتبط بالمنتج قبل محاولة إلغاء تفعيل سجل Product2 نفسه.
List<PricebookEntry> entries = [ SELECT Id FROM PricebookEntry WHERE Product2Id = :productId AND IsActive = true ]; for (PricebookEntry pbe : entries) pbe.IsActive = false; update entries; - رتّب ترحيلات CPQ لفصل التبعيات أولاًرتّب خطوات ترحيل البيانات بحيث تتم إزالة مراجع الحزم وقواعد التسعير قبل تغيير حالة المنتج الأصلي.
- تحقق من وجود مراجع نشطة لـ Quote Line أو Order Productتأكد من عدم وجود Quote Lines أو Order Products مفتوحة لا تزال تشير إلى المنتج قبل إلغاء تفعيله.
إزاي Serpent بتمنع ده
يتم تطبيق تسلسل النشر المدرك للتبعيات في Serpent على كائنات CPQ والتسعير بنفس الطريقة التي يُطبَّق بها على أي ميتاداتا أخرى، بحيث يتم ترتيب إلغاء تفعيل المنتج وإدخالات دفتر أسعاره بالترتيب الصحيح بدلاً من التصادم في منتصف النشر. راجع مكتبة أخطاء نشر Salesforce.

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