古巴比伦乘法

正如我上次承诺的那样,我计划浏览该平台的某些功能,这些功能我认为非常有价值。 所以我将在这里做一些系列。 从明显的用户界面,过滤,安全性到一些高级功能(如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日起更改

根据属性类型,过滤条件可以处于不同的模式。 文本属性可能以给定文本开头包含给定文本,依此类推。 可以使用相应的日期过滤器来过滤日期,例如给定日期之前之后 。 枚举以及多对一关联可以通过下拉列表选择。 这种类型的条件模式是setlist=等。我可以继续描述不同的数据类型及其过滤器模式,但现在我将其保留。 如果您想了解所有可能性,请在此处找到一个不错的文档。

我现在展示的内容几乎只是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过滤器相关推荐

  1. 古巴比伦乘法_古巴:为生产做准备

    古巴比伦乘法 "它可以在我的本地机器上运行!" 如今,它听起来像模因,但是"开发环境与生产环境"的问题仍然存在. 作为开发人员,您应始终牢记,您的应用程序有一天 ...

  2. 古巴平台上的通用过滤器–类固醇上的excel过滤器

    正如我上次承诺的那样,我计划浏览该平台的某些功能,这些功能我认为非常有价值. 所以我将在这里做一些系列. 从明显的用户界面,过滤,安全性到一些高级功能(如Web Portal,可扩展性,审核,动态属性 ...

  3. the sdk seems invalid._直播平台中必不可少的美颜SDK

    随着科技的进步, 直播系统行业快速发展,美颜SDK已经成为直播平台中不可或缺的功能,大部分开发商都会选择在系统中接入美颜SDK.现如今,美颜SDK不仅仅具有磨皮美白的基础美颜功能,还基于人脸识别的技术 ...

  4. html 文件上传_某平台存在多处任意文件上传

    文章来源: EDI安全 01 漏洞标题 某平台存在多处任意文件上传 02 漏洞类型 文件上传 03 漏洞等级 中危 04 漏洞地址 http://xxxx.xxxxx.com/er.app.xxxx/ ...

  5. c++ 二次开发 良田高拍仪_在网页中调用摄像头实现拍照上传 - 高拍仪二次开发...

    来源于  https://blog.csdn.net/weixin_40659738/article/details/78252562 在网页中调用摄像头实现拍照上传 高拍仪二次开发 在一些公共部门的 ...

  6. python数组的乘法_在Python中乘法非常大的2D数组

    我必须在Python中将非常大的2D数组乘以大约100次.每个矩阵由32000×32000元素组成. 我正在使用np.dot(X,Y),但是每次乘法都需要很长时间-在我的代码实例下面: import ...

  7. java 堆栈 对象_在Java中,哪些对象放在堆栈上,哪些放在堆上?

    对于 Java函数中的语句: Xxx xxx = new Xxx() { public Abc abc(final Writer out) { return new SomeFunction(out) ...

  8. java ftp取远程服务器时间_在 Java 中如何获取 FTP 服务器上的文件修改时间

    使用 Apache Commons Net 进行 FTP 编程的时候,可以使用 FTPClient 类的方法来获取和设置 FTP 服务器上特定文件的修改时间: String getModificati ...

  9. java邮件附件下载_从电子邮件中自动下载并保存附件到Excel

    目前,下面列出的代码将从传入的电子邮件中复制正文信息并打开指定的Excel工作表并将内容复制到Excel工作表并关闭它 . 我还想将传入电子邮件中的附件保存到此指定路径:C:\ Users \ lto ...

最新文章

  1. CBA 赛程的笔记 - 北京首钢
  2. photoshop CS5 Dreamweaver CS5序列号及完美破解方法
  3. nginx 缓存时间说明
  4. hough变换检测直线 matlab,求能够运行的用matlab进行hough变换直线检测的程序。急!...
  5. 设置NTFS文件访问权限
  6. NOIP模拟测试7「方程的解·visit」
  7. Centos7下搭建LAMP环境,安装wordpress(不会生产博客,只是一名博客搬运工)(菜鸟)
  8. 前端学习(904):同步任务和异步任务执行区别
  9. java上传ftp_java实现FTP文件上传与文件下载
  10. Java实现非对称加密算法-RSA加解密
  11. webpack5学习与实战-(九)-区分开发和生产环境的配置
  12. SPSS教程—实现多层感知器神经网络
  13. cmd xcopy 拷贝文件夹_如何使用Xcopy复制文件夹及其子文件夹?
  14. 现在进行时和一般现在时的区分_38
  15. IDEA和Eclipse的debug怎么实现?出于好奇心,我越挖越深!
  16. 产品标题什么时候进行优化,提高权重,标题优化的技巧方法
  17. 碧育服务器维护公告,Ubisoft+
  18. JavaEE——SSM框架整合实现学生信息注册案例
  19. Spring Boot 修改tomcat端口
  20. 不花一分钱做个在线的gif合成服务

热门文章

  1. 【模板】一维树状数组
  2. 【二分】递增(luogu 3902)
  3. 小 X 的 AK 计划
  4. Spark入门(六)Spark SQL shell启动方式(元数据存储在mysql)
  5. 关于Unsafe类的一点研究
  6. 关于ByteBuffer使用解释
  7. Hibernate: You have an error in your SQL syntax; check the manual that corresponds to your MySQL
  8. Object.keys方法拿到对象的key值
  9. 建立Vue脚手架的必要性
  10. (归并排序 快排 堆)