Sync Server 管理手冊


定期抄寫層次、群組層次或使用者層次的水平過濾

定期抄寫層次、群組層次或使用者層次的水平過濾, 使用 SQL 子句來從來源資料來源選取資料。SQL 子句的內容是由 DB2 DataPropagator 定期抄寫之進階定期抄寫定義筆記本的「列」頁面,以及 JDBC 定期抄寫之進階定期抄寫方式筆記本的「列」頁面所控制。若要開啟這些筆記本的任一者,請:

  1. 建立或編輯 JDBC 定期抄寫或 DataPropagator 定期抄寫。
  2. 按一下定義定期抄寫。即會開啟「定義定期抄寫方式」視窗。
  3. 按一下進階。若為 DB2 DataPropagator 定期抄寫,即會開啟「進階定期抄寫定義」筆記本。 若為 JDBC 定期抄寫,即會開啟「進階定期抄寫方式」筆記本。

定義簡單的水平過濾器

在定期抄寫層次過濾資料

在定期抄寫筆記本的列頁面上,在需要全部的橫列方框中鍵入 SQL 子句。整個 SQL 子句必須使用下列格式鍵在一行上:

city='myValue'

請不要將 WHERE 鍵在 SQL 子句開頭處。WHERE 會自動被附加到方框中所鍵的子句。例如,下列子句將只會同步化 city 欄位值等於 Los Angeles 的直欄:

city='Los Angeles, CA 90061'

在群組層次過濾資料

  1. 在定期抄寫筆記本的列頁面上,在個別使用者的橫列子集方框中鍵入 SQL 子句。請不要將 WHERE 鍵在 SQL 子句開頭處。WHERE 會自動被附加到方框中所鍵的子句。請插入參數,而非在 SQL 子句中使用值。 例如,若要根據 city 直欄參數 :fcity. 的值來過濾 VNPERSON 表格,請鍵入:
    city=':fcity.'
    

    其中 :fcity. 是欄位值的參數。

  2. 開啟您想要過濾之群組的「建立或編輯群組」筆記本。 您用過濾器參數所建立的定期抄寫必須被指定到您正在編輯的群組。
  3. 在「群組」筆記本的「資料過濾」頁面上, 按一下新增
  4. 參數名稱欄位中鍵入 :fcity.

    我們建議您利用額外的文字來唯一識別您的參數名稱。例如,以冒號 (:) 來開始參數名稱,並以 (.) 結束它.

  5. 預設值欄位中鍵入一個預設值。例如:
    Los Angeles, CA 90061
    

    可以使用特殊的值。 值 $USERNAME 允許 Sync Server 使用者 ID 被當作參數的值而插入。這可讓您以將特定使用者插入資料來源,並使它們的 Sync Server 使用者 ID 位於特定欄位中的方式來建立橫列。

  6. 按一下確定

每個被指定到此群組的使用者都只會收到來自 VNPERSON 表格,city 欄位值等於 Los Angeles, CA 90061 的列。其他群組會收到整個 VNPERSON 表格,或是 VNPERSON 表格的特定子集,視配置的過濾器而定。

在使用者層次過濾資料

  1. 在「列」頁面上,在個別使用者的橫列子集方框中鍵入 SQL 子句。 請不要將 WHERE 鍵在 SQL 子句開頭處。WHERE 會自動被附加到方框中所鍵的子句。請插入參數,而非在 SQL 子句中使用值。 例如,若要根據 city 直欄參數 :fcity. 的值,以及 id 直欄參數 :fid. 的值來過濾 VNPERSON 表格,請鍵入:
    city=':fcity.' and id=':fid.'
    

    其中 :fcity. 是 city 欄位值的參數,而 :fid. 是 id 欄位值的參數。

  2. 完成並關閉「建立定期抄寫」筆記本。
  3. 開啟您想要過濾之使用者群組的「建立或編輯群組」筆記本。 您用過濾器參數所建立的定期抄寫必須被指定到您正在編輯的群組。
  4. 在「群組」筆記本的「資料過濾」頁面上,按一下新增
  5. 參數名稱欄位中鍵入 :fcity.
  6. 預設值欄位中鍵入一個預設值。例如:
    Los Angeles, CA 90061
    
  7. 按一下確定
  8. 重新按一下新增,新增第二個參數。
  9. 參數名稱欄位中鍵入 :fid.
  10. 按一下確定
  11. 完成並關閉「群組」筆記本。
  12. 開啟您想要過濾之使用者的「建立或編輯使用者」筆記本。使用者必須被指定到具有過濾器參數的群組。
  13. 在「群組」筆記本的「資料過濾」頁面上,選取 :fid. 參數並按一下變更
  14. 使用者置換欄位中鍵入一個值。例如,若要置換此使用者的 :fid. 值並將它設為 900000401,請鍵入:
    900000401
    
  15. 按一下確定

使用者將只會收到具有 city 欄位值 Los Angeles, CA 90061 和 id 欄位值 900000401 的記錄。在 VNPERSON 中有一筆具有此值的記錄。其他被指定到相同群組的使用者,將只會收到來自 VNPERSON 表格,city 欄位值等於 Los Angeles, CA 90061 且 user 欄位值被其資料過濾器所設定的列。其他群組會收到整個 VNPERSON 表格,或是 VNPERSON 表格的特定子集,視配置的過濾器而定。

在群組層次或使用者層次定義複雜的水平過濾器

資料庫及使用者管理中部份狀況需要在個別使用者的橫列子集欄位中定義複雜的 SQL WHERE 子句, 以便限制群組或使用者可以看見的橫列。 當定義過濾器時,您可能會參照到鏡映資料庫中的表格、使用群組或使用者的參數, 或是使用這些方法的組合。 如需建立簡式水平過濾器的基本步驟,請參閱定義簡單的水平過濾器

DB2 Everyplace Sync Server 提供標準 SQL WHERE 施行的子集,以便搭配過濾器使用。如需子集的語法, 請參閱過濾器的語法

下列範例示範您如何參照鏡映資料庫中的其他表格,以及使用參數進行水平過濾。

假設您管理兩個名為 Ziptab 及 Business 的表格,兩個都位於鏡映資料庫中。Ziptab 包含了特定城市的郵遞區號 (請參閱表 4),而 Business 追蹤部份公司以及他們的郵遞區號 (請參閱表 5)。您要加州聖荷西的使用者只能檢視他們城本中的企業。 您建立了一個群組,並將這些使用者指定至該群組。


表 4. Ziptab 表格

City Zipcode
San Jose 95141
San Jose 95123
Los Angeles 93002


表 5. Business 表格

Business Zip
IBM 95141
My Company 95123
Your Company 93002
Another Company 94888

您會在「列」頁面的個別使用者的橫列子集欄位中鍵入下列子句:

(Zip) IN (SELECT Zipcode FROM Ziptab WHERE City = ':fcity.')

:fcity. 是 City 欄位值的參數, 您針對該群組將它設為 San Jose

然後完成並關閉「建立定期抄寫」筆記本。因此, 在同步化之後,使用者將只會在他們的裝置上的 Business 表格中看見下列橫列:

表 6. 使用者在他們的裝置上將看到的橫列

Business Zip
IBM 95141
My Company 95123

過濾器的語法

在「行動裝置管理中心 (MDAC)」中建立定期抄寫方式時,可使用類似 SQL WHERE 子句的子句來過濾個別使用者。請將子句輸入於 DataPropagator 定期抄寫之「進階定期抄寫方式」筆記本或 JDBC 定期抄寫之「進階定期抄寫方式」筆記本的個別使用者的橫列子集欄位中。

使用語法圖的限制如下。這些限制包括:

語法

過濾器
 
   .-邏輯運算子 AND 或 OR-.
   V                      |
>>---| 維度 |-------------+------------------------------------><
 
維度
 
|--+-column-name--IN--| 次選擇 |-----------+--------------------|
   |    .-,-----------.                    |
   |    V             |                    |
   +-(----column-name-+--)--IN--| 次選擇 |-+
   '-| simpleUnaryFilter |-----------------'
 
次選擇
 
|--(--| selectClause |--| fromClause |--+-----------------+----->
                                        '-| whereClause |-'
 
>--)------------------------------------------------------------|
 
selectClause
 
           .-,-----------.
           V             |
|--SELECT----column-name-+--------------------------------------|
 
fromClause
 
|--FROM--| tableReference |-------------------------------------|
 
whereClause
 
|--WHERE--| simpleFilter |--------------------------------------|
 
tableReference
 
|--+----------------+--table-name-------------------------------|
   '-schema-name--.-'
 
simpleFilter
 
   .-邏輯運算子 AND 或 OR--.
   V                       |
|----| simpleUnaryFilter |-+------------------------------------|
 
simpleUnaryFilter
 
|--+-NOT--| simpleUnaryFilter |-+-------------------------------|
   +-(--| simpleFilter |--)-----+
   '-| simplePredicate |--------'
 
simplePredicate
 
|--| 表示式 |--| simplePredicateEnd |---------------------------|
 
表示式
 
|--+-| 函數 |----+----------------------------------------------|
   +-column-name-+
   '-| 常數 |----'
 
函數
 
|--+----------------+--function-name--(--+----------------+----->
   '-schema-name--.-'                    | .-,----------. |
                                         | V            | |
                                         '---| 表示式 |-+-'
 
>--)------------------------------------------------------------|
 
simplePredicateEnd
 
|--+-+-| 運算子 |-+--| 表示式 |--------------------+------------|
   | '-IN---------'                                |
   +-IS--+-----+--NULL-----------------------------+
   |     '-NOT-'                                   |
   '-+-----+--BETWEEN--| 表示式 |--AND--| 表示式 |-'
     '-NOT-'
 
運算子
 
|--+-=----+-----------------------------------------------------|
   +-<>---+
   +->----+
   +-<----+
   +->=---+
   +-<=---+
   +-!=---+
   +-!<---+
   +-!>---+
   '-LIKE-'
 
 

說明

運算子
您可以使用下列任何運算子:

=
Equal to.

<>
Not equal to.

<
Less than.

>
Greater than.

<=
Less than or equal to.

!>
Less than or equal to.

>=
Greater than or equal to.

!<
Greater than or equal to.

LIKE
符合一個字串。使用單位元組字集 (SBCS) 底線來參照一個 SBCS 字元。使用雙位元組字集 (DBCS) 底線來參照一個 DBCS 字元。 例如,條件 WHERE PART_NUMBER LIKE '_0' (此處的底線指代 SBCS 字元) 會返回所有以 0 結尾的 2 位數產品編號 (例如,20、30 及 40)。使用百分比 (SBCS 或 DBCS) 來參照零或多個 SBCS 或 DBCS 字元的字串。例如,條件 WHERE DEPT_NUMBER LIKE '2%' 會返回所有以 2 開頭的部門編號 (例如,20、27 或 234)。


[ 頁面頂端 | 前一頁 | 下一頁 | 目錄 | 索引 ]