قيم مصفوفة التصفية كعروض

عادةً ما تعمل مصفوفة التصفية والأدوات المختلفة معًا بسلاسة تامة. إذا قمنا بتنشيط خانة الاختيار "تطبيق استعلام مصفوفة التصفية"، يتم تطبيق عوامل التصفية من مصفوفة التصفية تلقائيًا على استعلام البحث، وبالتالي تتم تصفية البيانات من استعلام البيانات وفقًا لذلك.

ولكن في بعض الأحيان يكون من المفيد (على سبيل المثال لأسباب تتعلق بالأداء أو لتمريرها إلى إجراء مخزّن) استخدام قيم مصفوفة التصفية المحددة في استعلام البيانات مباشرةً.

أولاً نلقي نظرة على كيفية عمل المرشح التلقائي تحت الغطاء.

نحصل على بيانات الموظف من استعلام بيانات يسمى employees. علاوة على ذلك لدينا مصفوفة تصفية لتصفية الجدول على department. نستخدم وظيفة البحث التلقائي لمصفوفة التصفية التلقائية باستخدام خانة الاختيار "تطبيق استعلام مصفوفة التصفية".

استعلام البيانات نفسه عبارة عن تحديد بسيط للغاية على الجدول mitarbeiter.

SELECT * from mitarbeiter

بمجرد أن نبدأ في تحديد القيم من جدول التصفية، تطلب لوحة المعلومات البيانات من خدمة الويب باستخدام طلب select. تقوم بتحويل القيم المحددة من مصفوفة التصفية إلى معلمة عنوان URL department department=IN(Development,Management) . يؤدي هذا إلى أن تقوم خدمة الويب بإرجاع الصفوف التي تحتوي على قسم "التطوير" أو "الإدارة" فقط.

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

بما أننا نعرف الآن كيف تعمل آلية التصفية التلقائية، يمكننا البدء في استخدام قيم مصفوفة التصفية كمعلمة استعلام بيانات. للقيام بذلك، علينا توسيع استعلام البيانات قليلاً.

SELECT 
  * 
 FROM 
   mitarbeiter
 WHERE
   ${departmentFilter} = '' OR
   ${departmentFilter}::text IS NULL OR
   department = ANY (string_to_array(${departmentFilter}, ','))

نحدد معلمة استعلام بيانات تسمى departmentFilter. في وقت لاحق، سنقوم بتمرير التحديد من مصفوفة التصفية التي يتم تحويلها بعد ذلك إلى مصفوفة. باستخدام المشغل ANY نقوم بالتصفية للقيم الموجودة في المصفوفة. في حالة عدم وجود قيم مختارة نحصل على سلسلة فارغة أو NULL ولا نطبق departmentFilter على الإطلاق (باستخدام المقارنة مع سلسلة فارغة / NULL و OR).

علينا أيضًا إضافة المعلمة departmentFilter=${filterMatrix.department} إلى استعلام البحث في الجدول. وقد نقوم أيضًا بإزالة خانة الاختيار "تطبيق استعلام مصفوفة البحث" إذا كنا لا نريد تطبيق عوامل تصفية أخرى.

يُرجى ملاحظة أننا نستخدم departmentFilter كاسم المعلمة بدلاً من ببساطة department. سيؤدي استخدام الأخير إلى تضارب في الاسم مع العمود department. كما تعلمنا من قبل، تطبق خدمة الويب تلقائيًا عوامل التصفية للمعلمات التي تجد عمودًا لها. ومن ثم فإنها ستعمل على سبيل المثال على تصفية البيانات لـ department = 'Development,Management' وهو أمر غير صحيح أبدًا ولا يُرجع أي صفوف أبدًا.