古巴比伦乘法_古巴平台中的通用过滤器–类固醇上的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中的通用过滤器示例

产品的CUBA中的通用过滤器示例

我创建了一个演示应用程序 ,该应用程序是上述域模型的实现。 在这里,我们看到了我们商店中可用的产品列表。 在数据表的顶部,您会注意到过滤器部分,该部分可让您定义该表的过滤器。 链接“添加搜索条件”将查看基础实体(在本例中为Product)并显示所有实体。 实际上,不仅显示了实体的直接属性,而且还显示了相关的实体及其属性(以及相关的实体及其属性以及……)。

选择一些可用属性后,表中的过滤器部分将填充相应的条件框。 根据属性类型,定义条件的可能性会有所不同。

这是过滤条件的这种组合的一个示例:

从类别智能手机中选择所有以Apple开头的产品,自2015年2月11日起更改

从类别智能手机中选择所有以Apple开头的产品,自2015年2月11日起更改

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

我现在展示的内容几乎只是CUBA为用户和开发人员提供有关过滤的可能性的表面。 不过,在考虑时,它具有相当多的功能,可以使用户自行进行过滤。

如您所见,乍一看,几乎没有什么可以阻止我作为开发人员让用户决定所需的过滤器可能性,而不必手动实现不同的可能性。

要完成这项工作,我需要做什么?

好的,所以有趣的问题可能是,作为开发人员实施此功能需要花费多少精力。 要查看此内容,您必须查看产品列表的UI定义文件 。 基本上它是这样的:

<filter id="filter" datasource="productsDs"><properties include=".*"/>
</filter>

就是这样 。 实际上不是,因为您必须定义在XML描述符中也可以找到的productsDs数据源定义。

更精确地说,您通常不会自己编写定义。 相反,您将使用CUBA Studio进行管道。

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

古巴比伦乘法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel运行没反应_Excel数据很少文件却很大,问题出在哪里呢?两种方法轻松解决...

经常和Excel打交道的小伙伴可能会有这样的困惑&#xff0c;一个Excel工作簿中的数据明明很少&#xff0c;文件所占的空间却很大。打开这种Excel工作簿后&#xff0c;电脑CPU占用率瞬间飙升&#xff0c;甚至遇见工作簿没有响应的情况出现。遇见这样的工作簿让人窝火&#xff0c;…

java lambda::_基准测试:Java 8 Lambda和流如何使您的代码慢5倍

java lambda::与长期的实现相比&#xff0c;Java 8 lambda和流的性能如何&#xff1f; Lambda表达式和流在Java 8中受到了热烈的欢迎。这些是迄今为止很激动人心的功能&#xff0c;很长一段时间以来&#xff0c;它们就已经应用到Java中了。 新的语言功能使我们可以在代码中采用…

如何在java中实现小数点自增_java编个计算器怎么在加入小数点

展开全部我做的可以运行&#xff0c;你看看吧&#xff01;import java.awt.*;import java.awt.event.*;import java.lang.*;import javax.swing.*;public class Counter extends Frame{//声明三个面板的布局GridLayout gl1,gl2,gl3;Panel p0,p1,p2,p3;JTextField tf1;TextField…

在Java中使用FileChannel和ByteBuffer对文件进行读写

过去&#xff0c;我讨论过RandomAccessFile以及如何将其用于在Java中进行更快的IO&#xff0c;在本Java NIO教程中&#xff0c;我们将了解如何通过使用FileChannel和ByteBuffer来使用读/写数据。 Channel提供了一种从文件读取数据的替代方法&#xff0c;它提供了比InputStream…

tp5防止sql注入mysql_PHP+Mysql防止SQL注入的方法(life)

这篇文章介绍的内容是关于PHPMysql防止SQL注入的方法&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下我的官方群点击此处。方法一&#xff1a;mysql_real_escape_string -- 转义 SQL 语句中使用的字符串中的特殊字符&#xff0…

neo4j 关系属性_Neo4j:特定关系与一般关系+属性

neo4j 关系属性为了在Neo4j查询中获得最佳的遍历速度&#xff0c;我们应该使关系类型尽可能具体 。 让我们看一下几周前我在Skillsmatter上发表的“ 建模建议引擎建模 ”演讲中的一个例子。 我需要决定如何为成员和事件之间的“ RSVP”关系建模。 一个人可以对某个事件表示“…

2008r2配置 iis mysql php_Windows 2008 R2服务器配置文档iis+php+mysql

关闭防火墙关闭防火墙打开桌面远程连接修复系统依赖文件IIS配置添加角色创建一个网站验证iis是否成功删除默认创建的网站添加网站PHP配置安装解压&#xff0c;改名创建一个php.ini&#xff0c;php.ini由php.ini-production改名得到如果输入php -v后出现如下报错解决方法如下(安…

接口入口在什么地方_弱电工程施工图审查要点?有哪些地方需要审核?审核要求是什么?...

前言&#xff1a;弱电工程施工图审核标准是什么呢&#xff1f;需要审核哪些方面呢&#xff1f;有没有可以参考的地方&#xff1f;今天就分享一套弱电系统施工图审核技术要求&#xff0c;可以参考正文&#xff1a;1.设计文件设计文件是否完整(包括设计说明、平面图、系统图(单体…

drill apache_Apache Drill 1.4性能增强的简要概述

drill apache今天&#xff0c;我们很高兴地宣布&#xff0c;MapR发行版中现已提供Apache Drill 1.4。 钻1.4是MAPR生产就绪和支持的版本&#xff0c;可以从下载这里 &#xff0c;找到1.4版本说明这里 。 Drill 1.4以其高度灵活和可扩展的体系结构为基础&#xff0c;带来了多种…

docker java mysql_Docker 搭建 MySQL 服务

安装 Docker请参考我的另一篇文章建立镜像拉取镜像# 拉取最新版本镜像docker pull mysql# 拉取执行版本镜像docker pull mysql:版本号检查拉取是否成功docker images创建数据库容器(不建立数据映射)docker run -d --name mysql --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456…

php cdi_Swing应用程序中的CDI事件将UI和事件处理分离

php cdi在愉快地围绕CDI构建我的代码几年之后&#xff0c;使用它根据众所周知的模式来构造我的代码非常自然。 CDI是一种旨在在Java EE应用程序服务器中使用的依赖项注入机制&#xff0c;这可能被视为不利。 但是&#xff0c;我想证明它可以在Java SE应用程序中使用并且具有巨大…

java关闭窗口函数_2016年将是Java终于拥有窗口函数的那一年!

java关闭窗口函数你没听错。 到目前为止&#xff0c;出色的窗口功能是SQL独有的功能。 甚至复杂的函数式编程语言似乎仍然缺少这种漂亮的功能&#xff08;如果我错了&#xff0c;请纠正我&#xff0c;Haskell伙计们&#xff09;。 我们撰写了许多有关窗口函数的博客文章&#…

jvm gc阻塞时长 占比_jvm进行转义分析需要多长时间? 可能比您想象的要长。

jvm gc阻塞时长 占比这篇文章着眼于转义分析&#xff0c;特别是jvm在运行的程序中执行转义分析需要多长时间。 我做了一些观察&#xff0c;但目前还没有全部解释。 作为介绍&#xff0c;让我们绕道看看jvm -Xcomp中一个鲜为人知且使用更少的标志&#xff08;我们将看到这是一件…

jquery mysql php_jQuery+PHP+Mysql在线拍照和在线浏览照片

本文示例建立在本站helloweba.net两篇文章之上&#xff0c;一篇是用于在线拍照的&#xff1a;JavascriptPHP实现在线拍照功能&#xff0c;另一篇是用于浏览照片的&#xff1a;Fancybox丰富的弹出层效果。如果您对在线拍照和Fancybox不大了解&#xff0c;可以先参照以上两篇文章…

设计散列表实现通讯录查找系统_[源码和文档分享]利用哈希表实现电话号码查询系统...

第一章 需求分析1.1 问题描述设计一个电话号码查询系统&#xff0c;为来访的客⼈提供各种信息查询服务。1.2 基本要求设计每个记录有下列数据项&#xff1a;电话号码、用户名、地址从键盘输入个记录&#xff0c;分别以电话号码和用户名为关键字建立不同散列表存储采用一定的方法…

C++基础(2)

【1】静态全局变量 1.通常情况下&#xff0c;静态全局变量的声明和定义放在源文件中&#xff0c;并且不能使用extern关键字将全局静态变量导出&#xff0c;作用域仅限于定义静态全局变量的文件内部。 2.如果头文件中声明静态全局变量&#xff0c;在声明的同时会被初始化&…

drill apache_使用Apache Drill REST API通过Node构建ASCII仪表盘

drill apacheApache Drill有一个隐藏的瑰宝&#xff1a;易于使用的REST接口。 该API可用于查询&#xff0c;分析和配置Drill引擎。 在此博客文章中&#xff0c;我将解释如何使用Brilled Contrib使用Drill REST API创建ascii仪表板。 ASCII仪表盘如下所示&#xff1a; 先决条…

mysql 8.0用doc修改密码_MYSQL8.0修改密码流程

MYSQL8.0修改密码流程1.以管理员身份打开cmd2.找到mysql 的安装路径bin文件的路径&#xff0c;3.输入net start mysql4.输入mysql -u root -p5.找到my.ini文件6.在my.ini里面的[mysqld]这一行后面添加 skip -grant-tables,保存文件&#xff0c;注意不是[mysql]7.输入mysqld --s…

颜色空间缩减color space reduction

颜色空间缩减公式 //---------------------------------【头文件、命名空间包含部分】-------------------------- // 描述&#xff1a;包含程序所使用的头文件和命名空间 //---------------------------------------------------------------------------------------…

运动基元_发现大量Java基元集合处理

运动基元在阅读博客文章5减少Java垃圾收集开销的技巧时 &#xff0c;我想起了一个名为Trove的小型Java收集库&#xff0c;该库“为Java提供了高速的常规和原始收集”。 我对将Trove应用到允许原语的集合而不是要求集合中的元素成为完整的引用对象的能力特别感兴趣。 我在这篇文…