MethodInstance クラス (Microsoft.Office.Server.ApplicationRegistry.Administration)

メソッドの呼び出し方法を説明します。これは、メソッドとメソッドが取る入力パラメータの既定値への参照です。

名前空間: Microsoft.Office.Server.ApplicationRegistry.Administration
アセンブリ: Microsoft.SharePoint.Portal (microsoft.sharepoint.portal.dll 内)

構文

'宣言
<SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel:=True)> _
<SharePointPermissionAttribute(SecurityAction.Demand, ObjectModel:=True)> _
Public Class MethodInstance
    Inherits IndividuallySecurableMetadataObject
'使用
Dim instance As MethodInstance
[SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel=true)] 
[SharePointPermissionAttribute(SecurityAction.Demand, ObjectModel=true)] 
public class MethodInstance : IndividuallySecurableMetadataObject

備考

1 つのメソッドが複数の MethodInstance オブジェクト (各 MethodInstance オブジェクトはメソッド署名と一連の既定値の組み合わせ) を持つことができます。MethodInstance オブジェクトを使用して、異なる既定値を持つ同一メソッドを呼び出すことができます。MethodInstance オブジェクトは、複雑な Web サービスの場合に特に有用です。たとえば、複数の ref または out 型パラメータで複数の出力を返す WebMethod を使用できます。ビジネス データ カタログは一度に 1 つの戻り値しか処理できないため、このような WebMethod を単一ビジネス データ カタログ メソッドとして定義して、複数の MethodInstance を作成し、それぞれがコア メソッドの異なるパラメータを '戻り値' パラメータとしてポイントするように設定できます。

MethodInstance オブジェクトを完全に定義する場合は、XML で ReturnParameter と共に TypeDescriptor 要素を定義することもできます。以下に例を示します。

<MethodInstance Name="bla" Type="Finder" ReturnParameterName="foo" ReturnTypeDescriptorName="baz" ReturnTypeDescriptorLevel="5">

属性 ReturnTypeDescriptorName は省略できます。指定されていない場合、ビジネス データ カタログは Return parameter 要素のルート TypeDescriptor であるものと見なします。属性 ReturnTypeDescriptorLevel も省略できます。指定されていない場合、および同じような名前が付けられた複数の TypeDescriptor が存在する場合は、例外が返されます。まれに同一レベルに同じような名前が付けられた複数の TypeDescriptor 要素が存在する場合がありますが、この場合は最初の要素が使用されます。

この柔軟性は重要です。これによって、Web メソッドを複数の方法で再利用できるようになります。顧客のコレクションを返す WebMethod について考えてみます。各顧客はアドレスのコレクションを持つものとします。3 つのビジネス データ カタログ MethodInstances がこの WebMethod: を使用します。Customer Finder、Customer SpecificFinder、および CustomerToAddress Association (顧客のアドレスを返す) の 3 つです。MethodInstance モデルでは、メタデータ作成者は ReturnParameter 内でユーザーが TypeDescriptor を指定できるようにすることで、関連する Return parameter の部分のみを定義すれば済みます。

関連付けは派生クラス MethodInstance クラスで、関連付け定義形式も ReturnTypeDescriptor 値を取ることができます。

<Association Name="CustomerToAddresses" AssociationMethodEntityName="Customer" AssociationMethodName="GetCustomerByID" AssociationMethodReturnParameterName="Customer" AssociationMethodReturnTypeDescriptorName="CustomerAddresses" AssociationMethodReturnTypeDescriptorLevel="1">
      <SourceEntity Name="Customer" />
      <DestinationEntity Name="Address" />
    </Association>

さらに、MethodInstance のオブジェクト モデルも ReturnTypeDescriptor アクセサ/プロパティを提供します。ReturnParameter は暗黙的に ReturnTypeDescriptor の一部で、オブジェクト モデルはオブジェクト参照を使用するため、オブジェクト モデルを使用するときに ReturnParameter をさらに指定する必要はありません。

一部のメソッド インスタンスには、汎用クライアントを有効にするという特殊な用途があります。

Finders and SpecificFinders

Finder はエンティティ インスタンスを返す特別なメソッドです。SpecificFinder はエンティティ インスタンスを 1 つだけ返します。Finder メソッドは静的なメソッドで、キーを入力パラメータとして取りません。SpecificFinder メソッドも静的なメソッドですが、キー (ID) を明示的に取ります。

関連付けによってのみ到達可能なエンティティは検索機能を持ちません。他のエンティティは、複数のインスタンスを返す 1 つの Finder メソッド、および ID が指定された単一のインスタンスを返す 1 つの SpecificFinder メソッドを持つ必要があります。

たとえば、顧客エンティティの場合、Finder メソッドは SELECT * FROM Customers で、SpecificFinder メソッドは SELECT * FROM Customers WHERE CustomerID = id になります。

エンティティに Finders メソッドを定義しない場合、そのエンティティはビジネス データ リスト Web パーツで使用できません。SpecificFinder メソッドを定義しない場合、そのエンティティではアクションの設定、検索やインデックス付け、および関連リスト Web パーツ以外のビジネス データ機能での使用は行えません。

Finder の条件を指定するには、対応するメソッドがフィルタ処理可能パラメータを入力として取り、レコードのコレクションを返し、各レコードにそれが表すエンティティ インスタンスのキーが含まれる必要があります。SpecificFinder の条件を指定するには、対応するメソッドがエンティティ インスタンス キーを入力パラメータの 1 つとして取り、フィールドを返し、フィールドの 1 つがキーである必要があります。

以下に、フィルタ処理可能なパラメータを持つ Finder メソッドのより複雑な例を示します。

SELECT ProductID, Name, ProductNumber, ListPrice FROM Product WHERE (ProductID &gt;= @MinProductID) AND (ProductID &lt;= @MaxProductID) AND (Name LIKE @Name) AND ProductNumber LIKE @ProductNumber)

Finder メソッドおよび SpecificFinder メソッドが同じフィールドを返す必要はありません。SpecificFinder メソッドが Finder メソッドよりも多くのフィールドを返すことができる場合もあります。ただし、双方ともエンティティで定義された ID を返す必要があります。

Finder および SpecificFinder メソッドは、対応するただ 1 つのメソッド インスタンスを持つ必要があります。

SpecificFinder メソッドは、エンタープライズ検索およびインデックス処理において重要な役割を果たします。ビジネス データ カタログのクロールには次の 2 つのフェーズがあります。

  • ID 列挙 : すべてのエンティティ インスタンス ID をフェッチします。

  • 詳細フェッチ : 各エンティティ インスタンスの詳細をフェッチします。

このトピックの後の方で説明する IDEnumerator は ID を返し、SpecificFinder メソッドは各エンティティ インスタンスの詳細を返します。

ViewAccessors

view はエンティティのフィールドのコレクションです。エンティティの既定ビューには、Finder メソッドおよび SpecificFinder メソッドから返されたフィールドが含まれます。ViewAccessor は既定以外のビュー、つまり業務アプリケーションからのさまざまなフィールド セットを返す特別なメソッドです。ViewAccessor メソッドはキー (ID) を暗黙的に取るインスタンス メソッドです。つまり、ユーザーはキーを指定しません。キーはビジネス データ カタログにより自動的に指定されます。

エンティティはゼロ以上の ViewAccessor メソッドを持ちます。

Finder および SpecificFinder メソッドはメソッド インスタンスを 1 つしか持つことができませんが、ViewAccessor メソッドは 1 つ以上のメソッド インスタンスを持つことができます。こうした柔軟性は、同一メソッドが複数の構造を返し、それぞれがビューを構成する場合に便利です。SAP のようなシステムには、関連フィールドの複数のコレクションをユーザーに返す API (BAPI_CUSTOMER_GETDETAIL2 など) があります。たとえば Customer の GetDetails API は、財務データを含む構造やアドレス データを含む構造などを返します。

注意

ビジネス データ Web パーツ、リストなど、ビジネス データ機能はエンティティ ビューをサポートしています。

IDEnumerator

ビジネス データ カタログのクロールには次の 2 つのフェーズがあります。

  • ID 列挙 : すべてのエンティティ インスタンス ID をフェッチします。

  • 詳細フェッチ : 各エンティティ インスタンスの詳細をフェッチします。

IDEnumerator メソッドは検索可能な各エンティティの ID (一意なキー) のリストを返し、SpecificFinder メソッドは各エンティティ インスタンスの詳細を返します。これにより、IDEnumerator メソッドが返す ID を持つエンティティのインデックス処理が可能になります。

注意

増分クロールが必要な場合、LastModifiedDate プロパティがエンティティの SpecificFinder の戻りフィールドの 1 つであることを確認する必要があります。

エンティティはゼロまたは 1 つの IDEnumerator メソッドを持ちます。IDEnumerator メソッドは ID リスト以外のものも返します。戻り値パラメータで他のフィールドを返す場合、ビジネス データ カタログはクロール時にこれを無視します。

LastIdSeen フィルタは IDEnumerator メソッドのチャンキングを有効にします。Web サービスおよびその他の非ストリーミング バックエンド アプリケーションの場合、以下のように IDEnumerator メソッドで LastIdSeen フィルタを使用してパフォーマンスを向上させます。

SELECT TOP 100 Id FROM Customers WHERE Id>=@LastIdSeen
ORDER BY Id

以下の代わりに LastIdSeen フィルタを使用します。

Select Id from Customers

GenericInvoker

GenericInvoker はバックエンド基幹業務 (LOB) アプリケーションを呼び出すことのできるメソッドです。これは前に説明したメソッドではありません。たとえば、GenericInvoker メソッドを使用してバックエンド アプリケーションでメソッドを実行してエンティティを編集したり、製品テーブルで単価を更新したりできます。

エンティティはゼロ以上の GenericInvoker メソッドを持ちます。

GenericInvoker メソッドは、バックエンド システムでロジックを呼び出す必要のあるカスタム Web パーツを記述している場合に特に便利です。これは、ビジネス データ カタログですべての認証、承認、およびその他のセキュリティ要件が考慮されるためです。

注意

ビジネス データ Web パーツ、リストなど、ビジネス データ機能は GenericInvoker メソッドを使用しません。ただし、オブジェクト モデルと XML スキーマではこの種類のメソッド インスタンスをサポートしています。

Scalar

Scalar は、バックエンド LOB アプリケーションで呼び出すことができる、単一値を返すメソッドです。たとえば、Scalar メソッドを使用してバックエンド アプリケーションからその日の売り上げ合計を取得できます。

エンティティはゼロ以上の Scalar メソッドを持ちます。

継承階層

System.Object
   Microsoft.Office.Server.ApplicationRegistry.Administration.MetadataObject
     Microsoft.Office.Server.ApplicationRegistry.Administration.AccessControlledMetadataObject
       Microsoft.Office.Server.ApplicationRegistry.Administration.IndividuallySecurableMetadataObject
        Microsoft.Office.Server.ApplicationRegistry.Administration.MethodInstance
           Microsoft.Office.Server.ApplicationRegistry.Administration.Association

スレッドの安全性

この型のパブリックで静的な (Visual Basic では Shared) すべてのメンバは、スレッド セーフです。インスタンス メンバは、スレッド セーフであるとは保証されません。

関連項目

参照

MethodInstance メンバ
Microsoft.Office.Server.ApplicationRegistry.Administration 名前空間