IOpenSearchSource
COM公式ドキュメント
カスタムのクライアント側 OpenSearch データソースから検索結果を取得するメソッドを公開します。
解説(Remarks)
実装するタイミング
サーバー側のみのソリューションでは対応できない、次のような場合にこのインターフェイスを実装します。- フォームベース認証やその他のカスタム認証方式など、Windows 7 の検索フェデレーションがサポートしていない認証方式を用いるリモートインデックス。
- 開発者が管理していない、垂直データの価値の高い公開ストア(米国議会図書館や医学研究データベースなど)で、現時点では OpenSearch 出力をサポートしていないが公開 Web API を提供しているもの。
- フロントエンドを実装できない可能性がある、独自仕様の企業データストアやインデックス、およびレガシーなコンテンツ管理ストア。
検索コネクタ(.searchconnector-ms ファイル)を用いると、Windows エクスプローラーはクエリパラメーターを付けてお使いの実装を呼び出します。お使いの実装は結果を RSS 形式または Atom 形式で返します。これにより、お使いの実装はカスタム認証 UI を提供し、独自の API を使用してデータソースに接続できます。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
OpenSearch データソースから、RSS 形式または Atom 形式で書式設定された検索結果を返します。
| hwnd | HWND | in | 呼び出し元のウィンドウハンドル。 |
| pszQuery | LPWSTR | in | ユーザーが入力したクエリ。このパラメーターは OpenSearch の {searchTerms} パラメーターに相当し、空の場合もあります。 |
| dwStartIndex | DWORD | in | 要求される最初の結果のインデックス。OpenSearch の {startIndex} パラメーターに相当します。後述の「解説」を参照してください。 |
| dwCount | DWORD | in | 要求される結果の件数。OpenSearch の {count} パラメーターに相当します。 |
| riid | GUID* | in | 要求されるインターフェイスの IID。通常は IID_IStream です。 |
| ppv | void** | out | RIID で指定された型の、Atom 形式または RSS 形式の結果を含むオブジェクトへのインターフェイスポインター。 |
戻り値
型: HRESULT
成功した場合は S_OK を、それ以外の場合はエラー値を返します。B_S_ENDOFROWSET は必要に応じて結果の終端を示します。次のエラーは、情報バーに適切なエラーメッセージを表示します。
- INET_E_AUTHENTICATION_REQUIRED(このリソースにアクセスする権限がユーザーにありません)
- INET_E_RESOURCE_NOT_FOUND(場所が利用できませんでした)
- INET_E_DOWNLOAD_FAILURE(サーバーエラー)
解説(Remarks)
Windows エクスプローラーは、検索クエリパラメーターを付けてこのメソッドを呼び出します。IOpenSearchSource の実装は、カスタム認証 UI の提供や独自 API を使用したデータソースへの接続など、必要な処理を実行した後に、結果の一部またはすべてを返します。
ページ分割された結果
Web サービスが 1 回の要求で返す結果を一定の件数以内に制限したい場合、このメソッドは一度に結果の 1「ページ」だけを返すことができます。Windows エクスプローラーは、このメソッドを繰り返し呼び出して新しいインデックス番号を指定することで、追加のページの結果を取得できます。結果を返す際、最初の結果は dwStartIndex で要求されたインデックスの結果でなければなりません。インデックス番号と件数
インデックス番号は、結果ページの最初の結果を識別します。これは OpenSearch の {startIndex} パラメーターに相当します。件数は OpenSearch の {count} パラメーターに相当し、1 ページあたりに返される想定または希望する項目数を識別します。Web サービスが結果の最初のページで 20 件を返す場合、想定されるページサイズは 20 です。次の 20 件を取得するには、Windows エクスプローラーは dwStartIndex に 21、dwCount に 20 を指定して IOpenSearchSource::GetResults を呼び出します。Web サービスが返す結果ページの項目数が想定されるページサイズより少ない場合、Windows エクスプローラーは結果の最後のページを受信したものとみなし、要求の送信を停止します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IOpenSearchSource "{F0EE7333-E6FC-479B-9F25-A860C234A38E}" #usecom global IOpenSearchSource IID_IOpenSearchSource "{}" #comfunc global IOpenSearchSource_GetResults 3 sptr,wstr,int,int,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IOpenSearchSource "{F0EE7333-E6FC-479B-9F25-A860C234A38E}" #usecom global IOpenSearchSource IID_IOpenSearchSource "{}" #comfunc global IOpenSearchSource_GetResults 3 sptr,wstr,int,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。