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

يحاول النشر تغيير مكوّن ينتمي إلى حزمة مُدارة مثبّتة، وهو أمر لا تستطيع مؤسسات المشتركين تعديله مباشرة.

يظهر أثناء: التحقق من صحة نشر الميتاداتا، قبل تنفيذ أي DML

المعنى

يعني CANNOT_MODIFY_MANAGED_OBJECT أن عملية النشر تحاول تعديل ميتاداتا مملوكة لحزمة مُدارة، سواء كان ذلك حقلًا أو كائنًا أو فئة Apex مثبّتة من AppExchange أو حزمة مُدارة داخلية. تستطيع مؤسسات المشتركين توسيع كائنات الحزم المُدارة بطرق محددة تحددها الحزمة نفسها، لكنها لا تستطيع تعديل المكونات المحمية الخاصة بالحزمة مباشرة.

يظهر هذا الخطأ وقت النشر، قبل التأثير على أي سجلات، لأن Metadata API تتحقق من ملكية المكونات كجزء من التحقق من صحة الحزمة التي تنشرها.

التشخيص

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

مجموعة التغييرات تتضمن مكونًا من حزمة مُدارة عن طريق الخطأ
تم سحب حقل أو تخطيط ينتمي إلى حزمة مثبّتة إلى حزمة النشر مع الميتاداتا الأصلية للمؤسسة، غالبًا عبر استرجاع بأحرف بديلة.
محاولة تعديل خاصية لا تكشفها الحزمة
تُصنّف الحزمة بعض الخصائص كمحمية، لذا حتى التغيير الذي يبدو مسموحًا به، مثل تعديل قيمة قائمة منسدلة، يفشل إذا لم تسمح به الحزمة.
عدم تطابق إصدار الحزمة بين المؤسسات
المؤسستان المصدر والهدف لديهما إصداران مختلفان من نفس الحزمة المُدارة، ومكوّن محمي في إصدار واحد قابل للتعديل في إصدار آخر.

الحل

  1. أزل المكوّن المُدار من حزمة النشر
    استبعد أي ميتاداتا يعود بادئة الـ namespace الخاصة بها إلى الحزمة المثبّتة، وانشر فقط التغييرات الأصلية للمؤسسة.
  2. استخدم نقاط التوسعة المدعومة من الحزمة بدلًا من ذلك
    وسّع الكائنات المُدارة عبر حقول مخصصة أو ميتاداتا مخصصة أو واجهات برمجية يوفرها مزود الحزمة، بدلًا من تعديل مكونات الحزمة نفسها.
  3. وائم بين إصدارات الحزمة عبر المؤسسات قبل النشر
    قم بترقية أو خفض إصدار الحزمة المُدارة بحيث تعمل المؤسستان المصدر والهدف بنفس الإصدار قبل إعادة المحاولة.
من واقع الاستخدام

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

يتعرّف Serpent AI على مكونات الحزم المُدارة ذات الـ namespace عند تحديد نطاق المهمة، فيتم استبعادها تلقائيًا من حزمة النشر بدلًا من التسبب في فشل الإصدار. اطّلع على مكتبة أخطاء نشر Salesforce.

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

الوقاية

لا تستخدم أبدًا استرجاعًا بأحرف بديلة في مؤسسة مليئة بالحزم
قيّد عمليات استرجاع Metadata API بأسماء مكونات صريحة وأصلية للمؤسسة، حتى لا ينتهي بك الأمر بحقل أو تخطيط له namespace في مصدرك عن طريق الخطأ.
تتبّع إصدارات الحزم المثبّتة لكل مؤسسة
احتفظ بسجل لإصدار الحزمة المُدارة الذي تعمل به كل بيئة، وتحقق منه قبل ترقية الميتاداتا التي تمس مكونات قريبة من الحزمة.
استبعد بادئات الـ namespace من package.xml الخاص بك افتراضيًا
اضبط أدوات النشر لديك لتخطي أي مكوّن يحمل اسم API ببادئة namespace معروفة من طرف ثالث، ما لم تتم إضافته صراحةً.
أسئلة شائعة

CANNOT_MODIFY_MANAGED_OBJECT: الإجابة

هل يمكنني تعديل حقول حزمة مُدارة مباشرة على الإطلاق؟
فقط الحقول والإعدادات التي يحددها مزود الحزمة صراحةً كقابلة للتعديل في مؤسسات المشتركين. كل شيء آخر محمي بالتصميم، والحل يكاد يكون دائمًا استبعاد ذلك المكوّن من عملية النشر بدلًا من فرض التغيير.
كيف أميّز مكوّنًا مُدارًا عن مكوّن أصلي للمؤسسة؟
يحمل اسم API لمكوّن مُدار بادئة namespace الخاصة بالحزمة، مثل packagename__FieldName__c، بينما لا تحمل الميتاداتا المخصصة الأصلية للمؤسسة أي بادئة namespace على الإطلاق.
هل يؤدي إلغاء تثبيت الحزمة وإعادة تثبيتها إلى حل هذه المشكلة؟
لا، وهذا يعرّض البيانات لخطر الفقدان. الحماية مقصودة بالتصميم؛ إعادة تثبيت نفس إصدار الحزمة لا يغيّر شيئًا في الخصائص القابلة للتعديل.

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

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

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

بدون التزام.