Sync Server 管理指南


预订级别、组级别或用户级别的水平过滤

预订级别、组级别或用户级别的水平过滤使用 SQL 子句来从源数据源选择数据。SQL 子句的内容由高级预订定义笔记本的“行”页(对于 DB2 DataPropagator 预订)和高级复制预订笔记本的“行”页(对于 JDBC 预订)控制。要打开这两个笔记本中的任一个:

  1. 创建或编辑 JDBC 预订或 DataPropagator 预订。
  2. 单击定义预订。“定义复制预订”窗口打开。
  3. 单击高级。对于 DB2 DataPropagator 预订,“高级预订定义”笔记本打开。对于 JDBC 预订,“高级复制预订”笔记本打开。

定义简单水平过滤器

要在预订级别过滤数据

在预订笔记本的行页上,在需要所有行框中输入 SQL 子句。必须使用以下格式在一行上输入整个 SQL 子句:

city='myValue'

不要在 SQL 子句开头输入 WHERE。WHERE 会自动追加至框中输入的子句。例如, 以下子句将仅对城市列值等于 Los Angeles 的列进行同步:

city='Los Angeles, CA 90061'

要在组级别过滤数据

  1. 在预订笔记本的行页上,在个别用户的行子集框中输入 SQL 子句。不要在 SQL 子句开头输入 WHERE。WHERE 会自动追加至框中输入的子句。不要使用 SQL 子句中的值,而是插入参数。例如,要根据表示城市列的参数 :fcity. 的值过滤 VNPERSON 表,输入:
    city=':fcity.'
    

    其中,:fcity. 是表示列值的参数。

  2. 对想要过滤的组打开“创建或编辑组”笔记本。必须将想要使用过滤器参数创建的预订指定给正在编辑的组。
  3. 在“组”笔记本的“数据过滤器”页上,单击添加
  4. 参数名称字段中输入 :fcity.

    我们建议您使用附加的文本来唯一标识参数名。例如,用冒号(:)开始参数名,并以句点(.)结束它。

  5. 缺省值字段中输入缺省值。例如:
    Los Angeles, CA 90061
    

    还可使用特殊值。值 $USERNAME 允许将 Sync Server 用户标识作为参数值插入。 这允许您将特定用户创建的行插入数据源, 并在特定字段中插入他们的 Sync Server 用户标识。

  6. 单击确定

指定给此组的每个用户将仅接收来自 VNPERSON 表且城市列值等于 Los Angeles, CA 90061 的行。其他组将接收整个 VNPERSON 表或 VNPERSON 表的特定子集,这要视配置的过滤器而定。

要在用户级别过滤数据

  1. 在“行”页上,在个别用户的行子集框中输入 SQL 子句。不要在 SQL 子句开头输入 WHERE。WHERE 会自动追加至框中输入的子句。不要使用 SQL 子句中的值,而是插入参数。例如, 要根据表示城市列的参数 :fcity. 的值和表示标识列的参数 :fid. 的值过滤 VNPERSON 表,输入:
    city=':fcity.' and id=':fid.'
    

    其中 :fcity. 是表示城市列值的参数, 而 :fid. 是表示标识列值的参数。

  2. 完成并关闭“创建预订”笔记本。
  3. 对想要过滤的用户组打开“创建或编辑组”笔记本。必须将想要使用过滤器参数创建的预订指定给正在编辑的组。
  4. 在“组”笔记本的“数据过滤器”页上,单击添加
  5. 参数名称字段中输入 :fcity.
  6. 缺省值字段中输入缺省值。例如:
    Los Angeles, CA 90061
    
  7. 单击确定
  8. 再次单击添加来添加第二个参数。
  9. 参数名称字段中输入 :fid.
  10. 单击确定
  11. 完成并关闭“组”笔记本。
  12. 对想要过滤的用户打开“创建或编辑用户”笔记本。必须将该用户指定给带有过滤器参数的组。
  13. 在“组”笔记本的“数据过滤器”页上,选择 :fid. 参数并单击更改
  14. 用户覆盖字段中输入一个值。例如,要对此用户覆盖 :fid. 的值,并将其设置为 900000401,输入:
    900000401
    
  15. 单击确定

该用户将只接收城市列值为 Los Angeles, CA 90061 且标识列值为 900000401 的记录。VNPERSON 中有一个记录具有此值。指定给同一个组的其他用户将只接收 VNPERSON 表中城市列值等于 Los Angeles, CA 90061 且具有用户的数据过滤器设置的用户列值的行。其他组将接收整个 VNPERSON 表或 VNPERSON 表的特定子集,这要视配置的过滤器而定。

在组级别或用户级别定义复杂的水平过滤器

数据库和用户管理方面的一些复杂情况要求在个别用户的行子集字段中定义复杂的 SQL WHERE 子句,以便对一个组或用户可以查看的行进行限制。在定义过滤器时,您可能想引用镜像数据库中的表,对组或用户使用参数,或使用这些方法的组合。有关创建简单水平过滤器的基本步骤,参见定义简单水平过滤器

DB2 Everyplace Sync Server 提供了标准 SQL WHERE 实现的一个子集来与过滤器配合使用。有关子集的语法,参见过滤器的语法

以下示例演示如何引用镜像数据库中的其他表以及对水平过滤使用参数。

假定您管理两个分别名为 Ziptab 和 Business 的表,它们都位于镜像数据库中。Ziptab 包含特定城市的邮政编码(参见表 4),而 Business 跟踪一些公司和它们的邮政编码(参见表 5)。您想要让 San Jose, California 的用户只查看他们所在城市的商业公司。您已创建一个组并将这些用户指定给了该组。


表 4. Ziptab 表

City Zipcode
San Jose 95141
San Jose 95123
Los Angeles 93002

表 5. Business 表

Business Zip
IBM 95141
我的公司 95123
您的公司 93002
另一公司 94888

您将在“行”页的个别用户的行子集字段中输入以下子句:

(Zip) IN (SELECT Zipcode FROM Ziptab WHERE City = ':fcity.')
:fcity. 是 City 列值的参数,对于该组,设置为 San Jose

然后,填写并关闭“创建预订”笔记本。结果是,在同步之后,这些用户在他们的设备上只看到 Business 表中的下列各行:

表 6. 用户在他们的设备上将会看到的行

Business Zip
IBM 95141
我的公司 95123

过滤器的语法

当在“移动设备管理中心”(MDAC)中创建复制预订时,可以在 SQL 中使用类似于 WHERE 子句的子句来为个别用户进行过滤。在“高级复制预订”笔记本(对于 DataPropagator 预订)或“高级复制预订”笔记本(对于 JDBC 预订)的个别用户的行子集字段中输入该子句。

在使用如下的语法图时,有一些限制。这些限制包括:

语法

Filter
 
   .-logic operator AND or OR-.
   V                          |
>>---| dimension |------------+--------------------------------><
 
dimension
 
|--+-column-name--IN--| subselect |-----------+-----------------|
   |    .-,-----------.                       |
   |    V             |                       |
   +-(----column-name-+--)--IN--| subselect |-+
   '-| simpleUnaryFilter |--------------------'
 
subselect
 
|--(--| selectClause |--| fromClause |--+-----------------+----->
                                        '-| whereClause |-'
 
>--)------------------------------------------------------------|
 
selectClause
 
           .-,-----------.
           V             |
|--SELECT----column-name-+--------------------------------------|
 
fromClause
 
|--FROM--| tableReference |-------------------------------------|
 
whereClause
 
|--WHERE--| simpleFilter |--------------------------------------|
 
tableReference
 
|--+----------------+--table-name-------------------------------|
   '-schema-name--.-'
 
simpleFilter
 
   .-logic operator AND or OR-.
   V                          |
|----| simpleUnaryFilter |----+---------------------------------|
 
simpleUnaryFilter
 
|--+-NOT--| simpleUnaryFilter |-+-------------------------------|
   +-(--| simpleFilter |--)-----+
   '-| simplePredicate |--------'
 
simplePredicate
 
|--| expression |--| simplePredicateEnd |-----------------------|
 
expression
 
|--+-| function |-+---------------------------------------------|
   +-column-name--+
   '-| constant |-'
 
function
 
|--+----------------+--function-name--(------------------------->
   '-schema-name--.-'
 
>--+--------------------+--)------------------------------------|
   | .-,--------------. |
   | V                | |
   '---| expression |-+-'
 
simplePredicateEnd
 
|--+-+-| operator |-+--| expression |----------------------+----|
   | '-IN-----------'                                      |
   +-IS--+-----+--NULL-------------------------------------+
   |     '-NOT-'                                           |
   '-+-----+--BETWEEN--| expression |--AND--| expression |-'
     '-NOT-'
 
operator
 
|--+-=----+-----------------------------------------------------|
   +-<>---+
   +->----+
   +-<----+
   +->=---+
   +-<=---+
   +-!=---+
   +-!<---+
   +-!>---+
   '-LIKE-'
 
 

描述

运算符
可以使用下列任何运算符:

=
等于。

<>
不等于。

<
小于。

>
大于。

<=
小于或等于。

!>
小于或等于。

>=
大于或等于。

!<
大于或等于。

LIKE
与一个字符串相匹配。使用单字节字符集(SBCS)下划线字符来引用一个 SBCS 字符。使用双字节字符集(DBCS)下划线字符来引用一个 DBCS 字符。例如,条件 WHERE PART_NUMBER LIKE '_0'(这里,下划线是属于 SBCS)返回所有以 0 结束的两位部件号(例如,20、30 和 40)。使用 %(SBCS 或 DBCS) 来引用具有零个或更多个 SBCS 或 DBCS 字符的字符串。例如,条件 WHERE DEPT_NUMBER LIKE '2%' 返回所有以数字 2 开始的部门号(例如,20、27 或 234)。


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]