يمكن تنفيذ هذا الطلب باستخدام نوع المهمة «تقرير ذو مدخلات (بريد)» / Parameterized Report (Email). هذا النوع يجمع أولاً مجموعة من صفوف المدخلات من استعلام SQL، ثم يشغّل التقرير مرة واحدة لكل صف، ويمكن أن يحمل كل صف قيم مدخلات مختلفة ويُرسَل إلى مستلم مختلف — وهو بالضبط ما تحتاجه: صف لكل مستخدم، يحمل عميله المرتبط ويُرسَل إلى بريده.
للاطّلاع على الشرح الكامل لهذا النوع وبقية إعدادات المهام المجدولة، راجع صفحة المهام المجدولة (Task Scheduler) في دليل نماسوفت.
خطوات الإعداد
- في المهمة المجدولة اختر نوع الجدولة = تقرير ذو مدخلات (بريد).
- اختر تعريف التقرير المطلوب في حقل التقرير.
- ضع الاستعلام في حقل الاستعلام (Query)، واترك حقل حقول الاستعلام (Query Fields) فارغاً حتى تُستخدم أسماء أعمدة الاستعلام كما هي.
الاستعلام
الفكرة أن يُرجِع الاستعلام صفاً واحداً لكل مستخدم، يحتوي على بريد المستخدم وعميله المرتبط:
select
u.email as sendto,
'Customer' as fromCustomer#type,
u.relatedCustomer_id as fromCustomer#id,
'Customer' as toCustomer#type,
u.relatedCustomer_id as toCustomer#id
from NamaUser u
where u.relatedCustomer_id is not null
معنى الأعمدة الخاصة في الاستعلام:
| العمود |
المعنى |
sendto |
بريد إلكتروني صريح يُرسَل إليه هذا الصف — هنا بريد المستخدم نفسه |
fromCustomer#type + fromCustomer#id |
قيمة مرجعية تُملأ بها مُدخلة التقرير المسماة fromCustomer |
toCustomer#type + toCustomer#id |
قيمة مرجعية تُملأ بها مُدخلة التقرير المسماة toCustomer |
ولأن التقرير «من عميل إلى عميل»، نضع نفس العميل في طرفي المدى (fromCustomer و toCustomer) حتى تكون التصفية على عميل واحد فقط — وهو العميل المرتبط بالمستخدم.
ملاحظة: استبدل اسمي المُدخلتين fromCustomer و toCustomer باسمي مُدخلتي التقرير الفعليتين عندك، واستبدل NamaUser و relatedCustomer_id بالجدول والحقل اللذين يربطان المستخدم بالعميل في نظامك.
منع إرسال التقرير عند عدم وجود نتائج
أبسط طريقة لمنع إرسال البريد عندما يخرج التقرير فارغًا لمستخدم معيّن لا تكون في المهمة المجدولة، بل في قالب التقرير (JasperReports) نفسه: اضبط خاصية "When No Data" في القالب على No Pages (بدلًا من "Blank Page" أو قسم "No Data").
عندما لا يجد التقرير أي بيانات للعميل المرتبط بالمستخدم، لن يُنتج أي صفحات، وبالتالي لا يوجد شيء يُرفَق أو يُرسَل — فيُتخطّى ذلك المستخدم تلقائيًا دون إرسال بريد فارغ. وبذلك يبقى الاستعلام بسيطًا (صف لكل مستخدم) ويتكفّل التقرير نفسه بتخطّي المستخدمين الذين لا نتائج لعملائهم.
نصيحة: فعّل خيار سجل التنفيذ (Execution Log) على المهمة أثناء الضبط لتتأكد من أن المهمة تُشغَّل وعدد الرسائل المُرسَلة مطابق لتوقعك، ثم استخدم زر تشغيل الآن (Run Now) لاختبارها فوراً دون انتظار الموعد المجدول.