計画手順 4: 各エンティティに必要なフィルターを識別する

最終更新日: 2010年4月19日

適用対象: SharePoint Server 2010

各外部コンテンツ タイプに必要なフィルターを決定するには、各 Web メソッドの各入力パラメーターを調べて、実行時に Business Data Connectivity (BDC) service がそのパラメーターの値をどのように取得すればよいかを判断します (たとえば、ビジネス データ Web パーツで、など)。実行時にユーザーに値を指定させる場合は、いずれかのユーザー フィルターを使用します。また、BDC で自動的に値を提供する場合は、いずれかのシステム フィルターを使用するか、またはメタデータ自体で既定値を提供します。

たとえば、SampleWebService プロキシでの GetCustomers メソッドについて考えます。このメソッドは、2 つの入力パラメータ name と limit を受け取ります。ビジネス データ リスト Web パーツのユーザーが、"Name like 'Jo%'" や "Name contains 'John'" のような値を指定して GetCustomers メソッドの結果をフィルタする場合は、FilterDescriptor と name 入力パラメータを関連付けます。

宣言するフィルターを、バックエンド Web サービスのメソッドがサポートしている必要があります。サポートしていないと、Web メソッドは意図した結果を返さない可能性があります。最初に、Web メソッドのドキュメントを調べてメソッドがサポートするフィルター機能を確認します。次に、メタデータで FilterDescriptors を宣言します。

たとえば、プロキシの GetCustomers Web メソッドを調べると、次のコードのように、このメソッドが 2 つの入力パラメーター name と limit を受け取ることがわかります。

    public Customer[] GetCustomers(string name, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] System.Nullable<int> limit) {
        object[] results = this.Invoke("GetCustomers", new object[] {
                    name,
                    limit});
        return ((Customer[])(results[0]));
    }

この Web メソッドのドキュメントで、メソッドの使用方法が次のコードのように記述されているものとします。

GetCustomers(name, limit)  where
name: A string representing the customer's name. This parameter accepts wildcards (that is, '%' representing any string of characters).
limit: A number that limits the number of customers returned in the result set.

この説明には、入力パラメーター name および limit を、それぞれワイルドカードおよび limit フィルターと関連付けることができると明確に記されています。

各フィルターには、たとえばビジネス データ Web パーツなどでユーザーに対して表示される名前を指定します。FilterDescriptor の UsedForDisambiguation プロパティを使用して、外部データ ピッカー コントロールおよびビジネス データ Web パーツに、フィルターに一致する候補の一覧を生成するように指示できます。FilterDescriptor の定義では、Type 属性の値が非常に重要です。この値は、BDC にフィルターの種類を伝えます。ユーザー フィルターまたはシステム フィルターのどちらかを使用できます。次に示すのは、GetCustomers メソッドのメタデータ XML です。

        <Method Name="GetCustomers">
          <FilterDescriptors>
            <FilterDescriptor Type="Wildcard" Name="Name" />
            <!-- Limit filter tells Business Data Catalog to bring back 
            only the specified number of rows back from the line-of-business 
            application.-->
            <!-- Notice that the back-end method should support this 
            functionality to return only the specified number of rows. 
            For a sample, see SampleWebService.-->
            <FilterDescriptor Type="Limit" Name="Limit" />
          </FilterDescriptors>
          <Parameters>
            <Parameter Direction="In" Name="name">
              <TypeDescriptor TypeName="System.String" AssociatedFilter="Name" Name="name" />
            </Parameter>
            <Parameter Direction="In" Name="limit">
              <TypeDescriptor TypeName="System.Int32" AssociatedFilter="Limit" Name="limit" />
            </Parameter>
            <Parameter Direction="Return" Name="Customers">
              <TypeDescriptor TypeName="SampleWebServiceProxy.Customer[], SampleWebService" IsCollection="true" Name="ArrayOfCustomer">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="SampleWebServiceProxy.Customer, SampleWebService" Name="Customer">
                    <TypeDescriptors>
                      <TypeDescriptor TypeName="System.String" IdentifierName="CustomerID" Name="CustomerID" />
                      <TypeDescriptor TypeName="System.String" Name="Name" />
                      <TypeDescriptor TypeName="System.Int64" Name="WorkPhoneNumber" />
                      <TypeDescriptor TypeName="System.Int64" Name="MobilePhoneNumber" />
                      <TypeDescriptor TypeName="System.String" Name="Industry" />
                      <TypeDescriptor TypeName="System.String" Name="WebSite" />
                    </TypeDescriptors>
                  </TypeDescriptor>
                </TypeDescriptors>
              </TypeDescriptor>
            </Parameter>
          </Parameters>
          <MethodInstances>
            <MethodInstance Type="Finder" ReturnParameterName="Customers" ReturnTypeDescriptorName="ArrayOfCustomer" ReturnTypeDescriptorLevel="0" Name="FindCustomerInstances" />
          </MethodInstances>
        </Method>

BDC でサポートされるフィルターの一覧については、「Business Data Connectivity Service によってサポートされるフィルターの種類」を参照してください。

次の手順

計画手順 5: 各メソッドの入力、出力、および戻り値パラメーターを定義する