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

تفشل عملية موافقة أو أتمتة تعتمد على التسلسل الهرمي لأن حقل Manager الخاص بالمستخدم غير معبّأ.

يظهر أثناء: تقديم موافقة وقت التشغيل، غالبًا ضمن تنفيذ اختبارات Apex

المعنى

يظهر خطأ MANAGER_NOT_DEFINED عندما تصل عملية تعتمد على دور المستخدم أو التسلسل الهرمي الإداري، وغالبًا ما تكون خطوة عملية موافقة مُعدَّة للتوجيه إلى مدير المستخدم، إلى سجل User لا يحتوي على قيمة في حقل Manager. لا يستطيع Salesforce توجيه الموافقة، أو إكمال المنطق المعتمد على التسلسل الهرمي الذي أطلقها، دون وجود تلك السلسلة.

تُنشئ scratch orgs والـsandboxes الجديدة عادةً مستخدم المسؤول الافتراضي دون تعيين Manager، وهذا بالضبط سبب ظهور هذا الخطأ بشكل غير متناسب في تشغيلات اختبار CI بدلاً من مؤسسة إنتاج ناضجة تم فيها ملء التسلسل الهرمي بمرور الوقت.

التشخيص

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

تم إنشاء مستخدمي الاختبار أو التزويد بدون مدير
تم إدراج سجلات User التجريبية للاختبار دون تعبئة حقل Manager الذي تحتاجه عملية الموافقة.
تم تعيين حقل Manager بعد أن عملت الأتمتة المعتمدة عليه بالفعل
قام سكربت ترحيل بتحديث حقل Manager الخاص بمستخدم في خطوة لاحقة للعملية التي احتاجته أثناء الإعداد.
عملية الموافقة تصل إلى مستخدم لا يملك مديرًا في السلسلة
تصل خطوة موافقة "توجيه عبر السلسلة الإدارية" إلى مستخدم في أعلى المستوى أو مستخدم أُنشئ حديثًا وحقل Manager الخاص به فارغ.

الحل

  1. عبّئ حقل Manager لكل مستخدم ذي صلة
    تأكد من أن سجلات User التجريبية والمستخدمة في تدفقات الموافقة أو التدفقات المعتمدة على التسلسل الهرمي لديها مدير معيّن.
    User approver = new User(/* ... */);
    insert approver;
    User submitter = new User(ManagerId = approver.Id, /* ... */);
    insert submitter;
  2. رتّب إعداد المستخدمين قبل الأتمتة المعتمدة على التسلسل الهرمي
    خصّص المدراء كخطوة مبكرة، قبل أن تُطلَق أي عملية موافقة أو مُشغِّل يعتمد على التسلسل الهرمي.
  3. أضف موافقًا احتياطيًا لمستخدمي أعلى التسلسل الهرمي
    اضبط عملية الموافقة بموافق افتراضي بحيث يتم توجيه المستخدمين الذين لا يملكون مديرًا إلى جهة ما على أي حال.
من واقع الاستخدام

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

يمكن لإعداد المهام في Serpent تزويد مستخدمي الاختبار بتسلسل هرمي كامل، بحيث لا تفشل اختبارات عملية الموافقة المعتمدة على سلسلة المدراء لسبب لا علاقة له بالكود قيد الاختبار. راجع مكتبة أخطاء نشر Salesforce.

الـ metadata والبيانات في مسار نشر واحد داخل Serpent

الوقاية

أنشئ مصنع مستخدمي اختبار مشترك يضبط دائمًا سلسلة مدراء
مركّز إنشاء مستخدمي User للاختبار في أداة مساعدة واحدة ملائمة لـ@TestSetup تخصص مديرًا افتراضيًا، بحيث يرث كل اختبار جديد تسلسلًا هرميًا صالحًا.
أضف ميزات على غرار Territory Management إلى تعريفات scratch org عند الحاجة
حيثما تعتمد عمليات الموافقة على التسلسل الهرمي للأدوار، ازرع تسلسلًا هرميًا للمستخدمين من مستويين على الأقل في سكربتات إعداد scratch org، وليس مستخدم المسؤول الافتراضي فقط.
اضبط كل خطوة موافقة تعتمد على المدير بموافق احتياطي
تعامل مع غياب الموافق الاحتياطي كثغرة تصميم في عملية الموافقة نفسها، لتلافي وصول الموظفين الجدد أو مستخدمي المستوى الأعلى إلى طريق مسدود.
أسئلة شائعة

أسئلة شائعة حول MANAGER_NOT_DEFINED

هل يحتاج كل إجراء موافقة إلى خطوة تعتمد على المدير حتى يحدث هذا الخطأ؟
فقط الإجراءات المُعدَّة صراحة للتوجيه بناءً على مدير المُقدِّم أو التسلسل الهرمي للدور؛ لا تتأثر إجراءات الموافقة ذات الموافقين الثابتين أو القائمين على قائمة الانتظار.
هل يمكن أن يكون المستخدم مديره الخاص للالتفاف على هذا؟
يمنع Salesforce تعيين مستخدم كمديره المباشر الخاص، لذا هذا ليس حلاً بديلاً صالحًا؛ استخدم بدلًا من ذلك مستخدمًا ثانيًا حقيقيًا أو إعداد موافق افتراضي.
هل ينطبق هذا على الموافقات القائمة على Flow بالإضافة إلى Approval Processes الكلاسيكية؟
نعم. أي أتمتة تحل "مدير المُقدِّم" ديناميكيًا، سواء كانت خطوة Approval Process كلاسيكية أو Flow يستخدم نمط البحث Get Records/Manager، تصطدم بنفس الفجوة الأساسية عندما يكون الحقل فارغًا.

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

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

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

بدون التزام.