検索

目次
casso127jpjp
目次
LDAP ディレクトリおよび ODBC ディレクトリを検索できます。クラス SmDmsOrganization 内の search... メソッドのいずれかを使用して 組織を検索します。
以下のオブジェクトを使用して検索を定義します。
  • 検索開始点、取得するレコードの最大数、および検索フィルタなどの検索パラメータを設定する SmDmsSearch。以下のセクションでは、このオブジェクトの使用について説明します。
  • オプションの並べ替えおよびページングの設定を定義できる SmDmsCursor。
ディレクトリを検索する場合に使用する検索パラメータを指定できます。検索パラメータは以下の 2 回指定できます。
  • 検索オブジェクトを作成するとき
  • 検索オブジェクトを作成した後
一方または両方のオプションを使用できます。これらは相互に排他的ではありません。
検索オブジェクトを作成する場合に検索パラメータを設定
検索オブジェクトを作成する場合に検索パラメータを設定するには、1 つ以上の検索パラメータ名を SmDmsSearch クラスのコンストラクタに渡します。
たとえば scope など、検索オブジェクトの作成中に指定できない検索パラメータがいくつかあります。SmDmsSearch クラスのコンストラクタは以下の検索パラメータのみを受け入れます。
  • フィルタ
  • root
  • propertyNames
  • maxItems
コンストラクタに検索パラメータを渡すことなしに SmDmsSearch オブジェクトを作成できます。
検索オブジェクトの作成後に検索パラメータを設定
検索オブジェクトが作成された後、SmDmsSearch クラス内で set... メソッドを使用して 以下を実行できます。
  • 追加の検索パラメータの設定。
  • 検索オブジェクトが作成された場合に設定する検索パラメータのリセット。
set... メソッドを使用することで、以下の表に示されるパラメータのいずれかを設定またはリセットできます。
パラメータ
デフォルト値
set メソッド
定義
classId
不明(まだ設定されない)
setClassId()
クラス識別子。
フィルタ
" "
setFilter()
検索フィルタ、または検索する文字列。
検索オブジェクトが作成されるときにも設定できます。
maxItems
50
setMaxItems()
一度に表示する結果セット項目の最大数。
検索オブジェクトが作成されるときにも設定できます。
nMaxResults
-1
setMaxResults()
結果セット用の項目の最大数。
たとえば、nMaxResults が 500 であるが、検索条件に 750 項目が一致する場合、最初の 500 の一致のみが検索から返されます。
nextItem
-1
setNextItem()
次回の前方向の検索で開始する項目。たとえば、以下のようになります。
nextItem += maxItems
previousItem
-1
setPreviousItem()
次回の後方向の検索で開始する項目。たとえば、以下のようになります。
previousItem-=maxItems
propertyNames
Null
setPropertyNames()
検索から返す必要のあるプロパティ。
検索オブジェクトが作成されるときにも設定できます。
root
" "
setRoot()
検索が開始するディレクトリ エントリ。
検索オブジェクトが作成されるときにも設定できます。
LDAP 検索に対してのみ有効です。
範囲
なし
setScope()
検索されるレベル。
LDAP 検索のみが対象です。
タイム アウト
-1
setTimeout()
秒単位の検索の最大の期間。
検索フィルタの設定
検索フィルタは、検索で取得するアイテムを定義します。SmDmsSearch コンストラクタ、または SmDmsSearch メソッド setFilter() を使用して検索フィルタを設定できます。
検索フィルタは、LDAP および ODBC ディレクトリに対して異なった方法で説明されます。
LDAP ディレクトリに対する検索フィルタの設定
LDAP ディレクトリで、SmDmsSearch コンストラクタまたは setFilter() メソッドの
filter
パラメータ内の完全な LDAP 検索フィルタを提供します。たとえば、グループに対する組織 swdev.com を検索するために SmDmsSearch コンストラクタに
filter
および
root
を渡す場合、以下を指定します。
SmDmsSearch search = new SmDmsSearch (
"(&(objectclass=organizationalUnit) (ou=groups))",
"o=swdev.com");
ODBC ディレクトリに対する検索フィルタの設定
ODBC ディレクトリの検索は SQL クエリによって実行されます。DMS API は SQL SELECT ステートメントをサポートします。
検索フィルタで提供する情報は、検索が並べ替えおよびページング操作を提供するのに SmDmsCursor オブジェクトを使用するかどうかに依存しています。
  • SmDmsCursor オブジェクトを検索メソッドに渡さない ODBC 検索では、検索フィルタ内に完全定義の SQL SELECT ステートメントを使用します。
  • SmDmsCursor オブジェクトを検索メソッドに渡す ODBC 検索では、検索フィルタに、FROM および WHERE 節のみから構成される部分的な SQL SELECT ステートメントを使用します。
SmDmsCursor オブジェクトを検索メソッドへ渡す ODBC データベース検索では、DMS API はさまざまなソースからの完全な SQL SELECT ステートメントを以下のように組み立てます。
  • FROM および WHERE 節は、SmDmsSearch コンストラクタまたは setFilter() メソッドの
    filter
    パラメータから取得されます。
  • クエリの SELECT
    の部分は、以下のパラメータのいずれかで指定された属性から取得されます。
    • setPropertyNames() の
      propertyNames
      パラメータ。これらの属性は、SmDmsSearch オブジェクトが SmDmsOrganization 内の検索メソッドのいずれかに渡される場合に使用されます。
    • getGroups() または getMembers() メソッドの
      attrNames
      パラメータ。
  • ORDER BY
    キーワード
    部分は、SmDmsCursor コンストラクタの
    sort
    パラメータに指定する属性の順序から取得されます。
以下のコード フラグメントを考慮します。
String DIR_ROOT = "root";
String SRCH_FILTER ="from SmGroup";
SmDmsSearch search = new SmDmsSearch(SRCH_FILTER);
String[] prop = {"Name", "'Group' as Class"};
search.setPropertyNames(prop);
Vector SortOrder = new Vector(); 
SortOrder.add("uid");
SmDmsCursor cursor = new SmDmsCursor(SortOrder,blockSize,false,true);
DMS API は、以下の SQL ステートメントを構築するために前の例の情報を使用します。
SELECT Name, 'Group' AS Class FROM SmGroup ORDER BY uid ASC
コード ソース
SQL ステートメントの部分
SmDmsSearch コンストラクタの SRCH_FILTER パラメータ
from SmGroup
SmDmsCursor コンストラクタの
SortOrder
パラメータ
order by uid asc
setPropertyNames() の
prop
パラメータ
select Name、'Group' as Class
組織の検索
DMS API で、検索は組織オブジェクト上で実行されます。
組織を検索するには以下を実行します。
  1. 検索オブジェクトを作成します。この検索オブジェクトは検索パラメータを保持します。
    たとえば、以下の SmDmsSearch コンストラクタの呼び出しは、グループを検索するための検索オブジェクトを作成します。
    root
    パラメータは、o=swdev.org の開始点を指定します。
    SmDmsSearch mySearch = new SmDmsSearch (
    "(&(objectclass=organizationalUnit) (ou=groups))",
    "o=swdev.org");
    注:
    ルートとは、
    CA Single Sign-on
    ユーザ ディレクトリの中で検索する部分の一番上のレベルのことです。必ずしもディレクトリ構造全体のトップ レベルではありません。
    SmDmsSearch クラスの set... メソッドを使用して、その他の検索パラメータを設定します。次に例を示します。
    mySearch.setScope(2);
  2. オプションで、SmDmsCursor オブジェクト内で並べ替えおよびページングの設定を定義します。
  3. 検索したい組織上のクラス SmDmsOrganization で search() メソッドを呼び出します。たとえば、以下のようにします。
    result = targetOrg.search (mySearch, 1);
    以下の表で示されるように、search() メソッドの 2 番目のパラメータは検索する方向を示しています。
方向
整数値
リセット
0
前方
1
Back
2
Refresh
3
  1. 検索から返される項目を取得するには、検索オブジェクト上で getResults() を呼び出します。たとえば、以下のようにします。
    Vector mySearchResults = search.getResults();
    結果ベクターの最初の要素には SmDmsSearchResultParams オブジェクト内の検索パラメータが含まれます。残りの要素は SmDmsObject オブジェクトです。オブジェクト タイプを区別するには、各オブジェクトの
    classId
    属性が setClassId() メソッドによって設定されます。たとえば、
    classId
    が DMSOBJECT_CLASS_USER である場合、オブジェクトはユーザです。classId が DMSOBJECT_CLASS_GROUP である場合、オブジェクトはグループです。
検索の例
以下の例は、search.set... メソッドを通して検索パラメータ セットを使用して、組織を検索します。前方向検索の結果はベクター
vsearch
に割り当てられ、検索パラメータと共に出力されます。
SmDmsContext dmsContext = new SmDmsContext();
SmDmsDirectory dmsDir = dmsContext.getDmsDirectory();
SmApiResult result = new SmApiResult();
SmDmsOrganization org = dmsDir.newOrganization (DIR_ROOT);
// Search
SmDmsOrganization test = org.newOrganization("");
SmDmsSearch search = new SmDmsSearch ("(&(objectclass=organizationalUnit) (ou=groups))", "o=swdev.com");
// Define search parameters
search.setScope(2);// Number of levels to search.
search.setNextItem(0);// Initialize forward search start
search.setMaxItems(20);// Max number of items to display
search.setPreviousItem(0);// Initialize back search start
search.setMaxResults(500);// Max items in the result set
result = test.search(search, 1);
Vector vsearch = search.getResults();
System.out.println("Search object vector size " + vsearch.size());
SmDmsSearchResultParams searchParams = (SmDmsSearchResultParams)vsearch.firstElement();
System.out.println("***Search Parameters***");
System.out.println(searchParams.toString());
System.out.println("removed element at 0");
vsearch.removeElementAt(0);
System.out.println("Search object vector size " + vsearch.size());
for (int i=0; i<vsearch.size(); i++)
{
SmDmsObject dmsObj = (SmDmsObject)vsearch.elementAt(i);
System.out.println("***Search**** " + dmsObj);
printObject (dmsObj, result);
}
Hashtable attrs = dmsObj.getAttributes();
Enumeration keys = attrs.keys();
Enumeration values = attrs.elements();
while(values.hasMoreElements() )
以下のコード断片は、SmDmsCursorオブジェクトを通して並べ替えおよびページング機能を設定し、検索を実行します。SmDmsSearch オブジェクト検索用のパラメータは前の例で同様の方法で定義されます。
Vector SortOrder = new Vector();
SortOrder.add("uid");
int blockSize = 20;
SmDmsCursor cursor=new SmDmsCursor(SortOrder,blockSize,false,true);
cursor.setOffset(15);
result = org.search(search, cursor, 1);//Forward search
System.out.println(keys.nextElement() + " = " +values.nextElement() );