古巴平台上的通用过滤器–类固醇上的excel过滤器
正如我上次承諾的那樣,我計(jì)劃瀏覽該平臺(tái)的某些功能,這些功能我認(rèn)為非常有價(jià)值。 所以我將在這里做一些系列。 從明顯的用戶(hù)界面,過(guò)濾,安全性到一些高級(jí)功能(如Web Portal,可擴(kuò)展性,審核,動(dòng)態(tài)屬性等)開(kāi)始。
CUBA功能#1 –通用過(guò)濾器
我想在這篇博客文章中介紹通用過(guò)濾器解決方案。 但是在弄清技術(shù)細(xì)節(jié)之前,讓我們開(kāi)始研究此功能解決的基本用例。
用戶(hù)如何獲得實(shí)際需要的數(shù)據(jù)
我們將繼續(xù)使用上次的示例:
具有客戶(hù)-訂單關(guān)系的域示例
基于此實(shí)體模型,讓我們考慮用戶(hù)可能具有的一些可能的過(guò)濾器要求。
首先,在實(shí)體本身及其直接屬性上有某些過(guò)濾器:
- 顯示紐約的所有客戶(hù)
- 顯示2015年的所有訂單
- 顯示價(jià)格最低的所有產(chǎn)品。 350 $
- 顯示處于“已完成”狀態(tài)的所有訂單
接下來(lái),我們基于1:1 / N:1關(guān)聯(lián)進(jìn)行過(guò)濾:
- 列出客戶(hù)“ Mario David”的所有訂單
- 列出居住在達(dá)拉斯的所有客戶(hù)(通過(guò)地址實(shí)體)
- 顯示“筆記本”類(lèi)別中的所有產(chǎn)品
然后,我們有了基于1:N / M:N關(guān)系的過(guò)濾器:
- 列出2015年至少有一個(gè)訂單的所有客戶(hù)
- 列出最多包含五個(gè)訂單項(xiàng)的所有訂單
- 列出所有訂單項(xiàng)的價(jià)格總和大于200 $的訂單
基本上,這是過(guò)濾器要求的類(lèi)別,可以滿(mǎn)足大約80%的用例。
解決這類(lèi)問(wèn)題的程序化方式
我通常處理此類(lèi)要求的方式如下:首先,我將開(kāi)始著手研究用戶(hù)實(shí)際希望通過(guò)此過(guò)濾實(shí)現(xiàn)的目標(biāo)。 通常,它僅用于減少當(dāng)前執(zhí)行的工作流的實(shí)體實(shí)例數(shù)量。 例如,“僅針對(duì)未及時(shí)付款的訂單進(jìn)行過(guò)濾” –在這種情況下,工作流程將類(lèi)似于“發(fā)送過(guò)期通知”。 使用過(guò)濾的另一種方法是,如果結(jié)果是報(bào)告的基礎(chǔ)(本博客文章中未介紹)。
無(wú)論是什么原因,當(dāng)我知道過(guò)濾條件是什么時(shí),對(duì)我來(lái)說(shuō),作為程序員的一個(gè)簡(jiǎn)單解決方案就是立即實(shí)施過(guò)濾條件。 如果我們考慮在Grails中實(shí)現(xiàn),那么我會(huì)在后端想到這樣的東西:
class OrderController {//...Date now = new Date()respond Order.where { dueDate > now }.list(params)//... }這將以簡(jiǎn)化的方式完成這項(xiàng)工作。 在前端,可以使用下拉框或切換按鈕。 另一種可能性是通過(guò)鏈接獲取該數(shù)據(jù),從而將信息保留在其中。
無(wú)論采用哪種實(shí)現(xiàn)方式–整個(gè)解決方案的重點(diǎn)是,作為開(kāi)發(fā)人員,我必須事先了解此過(guò)濾器要求,因?yàn)楸仨氁跃幊谭绞竭M(jìn)行實(shí)施。
這些問(wèn)題的通用解決方案
除了按需直接實(shí)施過(guò)濾器解決方案外,一種更通用的解決方案也很普遍。 在這種情況下,開(kāi)發(fā)人員不預(yù)先知道過(guò)濾器要求,而是讓用戶(hù)決定要搜索/過(guò)濾的內(nèi)容。 為此,必須從屬性的基礎(chǔ)數(shù)據(jù)類(lèi)型推斷出可能的過(guò)濾條件。
可以將此模型視為類(lèi)似于excel 過(guò)濾機(jī)制。 excel根據(jù)當(dāng)前列的數(shù)據(jù)類(lèi)型,提供在這種情況下有意義的過(guò)濾器可能性。 可以將日期過(guò)濾到一定范圍內(nèi),數(shù)字必須大于給定數(shù)字,字符串可以包含某個(gè)子字符串,依此類(lèi)推。 由于Excel并不真正了解實(shí)體和關(guān)系,因此無(wú)法搜索/過(guò)濾關(guān)聯(lián)。 因此,此過(guò)濾器機(jī)制僅在一定程度上有價(jià)值。
CUBA帶來(lái)了什么
因此,CUBA來(lái)到這里,告訴我們,其中有一個(gè)“通用過(guò)濾器”,它使我們可以過(guò)濾大多數(shù)我們想要的子數(shù)據(jù)。 讓我們更深入地了解它。
產(chǎn)品的CUBA中的通用過(guò)濾器示例
我創(chuàng)建了一個(gè)演示應(yīng)用程序 ,該應(yīng)用程序是上述域模型的實(shí)現(xiàn)。 在這里,我們看到了我們商店中可用的產(chǎn)品列表。 在數(shù)據(jù)表的頂部,您會(huì)注意到過(guò)濾器部分,可用于定義該表的過(guò)濾器。 鏈接“添加搜索條件”將查看基礎(chǔ)實(shí)體(在本例中為Product)并顯示所有實(shí)體。 實(shí)際上,不僅顯示了實(shí)體的直接屬性,而且還顯示了相關(guān)實(shí)體及其屬性(以及相關(guān)實(shí)體及其屬性以及……)。
選擇一些可用屬性后,表中的過(guò)濾器部分將填充相應(yīng)的條件框。 根據(jù)屬性類(lèi)型,定義條件的可能性會(huì)有所不同。
這是過(guò)濾條件的這種組合的一個(gè)示例:
從類(lèi)別智能手機(jī)中選擇所有以Apple開(kāi)頭的產(chǎn)品,自2015年2月11日起更改
根據(jù)屬性類(lèi)型,過(guò)濾條件可以處于不同的模式。 文本屬性可能以給定文本開(kāi)頭或包含給定文本,依此類(lèi)推。 可以使用相應(yīng)的日期過(guò)濾器來(lái)過(guò)濾日期,例如在給定日期之前或之后 。 枚舉以及“多對(duì)一”關(guān)聯(lián)可以通過(guò)下拉列表選擇。 這種類(lèi)型的條件模式是set , list , =等。我可以繼續(xù)描述不同的數(shù)據(jù)類(lèi)型及其過(guò)濾器模式,但現(xiàn)在我將其保留。 如果您想了解所有可能性,請(qǐng)?jiān)诖颂幷业揭粋€(gè)不錯(cuò)的文檔。
我現(xiàn)在展示的內(nèi)容幾乎只是CUBA為用戶(hù)和開(kāi)發(fā)人員提供有關(guān)過(guò)濾的可能性的表面。 但是,在考慮時(shí),它具有相當(dāng)多的功能,可以使用戶(hù)自行進(jìn)行過(guò)濾。
如您所見(jiàn),乍看之下,幾乎沒(méi)有什么阻止我(作為開(kāi)發(fā)人員)讓用戶(hù)決定所需的過(guò)濾器可能性,而不必手動(dòng)實(shí)現(xiàn)不同的可能性。
要完成這項(xiàng)工作,我需要做什么?
好的,所以有趣的問(wèn)題可能是,作為開(kāi)發(fā)人員實(shí)施此功能需要付出多少努力。 要查看此內(nèi)容,您必須查看產(chǎn)品列表的UI定義文件 。 基本上它是這樣的:
<filter id="filter" datasource="productsDs"><properties include=".*"/> </filter>就是這樣 。 其實(shí)不是,因?yàn)槟惚仨氉龆xproductsDs數(shù)據(jù)源定義,你會(huì)在找到XML描述為好。
更精確地說(shuō),您通常不會(huì)自己編寫(xiě)定義。 相反,您將使用CUBA Studio進(jìn)行管道。
CUBA Studio顯示帶有可能性的產(chǎn)品實(shí)體以生成屏幕
在這種情況下,您將啟動(dòng)本地Studio安裝(并從示例項(xiàng)目中進(jìn)行g(shù)it clone),打開(kāi)該項(xiàng)目,查看您的產(chǎn)品實(shí)體(如上所述),并告訴它為其生成標(biāo)準(zhǔn)視圖。 在回答了有關(guān)此生成步驟的不同選項(xiàng)的幾個(gè)問(wèn)題之后,它將為該實(shí)體的列表視圖提供確切的XML描述符文件,包括過(guò)濾器的可能性。
真正的重物是什么?
看到這一點(diǎn)之后,我想到了兩件事。 首先,這只是用于特定的過(guò)濾方案。 如何預(yù)定義此過(guò)濾器,以使我的用戶(hù)不必一遍又一遍地自行挑選它們? 第二件事是,通常存在過(guò)濾要求,這些要求超出了所描述的可能性。 CUBA如何解決?
該平臺(tái)提供了針對(duì)這些異議的解決方案。 在本系列的下一部分中,我將對(duì)此進(jìn)行介紹。
翻譯自: https://www.javacodegeeks.com/2015/12/the-generic-filter-in-cuba-platform-excel-filters-on-steroids.html
總結(jié)
以上是生活随笔為你收集整理的古巴平台上的通用过滤器–类固醇上的excel过滤器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ServletRequest start
- 下一篇: 如何检测是否被拉黑(如何检测是否被ddo