
Serpent Team

Andrew Hanna

بتحذف البيانات الوصفية في سيلزفورس بملف بيان اسمه
destructiveChanges.xml بينتشر جنب package.xml، وإنت اللي
بتختار الحذف يشتغل قبل الجزء الإضافي من النشر ولا بعده. الخطر مش في الصيغة. الخطر إن
الحذف الناجح مفيش تراجع نشر بيرجّعه، وإن أكتر المكونات المرشحة تتكسر هي اللي محدش
حاططها في التحكم في الإصدار.
بيان destructiveChanges
بيستخدم نفس صيغة package.xml، مع فرق مهم:
رموز البدل مش مدعومة. كل مكون ناوي تشيله لازم يتسمّى بالاسم.
أبسط مدخل شكله كده:
<types><members>Account.Legacy_Score__c</members><name>CustomField</name></types>.
قاعدتين بيقعوا الناس من أول محاولة:
package.xml في نفس المجلد. في نشر الحذف بس، بيحمل إصدار
الواجهة ومش بيسرد أي مكونات.
واجهة أوامر سيلزفورس بتديك الاتنين عن طريق
بيانين منفصلين: --pre-destructive-changes بيحذف قبل النشر، و
--post-destructive-changes بيحذف بعده.
خلي الافتراضي هو الحذف بعد النشر. الحزمة الإضافية بتنزل الأول، فأي حاجة لسه بتشير للمكون المحكوم عليه تقدر تتحوّل في نفس النشر قبل ما يختفي.
استخدم الحذف قبل النشر لما القديم والجديد يتصادموا. أوضح الحالات:
عكس الترتيب بيطلّع الفشلين الكلاسيكيين: حذف بيفشل لأن فيه حاجة لسه بتشير للمكون، أو إضافة بتفشل لأن الاسم محجوز.
هنا لازم نتكلم بصراحة. حذف الحقل بيحذف بياناته. المكونات المحذوفة بتروح لسلة المحذوفات إلا لو النشر ضبط purgeOnDelete، وساعتها بتبقى مؤهلة للحذف فورًا. وحقول التلخيص التراكمي بتتخطى السلة بغض النظر عن الإعداد ده.
و rollbackOnError، اللي إجباري في نشر الإنتاج، بيرجّع تغييرات النشر
الفاشل. مش زرار تراجع عن حذف نجح. لو محتاج البيانات ترجع بعد تطهير ناجح، يبقى
إنت في نقاش استعادة مش نقاش نشر.
وفيه كمان نوع من الكسر عمره ما بيظهر في المستودع بتاعك: التقارير وعروض القوائم ولوحات المعلومات اللي بتشير للحقل. دي إعدادات بناها مستخدم أعمال، وغالبًا مش في Git، والنشر مش هينبهك ليها.
checkOnly، أو
--dry-run من سطر الأوامر، بيتحقق ويشغّل الاختبارات من غير ما يحفظ حاجة.
النمط الآمن مش بيان أحسن. النمط الآمن إنك تقسّم الحذف على إصدارين.
إن الحذف يتشحن لوحده ده مهم. لو كان مع عشرين تغيير تاني وحصلت مشكلة، مش هتقدر تعزل السبب بسرعة، والتراجع هياخد معاه التغييرات الكويسة.
نفس الانضباط ينطبق على إعادة التسمية، اللي Git بيسجّلها كحذف زائد إضافة. عامل كل إعادة تسمية كإهمال على إصدارين، إلا لو تقدر تثبت إن مفيش حاجة بتشير للاسم القديم. فيه أدلة تسليم تانية في مكتبة SF Guides عندنا.
أقدر أستخدم رمز بدل في destructiveChanges.xml؟
لأ. رموز البدل مش مدعومة. كل مكون هيتحذف لازم يتسمّى صراحةً.
لسه محتاج package.xml وأنا بحذف بس؟
أيوه. لازم تكون في نفس المجلد، وتحمل إصدار الواجهة، ومش بتسرد أي مكونات.
أقدر أسترجع حقل اتحذف بنشر؟
بيروح لسلة المحذوفات إلا لو purgeOnDelete كان مفعّل، وحقول التلخيص
التراكمي بتتخطى السلة على أي حال. اعتبر تصدير البيانات هو خطة الاسترجاع الحقيقية.
ليه النشر المدمر نجح ومحذفش حاجة؟
محاولات الحذف بتكمل لما المكون المذكور مش موجود في الهدف، فاسم واجهة غلط بينتج نشر أخضر ومفيش تغيير. قارن الهدف قبل وبعد.
إمتى الحذف يشتغل قبل النشر مش بعده؟
لما المكونات القديمة والجديدة تتعارض: إعادة استخدام اسم واجهة، أو إعادة إنشاء حقل بنوع مختلف، أو إزالة قاعدة هتعطّل باقي النشر.
بدون التزام.