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

フィルタは、ビジネス データ カタログがユーザー (またはシステム) の入力を取り込み、バックエンド API 呼び出しを介してそれを組み込むための基本的な方法です。FilterDescriptors は、一連の複雑なパラメータのどこにフィルタ値を挿入するかを表します。これは、メソッド定義の複雑なパラメータを表す TypeDEscriptors を "タグ付け" して、挿入する位置にフラグ設定することで実現します。バックエンドがフィルタ機能を提供している必要があることに注意してください。FilterDescriptors は、エンド ユーザーに対してこの機能の表面をしあげるメカニズムを形成するに過ぎません。FilterDescriptor オブジェクトは、Method オブジェクトの内側で所有されます (含まれます)。その後、TypeDescriptor オブジェクトによって参照されます。

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

構文

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

備考

ユーザーは、条件と一致するエンティティのインスタンスを取得できます。たとえば、"A" で始まる名前の顧客や、特定の顧客による注文を表示することができます。顧客の取得に使用する API では、このユーザー入力が起動時の第 3 の文字列パラメータとして渡される必要があります。メタデータ作成者はワイルドカード型の FilterDescriptor を作成し、第 3 のパラメータのルート TypeDescriptor にこの新しく作成した FilterDescriptor をタグ付けします。このような FilterDescriptors の多くは、単一のメソッド (API) に関連付けることができます。そうすると、ユーザーは実行時に必要なフィルタを選択してそれに値を指定し、ビジネス データ カタログはこのフィルタ値をバックエンド メソッドに渡してバックエンドで必要な正確な位置に挿入します。これにより、ユーザーが表示する必要がある行のみが返されます。

注意

FilterDescriptor は、メタデータ オブジェクトですが、フィルタはランタイム オブジェクトです。FilterDescriptor オブジェクトは、メソッドで使用可能なフィルタを示します。

Filtering Patterns

基幹業務 (LOB) システムにはさまざまなフィルタリング メカニズムが用意されています。ビジネス データ カタログには、データ ソースとは関係なく、同じフィルタリング セマンティクスをユーザーに提供できるように一般的なパターンがまとめられています。ビジネス データ カタログには次のフィルタおよびフィルタリング パターンが用意されています。

  • Wildcard フィルタ   返されるインスタンスを、値にアスタリスク (*) のワイルドカード文字が含むことができる field like value に制限します。このフィルタの種類を使用して、"次の文字列で始まる" や "次の値を含む" など、ユーザーにとってわかりやすいフィルタを表示することができます。

  • Comparison フィルタ   返されるインスタンスを条件に一致するものに制限します。SQL では WHERE 句によってこれをサポートします。

  • Limit フィルタ   返されるインスタンスの数を n に制限します。SQL は SELECT TOP 句によってこれをサポートしています。Limit フィルタを使用することにより、長い待ち時間とタイム アウトを回避し、さらにユーザーが大量のデータを要求する不適切なクエリを実行しないようにすることもできます。

  • UserContext   現在のユーザーのコンテキストによってインスタンスを制限します。このフィルタは、現在の Microsoft Windows ユーザーのドメイン/ユーザー名をメソッド呼び出しに追加するようビジネス データ カタログに指示します。

  • Username   シングル サインオン (SSO) ユーザー名によってインスタンスを制限します。このフィルタは、SSO からのユーザー名をパラメータの一部としてメソッド呼び出しに渡すようにビジネス データ カタログに指示します。

  • Password   Username フィルタと共に使用します。このフィルタは、SSO からのパスワードをパラメータの一部としてメソッド呼び出しに渡すようにビジネス データ カタログに指示します。

    注意

    バックエンド メソッド定義では、フィルタをサポートしています。これによってのみ、コンテキストに応じた方法で、フィルタを使用してバックエンドで使用可能な機能をフロントエンド アプリケーションに反映することができます。メタデータは、メソッドがサポートするフィルタを単に宣言します。

  • UserProfile    FilterDescriptor 定義で指定可能な、単純なフィルタの種類。このフィルタを使用するには、フィルタの種類 "UserProfile" を宣言して、"UserProfilePropertyName" という名前の System.String プロパティを追加します。この値は、ユーザー プロファイル プロパティの名前です。ビジネス データ カタログは現在のユーザー プロファイルを検索して、この名前のプロパティの値を読み取り、バックエンドの起動に組み込みます。

  • SSOTicket   SSO からの SSO チケットをパラメータの一部としてメソッド呼び出しに渡すようにビジネス データ カタログに指示します。

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

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

Wildcard や Range のようなユーザー フィルタは、ユーザーが上書きできる入力を宣言し、UserContext や UserProfile などのシステム フィルタを使用すると、ビジネス データ カタログでユーザー トークンなどの値を安全に設定することができます。

重要

メタデータ作成者が、ユーザー名をユーザー制御可能フィルタとして使用して機密性の高い個人データを返す不適切なメタデータを作成すると、あるユーザーに他のユーザーのデータが表示されるおそれがあります。これを防ぐために、UserContextFilter を使用してユーザー名をメソッド呼び出しに渡します。

クライアントは、メタデータ リポジトリのクエリを実行してシステムがサポートしているフィルタを特定し、それに応じたユーザー インターフェイスを表示します。

データベースと Web サービス システムの両方で FilterDescriptor オブジェクトが受け入れるプロパティを次に示します。

プロパティ

必須かどうか

既定値

制限/使用する値

コメント

UsedForDisambiguation

System.Boolean

いいえ

false

true

false

true の場合、一致する可能性のあるリストを生成するために、このフィルタがビジネス データ選択で使用されます。

CaseSensitive

System.Boolean

いいえ

false

true

false

true の場合、ビジネス データ Web パーツおよびビジネス データ選択は、このフィルタが大文字と小文字を区別することをユーザーに伝えます。

IsDefault

System.Boolean

いいえ

false

true

false

true の場合、既定でこのフィルタがビジネス データ選択で選択されます。

次のコード例は、AdventureWorks2000 データベースの ProductModel エンティティ用の、メソッド インスタンス、フィルタ記述子、既定値、および TypeDescriptors を完備したメソッドを作成する方法を示しています。

Prerequisites

Project References

このサンプルを実行する前に、コンソール アプリケーション コード プロジェクトに以下のプロジェクト参照を追加します。

  • Microsoft.SharePoint

  • Microsoft.SharePoint.Portal

  • Microsoft.Office.Server

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Server.ApplicationRegistry.Administration;
using Microsoft.Office.Server.ApplicationRegistry.Infrastructure;
using WSSAdmin = Microsoft.SharePoint.Administration;
using OSSAdmin = Microsoft.Office.Server.Administration;

namespace Microsoft.SDK.SharePointServer.Samples
{
    class GetStartedAndCreateSystem
    {
        const string yourSSPName ="EnterYourSSPNameHere";

        static void Main(string[] args)
        {
            SetupBDC();
            CreateFinderMethod();
            Console.WriteLine("Press any key to exit...");
            Console.Read();
        }
        static void SetupBDC()
        {
            SqlSessionProvider.Instance().SetSharedResourceProviderToUse(yourSSPName);
        }
        static void CreateFinderMethod()
        {

            LobSystemInstance mySysInstance = null;
            LobSystemInstanceCollection sysInsCollection = ApplicationRegistry.Instance.GetLobSystemInstancesLikeName("AdventureWorksSampleFromCode");
            foreach (LobSystemInstance sysInstance in sysInsCollection)
            {
                if (sysInstance.Name == "AdventureWorksSampleFromCode")
                {
                    mySysInstance = sysInstance;
                    break;
                }
            }
            EntityCollection entityColl = mySysInstance.LobSystem.Entities;
            foreach (Entity entity in entityColl)
            {
                if (entity.Name == "ProductModel")
                {
                    Method meth = entity.Methods.Create("GetProductModels", true, true);
                    meth.Properties.Add("RdbCommandText", "SELECT ProductModelID, Name, CatalogDescription FROM ProductModel WHERE Name LIKE @Name");
                    meth.Properties.Add("RdbCommandType", System.Data.CommandType.Text);
                    FilterDescriptor fd = meth.FilterDescriptors.Create("Name", true, "Microsoft.Office.Server.ApplicationRegistry.Runtime.WildcardFilter");
                    Parameter p1 = meth.Parameters.Create("@Name", true, Microsoft.Office.Server.ApplicationRegistry.MetadataModel.DirectionType.In, "Microsoft.Office.Server.ApplicationRegistry.Infrastructure.DotNetTypeReflector");
                    TypeDescriptor td1 = p1.CreateRootTypeDescriptor("Name", true, "System.String", null, fd, false);
                    Parameter p2 = meth.Parameters.Create("ProductModels", true, Microsoft.Office.Server.ApplicationRegistry.MetadataModel.DirectionType.Return, "Microsoft.Office.Server.ApplicationRegistry.Infrastructure.DotNetTypeReflector");
                    IList<Identifier> ids = new List<Identifier>(entity.Identifiers);
                    Identifier id = ids[0];
                    TypeDescriptor td2 = p2.CreateRootTypeDescriptor("ProductModelDataReader", true, "System.Data.IDataReader, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", null, null, true);
                    TypeDescriptor td21 = td2.ChildTypeDescriptors.Create("ProductModelDataRecord", true, "System.Data.IDataRecord, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", null, null, false);
                    TypeDescriptor td210 = td21.ChildTypeDescriptors.Create("ProductModelID", true, "System.Int32", id, null, false);
                    TypeDescriptor td211 = td21.ChildTypeDescriptors.Create("Name", true, "System.String", null, null, false);
                    TypeDescriptor td212 = td21.ChildTypeDescriptors.Create("CatalogDescription", true, "System.String", null, null, false);
                    MethodInstance methInst1 = meth.MethodInstances.Create("ProductModelFinder", true, td2, Microsoft.Office.Server.ApplicationRegistry.MetadataModel.MethodInstanceType.Finder);
                    MethodInstance methInst2 = meth.MethodInstances.Create("ProductModelSpecificFinder", true, td2, Microsoft.Office.Server.ApplicationRegistry.MetadataModel.MethodInstanceType.SpecificFinder);
                    IList<MethodInstance> methInstCollection = new List<MethodInstance>(entity.MethodInstances);
                    td1.SetDefaultValue(methInstCollection[0].Id, "%");
                    td1.SetDefaultValue(methInstCollection[1].Id, "%");
                    Console.WriteLine("Created the finder method successfully.");
                    break;
                }
            }
        }
    }
}

継承階層

System.Object
   Microsoft.Office.Server.ApplicationRegistry.Administration.MetadataObject
     Microsoft.Office.Server.ApplicationRegistry.Administration.AccessControlledMetadataObject
      Microsoft.Office.Server.ApplicationRegistry.Administration.FilterDescriptor

スレッドの安全性

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

関連項目

参照

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