页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

应用场景

查询条件主要用于通知表单过滤数据,在以下的场景使用:

...

  第一种查询方式为保持对DWF2.0的继承性而保留,DWF 3.0版本对其进行了扩展,后续的开发中推荐使用脚本查询。

...

编写语法

...

(一)查询条件

  从DWF 2.0继承下来的用于描述条件表达式的方法,写法是:用and开头的若干逻辑表达式,表达式的语法遵循HQL的where子句的语法,每个逻辑表达式可以使用一些预先约定的保留字,用于表示目标对象和上下文的信息。主要的保留字有:2.1.1 实体类查询

(1)实体类查询

obj:表示查出来的目标类对象。例如:希望查询设备类(Asset)的状态属性(assetState)取值为异常的设备对象,可以写过滤条件:

...

代码块
languagesql
--这里$obj代表正在编辑的设备,其唯一代号是系统属性,obj代表工单WorkOrder类,其workOrderState代表状态属性
and obj.workOrderState = '已完工' and obj.assetOid = '$obj.oid' 

...

(2)关联类查询

对于关联查询的目标使用:leftClass.plt_[属性名],rightClass.plt_[属性名],relationClass.plt_[属性名],分别代表左类,右类和关联类的属性查询,DWF会在后台将左类,右类和关联类合并在一起同时执行过滤,以零件到零件的关联Part2Part类的查询为例:

...

代码块
languagesql
--根据当前表单的右对象oid找到关联的左对象oid
and obj.left_oid = $obj.right_oid

...

(3)上下文引用

$user:当前登录用户的信息。有如下一些属性:

  1. userId / oid:用户的系统唯一标识,userId是为了保持兼容性留下的关键字,推荐使用oid。
  2. userName:用户英文名。
  3. token:用户登录系统后的令牌,在实现跳转超链接到其它系统时可以作为单点登录的依据。
  4. userGroups:当前登录用户直属的组织,用法是:$user.userGroups[0].name,获得组织的名称。

...

  • serverIp:当前服务器的ip。
  • 使用$env的典型场景是根据服务器不同而动态变化访问的地址,主要用于超链接控件中表示语义的跳转。

...

(二)脚本查询

由于查询条件是DWF 2.0的产物,使用时存在很多局限性。DWF 3.0版本扩展了条件查询的能力,可以在操作的前处理脚本将查询条件提交给表单引擎。如下所示:

...

脚本查询的好处有两点,脚本查询使用了高级语法,直接将当前系统的几乎所有上下文信息获取并拼装到查询条件。例如:当前编辑对象的名称,可以这样写:

...

(1)实体类查询

对于实体类对象,直接使用:this.obj.[属性名]即可访问到当前表单被操作的对象:

代码块
languagejs
return {
	query:`and obj.id='${this.obj.name}'` //其中JavaScript引擎会自动将${}中的表达式转变为具体的取值
}

...

(2)关联类查询

对于关联查询的目标使用obj.left_[属性名],obj.right_[属性名],obj.relation_[属性名],对于查询条件引用关联类的对象:分成左类,右类和关联类,写法是this.obj.left_[属性名],this.obj.right_[属性名],this.obj.relation_[属性名]的方式进行引用

代码块
query = `and obj.left_oid = '${this.obj.right_oid}'`;

...

(3)上下文引用

如果在脚本中需要获取上下文信息,可以这样写

this.user:代表当前登录用户信息,其内部含有的属性名称与$user一样,包括:oid, userName, token, userGroups等;

...

代码块
languagejs
return {
	query:`and obj.responsiblePersonId='${this.user.oid}'` //其中JavaScript引擎会自动将${}中的表达式转变为具体的取值
}

2.3 其它情况

...

(三)其它情况

(1)原生查询

有时候,在脚本或者快速查询条件里需要使用最直接的SQL查询,那么可以使用如下的方式编写原生的查询语句,使用原生查询的时候,查询语句会先被DWF的访问控制功能检查,以便确信当前登录用户具有访问数据的权限。

...

代码块
languagesql
nativequery: select name, gender                         -- 外部实体类不需要 as
from person                                                           -- 外部实体类表名为ZONENAME
where name = 'White'

...

(2)在表单URL中查询

下面是一些其它的情况:

信息
title表单分享链接中指定查询

使用表单分享时,在分享链接也可以设置查询条件,语法与第一种查询一致,例如:

  http://[ip]:8180/app-web/forms/Product/ProductList?token=Bearer&displayType="create"&query="查询条件"

...