この章の内容は次のとおりです。
Imaging APIには、保存済検索を列挙し、実行するためのSearchServiceが用意されています。保存済検索を実行する際、ユーザーは検索のNameIdと検索のSearchArgumentsオブジェクトのリストを指定する必要があります。これらの引数は、検索のWHERE句の変数部分となります。これらはSearchService.executeSavedSearch操作に渡されます。この操作はSearch.ResultSetを戻します。この章の最後にある例5-1に、ここで説明するトピックのサンプル・コードを示します。
Imaging APIには、ログイン済のユーザーが使用できる検索をリストするSearchService.listSearchesメソッドが用意されています。この操作はAbilityパラメータを1つとります。このパラメータはユーザーのセキュリティ設定に基づいて、どのアプリケーションを返すかを指定します。これは、検索定義セキュリティに基づいてアプリケーションを戻します。Ability.VIEWは、呼び出し側ユーザーが表示権限を持つすべての検索を戻します。Ability.MANAGEパラメータは、ユーザーが削除または変更権限を持つ検索をすべて戻します。
この操作は、検索の数値IDとテキスト名の両方を特定するNameIdオブジェクト、java.util.Listを戻します。
保存済検索は、1つ以上の検索パラメータを定義することができます。Imagingは、これらのパラメータを検索のWHERE句にまとめます。Imaging APIでは、SearchArgumentクラスを使用して、これらのパラメータに引数が渡されます。SearchArgumentのコンストラクタは、パラメータの名前、およびその値を指定するSearchValueオブジェクトを受入れます。この引数の演算子は、SearchArgument.setOperatorメソッドを使用して設定する必要があります。
複数のSearchArgumentsはjava.util.Listとして渡されます。リスト内の引数の順序は重要ではありません。
SearchService.getSearchParametersをコールし、検索のNameIdを渡すと、SearchParametersが戻されます。これにより、検索によって定義されたパラメータが定義され、検索の実行に必要なSearchArgumentsを構築しやすくなります。また、SearchParametersは各パラメータが必要であるかどうかも定義します。
SearchService.executeSavedSearchメソッドは、検索の結果をSearch.ResultSetの形式で戻します。列ラベルはgetColumnsメソッドのSearch.Resultで得られます。このメソッドは文字列を順番どおり並べたjava.util.Listを戻します。
結果の行は、Search.Results getResultsメソッドから得られます。このメソッドは、Search.Resultオブジェクトのjava.util.Listリストを戻します。Search.Resultはそれぞれ、検索により見つかった1つのドキュメントを表しています。
検索結果列はgetColumnValuesにより戻されます。これは順番に並べられたTypedValuesのリストです。この順番は、列ラベルのリストの順番と一致します。ドキュメントのシステム・フィールドの値には、Search.Result.getDocumentにより戻されたDocumentオブジェクトからアクセスできます。
例5-1は、このセクションで説明した基本概念を示しています。
例5-1 検索の実行例
package devguidesamples; import java.util.ArrayList; import java.util.List; import java.util.Locale; import oracle.imaging.BasicUserToken; import oracle.imaging.ImagingException; import oracle.imaging.NameId; import oracle.imaging.Search; import oracle.imaging.SearchArgument; import oracle.imaging.SearchService; import oracle.imaging.SearchValue; import oracle.imaging.ServicesFactory; import oracle.imaging.TypedValue; import oracle.imaging.UserToken; public class ExecuteSearchSample { public static void main(String[] args) { try { // try-catch UserToken credentials = new BasicUserToken("ipmuser", "ipmuserpwd"); ServicesFactory servicesFactory = ServicesFactory.login(credentials, Locale.US, "http://ipmhost:16000/imaging/ws"); try { // try-finally to ensure logout SearchService searchService = servicesFactory.getSearchService(); NameId invoiceSearchNameId = null; // List the viewable applications to confirm that "Invoices" exists List<NameId> searchList = searchService.listSearches(Search.Ability.VIEW); for (NameId nameId: searchList) { if (nameId.getName().equals("Invoices")) { invoiceSearchNameId = nameId; } } if (invoiceSearchNameId == null) { System.out.println("Invoices search not found."); return; } SearchValue searchValue = new SearchValue(SearchValue.Type.NUMBER, 1234); SearchArgument searchArgument = new SearchArgument("Invoice Number", searchValue); searchArgument.setOperatorValue(Search.Operator.EQUAL); List<SearchArgument> searchArguments = new ArrayList<SearchArgument>(); searchArguments.add(searchArgument); Search.ResultSet resultSet = searchService.executeSavedSearch(invoiceSearchNameId,searchArguments); // Display Column Headers System.out.print("DocumentId" + " "); for (String column: resultSet.getColumns()) { System.out.print(column + " "); } System.out.println(); // Display result Rows for (Search.Result row: resultSet.getResults()) { System.out.println(row.getDocument().getId()); for (TypedValue typedValue: row.getColumnValues()) { System.out.print(typedValue.getStringValue() + " "); } System.out.println(); } } finally { if (servicesFactory != null) { servicesFactory.logout(); } } } catch (ImagingException e) { System.out.println(e.getMessage()); } } }