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