在FTPC的Process Designer中可以创建Filter对象,Filter对象用于检索满足筛选条件的对象子集(特定类型的对象)。Filter条件的作用类似于SQL查询中的WHERE子句。
Filter对象和使用API创建的Filter不同,在Process Designer创建的Filter对象会持久化到数据库的DS_OBJECT,DS_OBJECT_BLOB表中,这样使Filter可以重复使用。
Filter包括以下操作类型,具体可以使用操作类型选项会根据选择列值类型而不同。
-
CONTAINING: 查询包含指定值的内容。
-
ENDSWITH: 查询以指定值结尾的内容。
-
EQUAL_TO: 查询内容对象列中的值与指定值完全匹配的对象。
-
GREATER_THAN: 查询大于指定值的数值内容。
-
GREATER_THAN_EQUAL_TO: 查询大于或等于指定值的数值内容。
-
IN: 查询包含用户定义集中指定内容的条目。如果您选择IN,那么在value字段中,必须指定要搜索的内容。如果要搜索多个项,则必须在每个项之后按Enter键。
-
LESS_THAN: 查询小于指定值的数值内容。
-
LESS_THAN_EQUAL_TO: 查询小于或等于指定值的数值内容。
-
LIKE: 查询与value字段中输入的字符串类似的字符串。使用通配符展开搜索。
-
NOT_EQUAL_TO: 查询不匹配指定值的内容。
-
STARTSWITH: 查询以指定值开头的内容。
SubFilter
创建了Filter之后,可能需要通过增加SubFilter来修改它,SubFilter是附加在Filter上的约束,允许用户对Fiter进行调整,使其只返回非常特定的结果。可以将多个SubFilter添加到单个Filter中。
在SQL中SubFilter实际是通过IN操作类型实现。
由于在创建SubFilter时FTPC未做Filter与SubFilter之间关系的控制,因此创建SubFilter需要对FTPC数据字典(即对象表结构)比较了解才能更好的建立Filter与SubFilter之间有意义的关系。
例如:
在Process Designer中创建以下Filter
其中CarrieFilter 的SubFilter配置如下:
执行该UnitFilter,实际生成的SQL语句如下,Filter,SubFilter构建的即为WHERE语句后面的部分。
SELECT UNIT.unit_key,
UNIT.serial_number,
UNIT.site_num,
UNIT.container_key,
UNIT.container_name,
UNIT.container_type,
UNIT.container_sub_type,
······此处省略部分Unit相关字段
TRACKED_OBJECT_STATUS.wc_key,
TRACKED_OBJECT_STATUS.wc_name,
TRACKED_OBJECT_STATUS.equip_key,
TRACKED_OBJECT_STATUS.equip_name,
LOT.lot_name,
WORK_ORDER.order_number,
WORK_ORDER_ITEMS.order_item
FROM UNIT,
TRACKED_OBJECT_STATUS,
LOT,
WORK_ORDER,
WORK_ORDER_ITEMS
WHERE ( ( ( ( UNIT.serial_number LIKE N'PL%' )
AND ( UNIT.container_name IN
(SELECT CARRIER.carrier_key
FROM CARRIER
WHERE ( ( ( CARRIER.carrier=N'TestPack20' ) ) )
) ) ) ) )
AND UNIT.tobj_status_key=TRACKED_OBJECT_STATUS.tobj_status_key
AND UNIT.lot_key =LOT.lot_key(+)
AND UNIT.order_key =WORK_ORDER.order_key(+)
AND UNIT.order_item_key =WORK_ORDER_ITEMS.order_item_key(+)
ORDER BY UNIT.serial_number ASC