
Andrew Hanna

Andrew Hanna

باختصار: الـ click deploy نادرًا ما بيفشل بسبب الزرار. هو بيفشل لأن Salesforce Metadata API بترفض الحزمة، وتقريبًا كل رفض بيقع في واحدة من خمس مجموعات: اعتمادية ناقصة، أو تغطية اختبارات قليلة، أو إصدار API مش معروف في الـ org الهدف، أو حد من حدود الحجم في المنصة، أو تغيير الـ API مش بتقدر تعمله. اقرا أول خطأ، صلّح السبب في المصدر، واعمل validation تاني قبل ما تنشر.
أيًا كانت الأداة اللي بتدوس فيها، نفس الشيء بيحصل تحت. الأداة بتبني ملف
package.xml وملف .zip للـ metadata اللي اخترتها، وتبعتهم للـ Metadata
API، وSalesforce بتعمل compile، وتشغّل اختبارات Apex على مستوى الاختبار اللي اخترته،
وتحفظ النتيجة. لو أدوات الـ point-and-click جديدة عليك، ابدأ بـ
إزاي ClickDeploy بيشتغل وبكام.
قاعدتين في المنصة بيفسروا أغلب المفاجآت:
الحزمة بتشير لحاجة مش موجودة في الـ org الهدف: field من غير الـ object بتاعه، أو Flow من غير الـ fields اللي بيقراها، أو child object من غير الـ parent. Copado Essentials، الأداة اللي كان اسمها ClickDeploy، بتوثّق حالة كلاسيكية: نشر detail object لوحده بيرجّع Cannot set sharingModel to ControlledByParent on a CustomObject without a MasterDetail relationship field. الحل إنك تضيف الـ parent object للنشر، حتى لو ما اتغيرش.
Salesforce بتشترط إن 75% على الأقل من كود Apex يكون متغطي باختبارات وحدة عشان تنشر على الإنتاج، وكل trigger محتاج سطر واحد متغطي على الأقل. لو اخترت RunSpecifiedTests، المعيار بيتغير: الاختبارات اللي بتحددها لازم تغطي 75% من كل class وكل trigger في الحزمة لوحده. الحل اختبارات أحسن، مش مستوى اختبار مختلف.
خطأ زي Invalid api version غالبًا بيظهر حوالين مواعيد الإصدارات، لما يكون الـ sandbox بتاعك شغال على إصدار Salesforce الجاي والإنتاج لسه لأ. Winter '27 مثال حي: الـ sandboxes دخلت الـ preview في أواخر أغسطس 2026، بينما instances الإنتاج بتترقى على كذا ويك إند لحد أكتوبر، فراجع الـ instance بتاعك على Salesforce Trust. نصيحة Copado إنك ترجّع إصدار الـ API بتاع الـ component لإصدار الإنتاج بيدعمه، وتنشر تاني.
مكتبة النشر الخاصة بـ Salesforce نفسها، source-deploy-retrieve، بتحذّر لما النشر يقرّب من حدود الـ Metadata API: 10,000 ملف وحوالي 39 MB مضغوط. الاختيارات بالـ wildcard ونشر objects كاملة بيوصلوا للحدود دي الأول. قسّم الإصدار، أو انشر اللي اتغير بس باستخدام الـ delta deployments.
النشر الأخضر معناه بس إن Salesforce قبلت الحزمة. مش معناه إن الهدف بقى زي المصدر:
Tekunda شركة استشارات ومنتجات Salesforce، وهي اللي ورا Serpent، منصة الـ DevOps اللي بتستخدمها في تسليم شغل عملائها. Serpent بتحافظ على تجربة الاختيار بالضغط، لكن كل تغيير بيعدي على Git وpull request وvalidation باختبارات Apex قبل ما يوصل للـ org اللي بعده، مع مراجعة كود بالذكاء الاصطناعي في كل الخطط، حتى المجانية. ومش بتثبّت أي حاجة في الـ org بتاعك. الفرق اللي شغالة على Copado Essentials أو Gearset أو Salto أو AutoRABIT أو Flosum أو Blue Canvas تقدر تمشي على مسار الانتقال بتاعنا، وأدلة أكتر موجودة في مكتبة SF Guides.
ليه النشر بينجح في الـ sandbox ويفشل في الإنتاج؟
الـ sandboxes ما بتشغّلش اختبارات Apex افتراضيًا، بينما الإنتاج بيشغّل الاختبارات المحلية ويفرض تغطية 75%. اعمل validation على الإنتاج بنفس مستوى الاختبار الأول.
يعني إيه "invalid api version"؟
الـ component بتاعك بيستخدم إصدار API الـ org الهدف لسه ما بيدعموش، غالبًا وقت الإصدارات. نزّل إصدار الـ component وانشر تاني.
ينفع أتجاهل الأخطاء وأنشر برضه؟
Salesforce CLI فيها flag لتجاهل الأخطاء بيتخطى الـ rollback، لكن المرجع بتاعها بيقول ما تستخدموش أبدًا على الإنتاج.
قد إيه components ينفع يكونوا في نشر واحد؟
الـ Metadata API بتحدد النشر بـ 10,000 ملف وحوالي 39 MB مضغوط. قسّم الإصدارات الأكبر.
بدون التزام.