
Serpent Team

Andrew Hanna

الإجابة باختصار: معظم تعارضات الدمج في Salesforce مش خلافات حقيقية. غالبًا اتنين بيضيفوا حاجات مالهاش علاقة ببعض في نفس ملف الـ XML الضخم، أو نفس العناصر راجعة بترتيب مختلف. مع الميتاداتا الإضافية زي البروفايلات والـ permission sets والـ layouts والـ labels، خُد الطرفين مع بعض. ومتدمجش يدويًا الـ XML المولَّد زي الـ Flows: اختار نسخة واحدة وأعِد تطبيق التغيير التاني من Flow Builder.
أربع خصائص في المنصة بتفسر تقريبًا كل الحالات.
أسوأ الأنواع، وغالبًا إضافية بحتة. كل فرع بيضيف بلوك objectPermissions أو
fieldPermissions، والإضافتين بيقعوا جنب بعض. خُد الطرفين، وبعدين شيل
التكرار على أساس العنصر المفتاحي (field أو object أو
apexClass) وأعِد الترتيب. متحلش تعارض بروفايل أبدًا بقبول طرف واحد
بالكامل.
معلومة مهمة: Salesforce ألغت خطة سحب الصلاحيات من البروفايلات (مقال Salesforce Help رقم 003834041)، يعني البروفايلات مش رايحة في تاريخ محدد، والمشكلة دي مش هتحل نفسها. وبرضه Salesforce لسه بتوصي بنموذج أقل الامتيازات المبني على الـ permission sets، ونقل الصلاحيات بره البروفايلات بيقلّل فعلًا مساحة التعارض، لأن الـ permission sets ملفات صغيرة لكل فيتشر.
متدمجهاش يدويًا. الـ XML فيه أسماء عناصر مولَّدة وإحداثيات كانفس، فالدمج على مستوى السطر بيطلّع حاجة شكلها منطقي وسلوكها غلط. اختار نسخة تكسب، وأعِد تطبيق التغيير التاني من Flow Builder.
ملف الـ layout بيسرد كل عنصر بترتيب موضعه، فاتنين بيضيفوا حقول في أقسام مختلفة ممكن
يتصادموا برضه لو الأقسام متجاورة. اجمع الطرفين، وبعدين اتأكد إن كل
layoutItem من الطرفين لسه موجود. ولو التعارض في صفحة Lightning أكبر من
كام سطر، أعِد بناءها من Lightning App Builder بدل ما تدمجها.
لو الريبو بيخزّن الأوبچكت في ملف واحد، كل تعديل حقل بيلمس الملف ده. صيغة المصدر المفكّكة بتدي لكل حقل ملف مستقل وبتشيل معظم التعارضات دي قبل ما تحصل.
عاملهم كتعارض كود عادي، لأنهم كده فعلًا. حل المنطق، وشغّل الاختبارات تاني، وبعدين اتأكد إن الكلاس لسه متمنوح في البروفايلات والـ permission sets اللي بتشاور عليه.
ملفات مفردة مرتبة أبجديًا وإضافية بحتة. خُد الطرفين وأعِد الترتيب.
الدليل ده جزء من أدلة Salesforce DevOps عندنا.
هل Git يقدر يحل تعارضات ميتاداتا Salesforce لوحده؟
نصيًا بس. Git مش قادر يعرف إن بلوكين في البروفايل مستقلين، ولا إن ملف معاد ترتيبه ما اتغيرش، فبيطلّع تعارضات وهمية وبيقبل بسهولة دمج غلط من ناحية المعنى.
يعني إيه تعارض وهمي؟
تعارض الطرفين فيه نفس الميتاداتا بترتيب مختلف. الـ Metadata API مش بتضمن ترتيب العناصر، فسحبتين ممكن يختلفوا من غير أي تغيير حقيقي.
ينفع أعدّل XML الـ Flow بإيدي لحل تعارض؟
لأ. اختار نسخة، وأعِد تطبيق التغيير التاني من Flow Builder، واعمل commit لللي بتسحبه.
ليه البروفايلات بتتعارض وإحنا شغالين على فيتشرز مختلفة خالص؟
البروفايل ملف واحد بيغطي صلاحيات كل أوبچكت وحقل وكلاس في الأورج، فالفيتشرز غير المرتبطة بتكتب في سطور متجاورة.
إزاي أتأكد إن الدمج ما ضيّعش حاجة؟
قارن الملف المدموج بالنسختين الأصليتين، اتأكد إن كل عنصر مفتاحي من الطرفين لسه موجود، واعمل تحقق للنشر مقابل الأورج الهدف قبل الدمج.
بدون التزام.