次の方法で共有


Finder メソッドにフィルター記述子を追加する

フィルター記述子を使用すると、モデルのコンシューマーは、実行前のメソッドに値を渡すことができます。 詳細については、「ビジネス データ接続モデルを設計する」を参照してください。

1 つの一般的なシナリオとして、SharePoint のユーザーが、何らかの条件に一致する外部コンテンツ タイプのインスタンスを取得しようとする場合があります。 このシナリオは、Finder メソッドにフィルター記述子を追加することによってサポートできます。

Finder メソッドにフィルター記述子を追加するには

  1. [BDC メソッドの詳細] ウィンドウで、Finder メソッドのノードを展開し、[パラメーター] ノードを展開して、入力パラメーターを追加します。 詳細については、「方法: メソッドにパラメーターを追加する」を参照してください。

  2. [メソッドの詳細] ウィンドウで、パラメーターの型記述子を選択します。

  3. メニュー バーで、[表示] > [プロパティ ウィンドウ] の順に選択します。

  4. [プロパティ] ウィンドウで、[型の名前] プロパティをフィルターに適したデータ型に設定します。

    たとえば、あるフィルターでは、このメソッドによって返される販売注文の数を制限するために注文日を使用する可能性があります。 そのフィルターをサポートするには、型記述子の [型の名前] プロパティを [System.DateTime] に設定する必要があります。

  5. [メソッドの詳細] ウィンドウで、[フィルター記述子] ノードを展開します。

  6. [フィルター記述子の追加] 一覧で、[フィルター記述子の作成] を選択します。

    新しいフィルター記述子が [フィルター記述子] ノードの下に表示されます。

  7. メニュー バーで、[表示] > [プロパティ ウィンドウ] の順に選択します。

  8. [プロパティ] ウィンドウで、[種類] プロパティを選択します。

  9. [種類] プロパティに対して表示される一覧で、必要なフィルター パターンを選択します。

    たとえば、Finder メソッドで返される販売注文の数を制限するために注文日を使用するフィルターを作成するには、[比較] を選択します。 比較フィルターにより、Finder メソッドでは確実に、特定の条件を満たすインスタンスのみを返すようになります。 各フィルター パターンの詳細については、「BDC でサポートされるフィルターの種類」を参照してください。

  10. [プロパティ] ウィンドウで、[関連付けられた型記述子] プロパティを選択します。

  11. [関連付けられた型記述子] プロパティに対して表示される一覧で、この手順で前に作成した型記述子を選択します。 これにより、このフィルターが Finder メソッドの入力パラメーターに関連付けられます。

  12. データを返す Finder メソッドにコードを追加します。 この入力パラメーターは、選択クエリでの条件として使用できます。

    次の例では、注文日が指定されている販売注文を返します。

    Note

    ServerName フィールドの値をサーバーの名前に置き換えてください。

    public static IEnumerable<SalesOrderHeader> ReadList(DateTime OrderDateParam)
    {
        const string ServerName = "MySQLServerName";
        AdventureWorksDataContext dataContext = new AdventureWorksDataContext
              ("Data Source=" + ServerName + ";" +
               "Initial Catalog=AdventureWorks;Integrated Security=True");
    
        DateTime NoValuePassedIn = Convert.ToDateTime("1/1/1900 12:00:00 AM");
        DateTime DefaultDateTime = Convert.ToDateTime("2001-09-01 00:00:00.000");
    
        // If the user does not provide a value for the filter.
        if (OrderDateParam == NoValuePassedIn)
        {
            // Use a default date time value.
            OrderDateParam = DefaultDateTime;
        }
    
        IEnumerable<SalesOrderHeader> SalesOrderHeader =
            from salesOrderHeaders in dataContext.SalesOrderHeaders
            where salesOrderHeaders.OrderDate == OrderDateParam
            select salesOrderHeaders;
        return SalesOrderHeader;
    }