![]() ![]() ![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
第9章
この章では、exteNd DirectorアプリケーションでSQLベース検索を実装する方法について説明します。
この章では、次のトピックについて説明します。
exteNd DirectorアプリケーションでSQLベース検索を実装する検索コンポーネントを作成できます。exteNd DirectorコンポーネントのgetComponentData()メソッドで次のロジックフローを使用します。
次のように、コンテンツマネージャ委任のインスタンスを生成する
com.sssw.cm.api.EbiContentMgmtDelegate contentMgr = com.sssw.cm.client.EboFactory.getDefaultContentMgmtDelegate();
注記: 委任は、サービスの位置を隠すラッパです。委任モデルは、J2EE Business Delegateパターンに従います。委任の詳細については、『exteNd Directorアプリケーションの開発』のexteNd Directorアプリケーション用のJavaのコード化に関する章を参照してください。
次のように、ドキュメントメタデータクエリオブジェクトのインスタンスを生成します。
com.sssw.cm.api.EbiDocQuery query = (EbiDocQuery) contentMgr.createQuery(EbiDocQuery.DOC_QUERY);
SELECTメソッドをEbiDocQueryオブジェクトで呼び出して、返されるフィールドを選択します。
EbiDocQueryは、com.sssw.cm.api.EbiDocMetaDataQueryからSELECTメソッドを継承します。
WHEREメソッドをEbiDocQueryオブジェクトで呼び出して、検索条件を指定します。
各メソッドは、SQL WHERE副句を表す、com.sssw.fw.api.EbiQueryExpressionオブジェクトを返します。
論理演算子および括弧を使用して用語を結合するメソッドをEbiQueryExpressionで呼び出して、WHERE副句を結合します。
詳細については、検索条件の作成を参照してください。
ORDERBYメソッドをcom.sssw.cm.api.EbiDocMetaDataQueryオブジェクトで呼び出して、ORDER BY句に結果が返される順序を指定します。
findElements()をEbiContentMgmtDelegateオブジェクトで呼び出して、検索を実行します。
findElements()メソッドは、クエリを実行して、EbiDocumentオブジェクトのコレクションを返します。このコレクションには、Step 3でSELECTメソッドを使用して指定したフィールドのみのIDおよびデータが含まれます。そのため、このコレクションのオブジェクトは、CMリポジトリのドキュメントを完全な表現するものではありません。
WHEREメソッドをドキュメントメタデータクエリオブジェクトcom.sssw.cm.api.EbiDocQueryで呼び出して、メタデータの検索条件を指定します。WHEREメソッドは、値とデータを一致させます。このメソッドには、句を否定できるNOTパラメータがあります。
「標準」メタデータでは、目的のプロパティに対応するWHEREメソッドを使用します。たとえば、「著者」がSmithであるドキュメントを検索する場合、whereAuthor()メソッドを使用します。
「カスタム」(拡張)メタデータの場合、カスタムメタデータ検索の条件の定義で説明されているように、whereField*()メソッドを使用します。
WHEREメソッドは、SQL、関係演算子または文字列演算子を使用して値とデータを一致させることができます。これらの演算子は、メタデータでSQLクエリを定義するための汎用インターフェイスである、com.sssw.fw.api.EbiMetaDataQueryで定義されています。
使用できる演算子は次のとおりです。
いくつかのメタデータフィールドでWHERE式を連結する必要がある場合、com.sssw.fw.api.EbiQueryExpressionメソッドを使用してこれらを結合できます。結果をexpression1に割り当てるパターンを示した例をいくつか次に示します。
例 |
パターン |
---|---|
|
ANDを使用した2つの式の結合 |
|
別の式に結合する前に式を括弧で囲む |
|
ORを使用した2つの式の結合 |
カスタム(拡張)メタデータフィールドを検索するときの条件を定義するには、com.sssw.cm.api.EbiDocQueryで定義されたwhereField*()メソッドを使用します。
実行する手順は、次のとおりです。
IDか名前により、目的のフィールドを識別する式を構築します。
対象 |
使用するメソッド |
---|---|
ID |
whereFieldID*()メソッド |
Name |
whereFieldName*()メソッド |
andExpression()メソッドおよびparenthesize()メソッドを使用して作成したWHERE式を結合します。
結合した式は、Step 1で識別したフィールドおよびStep 2で指定した値に検索を制限します。
ヒント: 別のフィールドを検索するには、同じ方法で、フィールドIDと値式の別のペ アを設定し、結果をWHERE句の残りと結合します。
次の例は、標準ドキュメントメタデータでSQLベース検索を実行する方法を示します。この例では、executeDocMetaSearch()という名前のメソッドが、次の検索条件を満たすタイプのドキュメントMovie Reviewを検出します。
public void executeDocMetaSearch(EbiContentMgmtDelegate cmgr, EbiContext context, String mrDocTypeID, String yorFieldID) throws EboUnrecoverableSystemException, EboSecurityException, EboItemExistenceException { // Search for all the Movie Review documents where // (Author is \qJSmith\q or Title starts with \qA\q) // AND // where YearOfRelease is between the year 1990 and the year 2000. EbiDocQuery docQuery = (EbiDocQuery)cmgr.createQuery(EbiDocQuery.DOC_QUERY); docQuery.selectAll(); EbiQueryExpression expr = docQuery.whereDocTypeID(mrDocTypeID, EbiDocQuery.ROP_EQUAL, false); EbiQueryExpression expr2 = docQuery.whereAuthor("JSmith", EbiDocQuery.ROP_EQUAL, false); EbiQueryExpression expr3 = docQuery.whereTitle("A", EbiDocQuery.SOP_STARTS_WITH, false); EbiQueryExpression expr4 = docQuery.whereFieldValueBetween(yorFieldID, EboMisc.getInteger(1990), EboMisc.getInteger(2000), false); // (Author is \qJSmith\q or Title starts with \qA) expr2.orExpression(expr3); expr2.parenthesize(); // YearOfRelease was between the year 1990 and the year 2000 expr4.andExpression(expr5); // (Author is \qJSmith\q or whose Title starts with \qA\q) // AND // YearOfRelease was between the year 1990 and the year 2000 expr.andExpression(expr2); expr.andExpression(expr4); docQuery.setWhere(expr); // Sort results by creation date/time, in ascending order docQuery.orderByCreateDate(true); // Execute the search and filter the results based // on security constraints Collection results = cmgr.findElementsFiltered(context, docQuery); }
この例では、com.sssw.cm.api.EbiDocQuery.whereFieldValueBetween()メソッドにより、1行のコードでカスタムメタデータクエリを指定できます。他には次のようなメソッドがあります。
これらのメソッドの詳細については、EbiDocQueryのjavadocを参照してください。
返されるコレクションのEbiDocumentオブジェクトには、「Movie Review」に定義されているすべてのプロパティが含まれます。これは、作成日により昇順にソートされています。
executeDocMetaSearch()メソッドは、入力引数として次のオブジェクトにアクセスします。
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...