قيم مصفوفة التصفية كعروض
عادةً ما تعمل مصفوفة التصفية والأدوات المختلفة معًا بسلاسة تامة. إذا قمنا بتنشيط خانة الاختيار "تطبيق استعلام مصفوفة التصفية"، يتم تطبيق عوامل التصفية من مصفوفة التصفية تلقائيًا على استعلام البحث، وبالتالي تتم تصفية البيانات من استعلام البيانات وفقًا لذلك.
ولكن في بعض الأحيان يكون من المفيد (على سبيل المثال لأسباب تتعلق بالأداء أو لتمريرها إلى إجراء مخزّن) استخدام قيم مصفوفة التصفية المحددة في استعلام البيانات مباشرةً.
أولاً نلقي نظرة على كيفية عمل المرشح التلقائي تحت الغطاء.
نحصل على بيانات الموظف من استعلام بيانات يسمى 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'
وهو أمر غير صحيح أبدًا ولا يُرجع أي صفوف أبدًا.