كيف اقدر اعمل مهمة مجدولة تقوم بارسال تقرير على البريد الخاص بكل مستخدم على النظام وايضا يتم تصفية التقرير على العميل المرتبط بالمستخدم حيث ......

Viewed 19

كيف اقدر اعمل مهمة مجدولة تقوم بارسال تقرير على البريد الخاص بكل مستخدم على النظام وايضا يتم تصفية التقرير على العميل المرتبط بالمستخدم حيث ان التقرير به من عميل الى عميل فكيف اجعل التصفية تكون على العميل المرتبط بالمستخدم ؟ وايضا لو امكن كيف اجعل التقرير لا يرسل لو كان العميل المرتبط بهذا المستخدم لا يوجد له نتايج في التقرير ؟

1 Answers

يمكن تنفيذ هذا الطلب باستخدام نوع المهمة «تقرير ذو مدخلات (بريد)» / Parameterized Report (Email). هذا النوع يجمع أولاً مجموعة من صفوف المدخلات من استعلام SQL، ثم يشغّل التقرير مرة واحدة لكل صف، ويمكن أن يحمل كل صف قيم مدخلات مختلفة ويُرسَل إلى مستلم مختلف — وهو بالضبط ما تحتاجه: صف لكل مستخدم، يحمل عميله المرتبط ويُرسَل إلى بريده.

للاطّلاع على الشرح الكامل لهذا النوع وبقية إعدادات المهام المجدولة، راجع صفحة المهام المجدولة (Task Scheduler) في دليل نماسوفت.

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

  1. في المهمة المجدولة اختر نوع الجدولة = تقرير ذو مدخلات (بريد).
  2. اختر تعريف التقرير المطلوب في حقل التقرير.
  3. ضع الاستعلام في حقل الاستعلام (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) لاختبارها فوراً دون انتظار الموعد المجدول.