CriteriaBuilder是一款可视化的用于构建复杂查询条件的控件,支持各种复杂的逻辑条件组合和排序。
此控件采用了非常人性化的图形界面来表达原本复杂且难懂的查询条件,是的普通的用户也能很容易的理解和操作。相信此控件可以为企业应用的查询界面设计提供一种全新的设计思路。

示例地址:http://bsdn.org/projects/dorado7/deploy/sample-center/com.bstek.dorado.sample.addon.CriteriaBuilder.d

info

此控件依赖于Dorado7 Raphael矢量图控件,见 dorado-raphael-addon

属性说明

dataType

类型: dorado.EntityDataType
用于作为属性列表来源的DataType,此控件会自动根据此DataType中的PropertyDef定义来确定可使用的属性列表。

propertyDiscoveryMode

类型: String
默认值: blacklist
从DataType中提取可用属性的算法模式。具有以下两种取值:

  • blacklist - 黑名单模式。默认把DataType中的所有PropertyDef认为是可用于定义查询的属性,除非当某个PropertyDef的tags属性中包含unfilterable。
  • whitelist - 白名单模式。默认不会把DataType中的任何PropertyDef认为是可用于定义查询的属性,除非当某个PropertyDef的tags属性中包含filterable。

某些场景下,我们可以也需要进一步遍历DataType中某些DataType为dorado.EntityDataTyp}或dorado.AggregationDataType的属性中的子属性,并提取其中的某些子属性作为可用于定义查询的属性。在这种情况下,我们需要在父属性的tags中定义subProp-filterable,以通知Dorado遍历其子属性。

supportsOrders

类型: boolean
默认值: true
是否支持排序条件的定义。

rowHeight

类型: int
默认值: 40
行高。

maxRowHeight

类型: int
默认值: 80
最大行高。

dynaRowHeight

类型: boolean
默认值: true
是否支持动态行高。
即是否允许控件根据容器的实际高度和查询条件的个数来动态的计算出一个合适的行高,以更好的利用屏幕的高度控件。计算出的动态行高的值会在rowHeight和maxRowHeight之间。

marginY

类型: int
默认值: 10
垂直方向上两边的留白距离。

criteria

类型: Object
查询条件。
查询条件是一个具有复杂结构的JSON对象,该JSON对象具有一下两个属性:

  • criterions - {Object[]} 过滤条件数组。过滤条件又可以分为两种:普通过滤条件和联合条件。
  • orders - {Object[]} 排序条件数组。其中的每个过滤条件包含如下的2种子属性:
    • property - {String} 属性名。
    • desc - {boolean} 是否倒叙排序。

普通过滤条件包含如下的4种子属性:

  • property - {String} 属性名。
  • operator - {String} 比较符。可选值包括:like、like*、*like、=、>、>=、<、⇐、<>。
  • type - {String} 值类型,用于指示value属性中的内容究竟代表什么。可选值包括:value(普通值,默认)、property(属性名)、expression(表达式)。
  • value - {Object} 比较值。根据type属性的不同,这里的值可能代表不同的含义。

联合条件包含如下的2种子属性:

  • junction - {String} 联合方式。可选值包括:and(默认)、or。
  • criterions - {Object[]} 子过滤条件数组。

criteria的示例:

{
	criterions: [
		{ property:"author", operator:"like", value:"benny.bao" },
		{ property:"createDate", operator:">=", type:"expression", value:"${util.calculateDate('y-1')}" },
		{
			junction: "or",
			criterions: [
				{ property:"isNew", operator:"=", value:true },
				{ property:"isHot", operator:"=", value:true }
			]
		}
	],
	orders: [
		{ property: "createDate", desc:true }
	]
}
Back to top