آلية تقييد تعديل الحقول بناءً على الموافقة في النظام (Workflow Approval for Field Editing)

Viewed 34

لدي حقل (Description) داخل شاشة ‘ملحوظة مفصلة’ في النظام، وأرغب في تطبيق آلية تحكم بحيث إذا تم اختيار قيمة معينة داخل هذا الحقل، لا يمكن تعديلها لاحقًا إلا بعد الحصول على موافقة من مستخدم محدد مسبقًا.
قيم الحقل (مقبول - مرفوض- مؤجل ) اريد عند اختيار قيمة مقبول ان لن يتم تغير قيمة الحقل الا بموافقة
فما أفضل طريقة لتنفيذ هذا السيناريو باستخدام
بحيث يتم

منع التعديل مباشرة على الحقل عند اختيار قيمة محددة
إرسال طلب موافقة تلقائي عند محاولة التغيير
السماح بالتعديل فقط بعد اعتماد المستخدم المسؤول؟

1 Answers

نعم، هذا السيناريو مدعوم بالكامل في نَما عن طريق ملف تعريف موافقة (Approval Definition)، ولا يحتاج لأي برمجة. الفكرة أن تعريف الموافقة هو الذي يعترض عملية الحفظ ويوقفها حتى يعتمدها المسؤول، والمفتاح الذي يجعل الموافقة تُطلب فقط في الحالة التي تريدها بالضبط (أي عند محاولة تغيير قيمة كانت «مقبول» مسبقًا) هو خاصية «تطبيق عند التوافق مع الاستعلام» (Apply When Query) داخل تعريف الموافقة.

خطوات الإعداد

١. أنشئ ملف تعريف موافقة جديد، واجعل نوع الكيان هو الشاشة المطلوبة (ملحوظة مفصلة).

٢. فعّل خيار «مع التعديل» حتى تعمل الموافقة عند تعديل السجلات المحفوظة (وليس فقط عند الإضافة).

٣. في خانة «تطبيق عند التوافق مع الاستعلام» ضع الاستعلام التالي:

select case when {oldData.description1} = N'مقبول'
            and coalesce({oldData.description1}, '') <> {description1}
       then 1 else 0 end

هذا الاستعلام هو جوهر الحل:

  • {oldData.description1} تعني القيمة المحفوظة سابقًا في الحقل، و {description1} تعني القيمة الجديدة التي يحاول المستخدم حفظها.
  • فيُرجِع الاستعلام 1 (أي «تُطلب الموافقة») فقط عندما تكون القيمة القديمة «مقبول» و القيمة الجديدة مختلفة عنها — أي عند محاولة تغيير قيمة سبق اعتمادها كـ«مقبول».
  • في كل الحالات الأخرى يُرجِع 0، فيُحفظ التعديل مباشرة بدون أي موافقة (مثلًا تعيين القيمة لأول مرة، أو تعديلها وهي «مرفوض» أو «مؤجل»).

٤. عرّف خطوات الموافقة وحدّد المستخدم/الموظف المسؤول الذي يجب أن يعتمد التغيير (وكذلك موظف الـ Fallback الإلزامي).

٥. اترك خيار «السماح بالتعديل أثناء انتظار الموافقة» غير مفعّل، حتى يبقى السجل مجمّدًا فعليًا إلى أن يُعتمد التغيير.

كيف يعمل بعد الإعداد

  • عند محاولة المستخدم تغيير قيمة كانت «مقبول» وحفظ السجل، يعترض النظام عملية الحفظ تلقائيًا ويفتح حالة موافقة ويُرسل تنبيهًا للمسؤول.
  • لا تُطبَّق القيمة الجديدة على السجل إلا بعد اعتماد المسؤول؛ وإذا رفض الطلب يُلغى التعديل ويحتفظ الحقل بقيمته «مقبول» السابقة.
  • أي تعديل لا ينطبق عليه شرط الاستعلام يُحفظ مباشرة دون أي موافقة.

ملاحظة (الحقول الحرجة): يوجد أيضًا جدول «عندما تتغير الحقول الآتية» (Critical Fields) داخل تعريف الموافقة. إضافة حقل إليه تجعل الموافقة تُطلب عند تغيّر هذا الحقل بغضّ النظر عن قيمته القديمة أو الجديدة، أي أنه يتحقق فقط من «هل تغيّر الحقل؟» دون التمييز بين القيم. لذلك لا يكفي وحده لهذا السيناريو الذي يشترط أن تكون القيمة السابقة «مقبول» تحديدًا؛ والحل الدقيق هنا هو استعلام «تطبيق عند التوافق مع الاستعلام» الموضّح أعلاه. يمكنك استخدام الحقول الحرجة إذا كان مطلوبًا فقط «امنع تغيير هذا الحقل أيًا كانت قيمته إلا بموافقة».