
Andrew Hanna

Andrew Hanna

الإجابة باختصار: تعبئة بيئة sandbox في Salesforce بشكل صح هي تلات مهام مش مهمة واحدة. اسحب شريحة من الإنتاج واعية بالعلاقات بدل ما تسحب عدد سجلات، حمّلها من الأب للابن باستخدام معرفات خارجية ثابتة عشان نفس المجموعة تتحمّل تاني، وأخفِ البيانات الحساسة بطريقة حتمية عشان البيانات تفضل تتصرف زي البيانات الحقيقية. وبعدين خزّن تعريف التعبئة في نظام الإصدارات جنب الـ metadata، لأن اللي بيقتل مجموعات التعبئة مش أول تحميل، ده تغيير المخطط بعد تلات دورات تطوير.
التعبئة هي نسخ مجموعة فرعية من سجلات الإنتاج لبيئة أدنى، عشان الـ org يكون فيها بيانات واقعية للتطوير والاختبار، مع إخفاء القيم الحساسة قبل ما تنزل. دي مشكلة بيانات مش مشكلة metadata: تحديث الـ sandbox بيجيب الإعدادات، وفي أغلب الحالات بيسيبك مع org فاضية أو غير قابلة للاستخدام.
اللي ما بتنسخش البيانات لك. حسب توثيق Salesforce عن تراخيص الـ sandbox وحدود التخزين: Developer (200 ميجابايت) وDeveloper Pro (1 جيجابايت) بينسخوا الـ metadata بس وبيتحدّثوا كل يوم، ودول اللي بتعبّيهم. Partial Copy (5 جيجابايت، كل 5 أيام) بتجيب عينة محددة بقالب وإنت بتسد الفراغات. Full (بحجم الإنتاج، كل 29 يوم) بتجيب كل حاجة، وعشان كده الإخفاء هناك بيبقى أهم. والـ scratch orgs بتبدأ فاضية دايمًا، فالتعبئة عليها إلزامية.
الغلطة الشائعة هي الاختيار بالحجم: خد 500 Account و500 Contact واتمنى إنهم مربوطين ببعض. مش هيبقوا كده، وفريق الاختبار هيقضي أسبوع بيبني السجلات اللي اتوعد بيها.
اختار بـالرسم البياني للعلاقات بدل كده، وابدأ من مجموعة صغيرة من السجلات الجذرية:
بضع مئات من السجلات المترابطة كويس بتغلب مئة ألف سجل مفكك في كل غرض ما عدا اختبار الأداء.
ترتيب اعتمادية صارم، الآباء قبل الأبناء، وكل كائن مفتاحه حاجة ثابتة.
upsert عليه. كده التحميل يبقى قابل للتكرار: تشغّله مرتين فيحدّث بدل ما
يكرر.
Account.ParentId، والأزواج اللي كل واحد بيشاور على التاني، ما ينفعش
تتحل في إدخال واحد. حمّل السجلات والـ lookup فاضي، وبعدين شغّل مرحلة تانية بتملا الـ
lookup بس.
الإخفاء اللي بينتج بيانات عشوائية زيه زي عدم الإخفاء، لأن محدش بيثق في اختبار فشل على بيانات فاضية من المعنى. اختار الأسلوب حسب الحقل:
Salesforce بتوفر Anonymize for Salesforce، وGearset وOdaseva وFlosum بيقدموا أدوات تعبئة بإخفاء مدمج. أيًا كان اللي بتستخدمه، قواعد الإخفاء لازم يعتمدها مرة، كتابةً، المسؤول عن حماية البيانات.
ده الجزء اللي تقريبًا محدش بيغطيه، وهو السبب إن أغلب مجموعات التعبئة بتموت خلال ربع سنة. تعريف التعبئة صورة ثابتة من مخططك: قوائم الحقول وقيم القوائم المنسدلة والحقول الإلزامية وقواعد التحقق. تنزل حقل إلزامي جديد، وكل تحميل بعده هيفشل.
تعامل مع مجموعة التعبئة كأنها كود مصدري:
في Serpent، عملية البيانات إجراء أصيل في الـ pipeline مش شغل يدوي، وده اللي بيخلي تشغيل التعبئة يعيش في نفس الـ pipeline بتاع النشر اللي بيدعمه.
وأخيرًا اربط الإيقاع بإصداراتك: كل دورة لبيئات التطوير، وكل جولة اختبار لبيئة القبول، ودايمًا بعد أي تحديث. ولأن التحميل قابل للتكرار ومخزن في نظام الإصدارات، دي تشغيلة pipeline مش مشروع. أدلة أكتر عن Salesforce DevOps.
قد إيه من البيانات المفروض تبقى في sandbox معبّاة؟
القدر اللي يغطي كل نوع سجل وكل مسار وكل حالة حدية، وده عادةً بضع مئات من السجلات المترابطة. الحجم بيهم بس لما تختبر الأداء.
ما ينفعش أستخدم Data Loader وخلاص؟
ينفع لمجموعة صغيرة. بس ترتيب التحميل وإعادة ربط المعرفات والإخفاء كلها هتبقى مسؤوليتك، وهتعيدها بإيدك بعد كل تحديث.
هل تحديث الـ sandbox بيحافظ على البيانات المعبّاة؟
لأ. التحديث بيستبدل الـ sandbox، فأي حاجة عبيتها بتضيع. اعتبر إعادة التعبئة خطوة ثابتة بعد كل تحديث.
بدون التزام.