BLOB アクセス インターフェイス : ISPExternalBinaryProvider
最終更新日: 2015年3月9日
適用対象: SharePoint Foundation 2010
この記事の内容
インターフェイス定義 (IDL)
StoreBinary メソッドのパラメーター
RetrieveBinary メソッドのパラメーター
外部バイナリ ラージ オブジェクト (BLOB) ストア (EBS プロバイダー) は、Microsoft SharePoint Foundation 2010 の SharePoint ストレージ アクセス スタックに COM コンポーネントとして統合されています。EBS プロバイダーのコアを形成するのは、特定のインターフェイス ISPExternalBinaryProvider ですが、このインターフェイスを実装してユーザー設定のプロバイダーを記述する必要があります。このインターフェイスには、StoreBinary と RetrieveBinary の 2 つのメソッドが用意されており、これらのメソッドを実装して、バイナリ データの保存および取得を外部 BLOB ストアに対して行います。
インターフェイス定義 (IDL)
SharePoint アプリケーションでは、ISPExternalBinaryProvider クラスの一般的かつサーバー内部に状態が保持されないインスタンスを保持します。この永続的なインスタンスは、外部 BLOB ストアから BLOB データを保存または取得する際に呼び出されます。
インターフェイスの IDL ファイル (extstore.idl) の内容は、以下のようになります。
/*************************************************
File: extstore.idl
Copyright (c): 2006 Microsoft Corp.
*************************************************/
import "objidl.idl";
[
uuid(39082a0c-af6e-4ac2-b6f0-1a1ff6abbae1)
]
library SharePointBinaryStore
{
[
local,
object,
uuid(48036587-c8bc-4aa0-8694-5a7000b4ba4f),
helpstring("ISPExternalBinaryProvider interface")
]
interface ISPExternalBinaryProvider : IUnknown
{
HRESULT StoreBinary(
[in] unsigned long cbPartitionId,
[in, size_is(cbPartitionId)] const byte* pbPartitionId,
[in] ILockBytes* pilb,
[out] unsigned long* pcbBinaryId,
[out, size_is(, *pcbBinaryId)] byte** ppbBinaryId,
[out,optional] VARIANT_BOOL* pfAccepted);
HRESULT RetrieveBinary(
[in] unsigned long cbPartitionId,
[in, size_is(cbPartitionId)] const byte* pbPartitionId,
[in] unsigned long cbBinaryId,
[in, size_is(cbBinaryId)] const byte* pbBinaryId,
[out] ILockBytes** ppilb);
}
}
StoreBinary メソッドのパラメーター
以下では、StoreBinary メソッドのパラメーターについて説明します。
[in] unsigned long cbPartitionId
バイト配列のサイズが pbPartitionId パラメーターに渡されます。SharePoint Foundation では、常にこの値が 16 に設定され、そのサイズは GUID と同じサイズとなります。
[in, size_is(cbPartitionId)] const byte* pbPartitionId
バイナリ ファイルが存在するサイトの識別子です。EBS プロバイダーは、これを使用して BlobId パラメーターを外部 BLOB ストアの論理コレクションにマップすることができます。
[in] ILockBytes* pilb
ILockBytes インスタンスとしての BLOB データへのポインター Important: プロバイダーは HRESULT を返した後、ILockBytes* オブジェクトへの参照を保持してはなりません。
[out] unsigned long* pcbBinaryId
BLOB ID のバイト数。
[out, size_is(, *pcbBinaryId)] byte** ppbBinaryId
BLOB が外部 BLOB ストアに格納された後に EBS プロバイダーから出力されるパラメーター。EBS プロバイダーがこの ID を外部 BLOB ストアに与えることも、ストアが EBS プロバイダーを返すこともできます。SharePoint Foundation では、どちらの方法を使用するかを指定していません。ただし、今後のバージョンの EBS プロバイダーに適用できる方法を選択することをお勧めします。
このパラメーターは、CoTaskMemAlloc を使用して割り当てる必要があります。
[out,optional] VARIANT_BOOL* pfAccepted
ブール値パラメーターです。FALSE は、BLOB ファイルがインラインに格納される必要があることを SharePoint Foundation に示しています。SharePoint Foundation で BLOB を拒否する EBS プロバイダーをサポートできない場合 (特定のファイルがリンクの修復やウイルス スキャンのために更新される場合) などの一部の状況において、SharePoint Foundation は、NULL ポインターを渡します。このポインターが渡された場合、EBS プロバイダーは、ファイルを保存するか、失敗を示す HRESULT を返す必要があります。
RetrieveBinary メソッドのパラメーター
以下では、RetrieveBinary メソッドのパラメーターについて説明します。パラメーター自体は、StoreBinary メソッドのものと同じになります。
[in] unsigned long cbPartitionId
バイト配列のサイズが pbPartitionId に渡されます。SharePoint Foundation では、常にこの値が 16 に設定され、そのサイズは GUID と同じサイズとなります。[in, size_is(cbPartitionId)] const byte* pbPartitionId
バイナリ ファイルが存在するサイトの識別子です。 EBS プロバイダーは、これを使用して BLOB ID を外部 BLOB ストアの論理コレクションにマップすることができます。[in] unsigned long cbBinaryId
BLOB ID のバイト数。[in, size_is(cbBinaryId)] const byte* pbBinaryId
外部 BLOB ストア内の BLOB を検索するために EBS プロバイダーに渡される識別子。[out] ILockBytes** ppilb
ILockBytes インスタンスとしての BLOB データに対するポインター
StoreBinary 用の値を返す
以下は、ISPExternalBinaryProvider:StoreBinary メソッドを使用する場合の戻り値とその説明です。
S_OK |
メソッドは正常に実行されました。 SharePoint Foundation で NULL 以外のアドレスを使用して *pfAccepted を渡した場合、*pfAccepted が VARIANT_FALSE であれば、ファイルは SQL Server に保存されます。そうでなければ、SharePoint Foundation は、ppbBinaryId にこの値を格納し、BLOB が外部に保存されたことを記録します。 |
E_FAIL |
SharePoint Foundation は、ファイルが保存されなかったことをユーザーに通知します。また、SharePoint Foundation はいかなる出力パラメーターも変更しません (CoTaskMemAlloc が呼び出されると、EBS プロバイダーは、CoTaskMemFree が呼び出されたものと判断します)。 |
SharePoint Foundation では、予期しない HRESULT の戻り値を記録し、HRESULT が成功しても失敗しても適切に処理します。
RetrieveBinary 用の値を返す
以下は、ISPExternalBinaryProvider:RetrieveBinary メソッドを使用する場合の戻り値とその説明です。
S_OK |
メソッドは正常に実行されました。 SharePoint Foundation は、*ppilb パラメーターからファイルの内容を読み取り、その後そのファイルを解放します。 |
E_FAIL |
メソッドの実行が失敗しました。 SharePoint Foundation は、ファイルを取得できなかったことをユーザーに通知します。SharePoint Foundation では、*ppilb パラメーターの値を変更しません。 |
プロバイダーは、ストレージ アクセス スタックに ILockBytes インターフェイスを返します。
StoreBinary メソッドと同様に、EBS プロバイダーは、検索イベントの記録に関して責任を持っています。Windows SharePoint Services は、予期しない HRESULT の戻り値を記録しますが、そうでない場合は、戻り値が単に S_OK や E_FAIL であるかのように記録します。