次の方法で共有


TypeDescriptor

どの Parameter オブジェクトにも、パラメータのデータ型を定義する TypeDescriptor オブジェクトがあります。これは、最も複雑なメタデータ オブジェクト、つまり、プリミティブからなる抽象データ構造を再帰的に記述する階層オブジェクトです。さらに、TypeDescriptor ツリーの各リーフ ノードは、MethodInstance オブジェクトで指定される使用可能な既定値セットを指しています。したがって、MethodInstance オブジェクトとパラメータが指定されている場合、パラメータの TypeDescriptor オブジェクトによって、そのパラメータの既定値がインスタンス化されます。

TypeDescriptors in Input Parameters

入力 TypeDescriptor の IdentifierName 属性は、ビジネス データ カタログに、メソッドを実行する前に関連のエンティティ インスタンスの識別子値を挿入するように伝えます。たとえば、これが SpecificFinderMethodInstance の一部である場合、通常、ユーザーは取得するエンティティ インスタンスの識別子の値を設定しています。ビジネス データ カタログは、すべての既定値を使用してこのパラメータを完全にインスタンス化した後で、その値をこのスロットに挿入します。

入力 TypeDescriptor の AssociatedFilter 属性は、ビジネス データ カタログに、パラメータをインスタンス化した後、メソッドを実行する前に、ユーザーまたはシステムから提供された値を挿入するように伝えます。たとえば、これが FinderMethodInstance の一部である場合、ユーザーはメソッドに関連付けられている一部またはすべてのフィルタの値を設定しています。これらの値は、メソッドの実行前にタグ スロットに挿入されます。

TypeDescriptors in Return Parameters

  • データベース システムでは、戻り値パラメータのルート TypeDescriptor オブジェクトには常に IsCollection フラグが設定されています。これは、意味的なコンテキスト、つまり単一レコード (SpecificFinder/ViewAccessor) または複数レコード (Finder) のどちらが予期されているか、に関係なくデータベースからの出力はすべてレコード ストリームだからです。

    データベース システムは、レコードのストリームとしてモデル化されます。その結果、ルート TypeDescriptor はストリームになり、次のレベルの TypeDescriptor はレコードになります。レコードは列のコレクションであっても、ビジネス データ カタログでは厳密に型指定されたフィールドの構造として扱う必要があるため、IsCollection フラグは設定されません。

  • Web サービス システムでは、戻り値の TypeDescriptor オブジェクトで IsCollection フラグを使用して、戻り値パラメータ内にコレクションがあるかどうかを示します。各顧客にアドレスのコレクションが含まれている顧客のコレクションを返す WebMethod オブジェクトを考えてみます。この例では、このフラグを 2 回設定する必要があります。1 回目はルート Customer[] レベルで、2 回目は Customer[0].Address[] レベルで設定します。ただし、TypeDescriptor コレクション内では、構造を表す子 TypeDescriptor オブジェクトを 1 つしか設定できません。

戻り値パラメータ内の TypeDescriptor オブジェクトは、表示または操作のためにビジネス データ カタログによって構成され、ユーザーに返される IEntityInstance インターフェイスの Field を表します。IEntityInstance インターフェイスは、フィールドの抽象アクセス メカニズム、およびインスタンスの識別子の値を提供します。識別子の値は直接アクセスを行った場合、IEntityInstance インターフェイス内で要求されるので、どの TypeDescriptor オブジェクトが実際にそれらの値を提供するかを特定する必要があります。これを行うには、出力または戻り値の TypeDescriptor オブジェクトに IdentifierName 属性を付けます。

TypeDescriptors in Associations

AssociationMethodInstance オブジェクトでは、入力には参照元エンティティ インスタンスの識別子の値が入るスロットが、出力には参照先エンティティ インスタンスの識別子の値が入るスロットが含まれています。そのため、必要な数の入力 TypeDescriptor オブジェクトに、Association メソッドの関連付けの参照元になる各エンティティの各識別子に対応する識別子を付ける必要があります。入力 TypeDescriptor オブジェクトの IdentifierName 属性は、ビジネス データ カタログに、メソッドを実行する前に関連するエンティティ インスタンスの識別子の値を挿入するように伝えます。たとえば、AssociationMethodInstance では、通常、ユーザーは,取得する参照元エンティティ インスタンスの識別子の値を設定しています。ビジネス データ カタログは、すべての既定値を使用してこのパラメータを完全にインスタンス化した後、その値をこのスロットに挿入します。

説明

次の例は、単純なパラメータと、エンティティ インスタンス コレクションを返す複雑な戻り値パラメータを示しています。最後の例は、Web メソッドから返される DataSet のコーディングに使用されるパラメータを示しています。

コード

単純なパラメータ

<Parameter Direction="In" Name="@minCustId">
   <TypeDescriptor TypeName="System.Int32" 
   IdentifierName="CustomerID" AssociatedFilter="ID" Name="minCustId">
      <DefaultValues>
         <DefaultValue MethodInstanceName="CustFinderInstance" 
         Type="System.Int32">0</DefaultValue> 
      </DefaultValues>
   </TypeDescriptor>
</Parameter>

複雑なパラメータ

<Parameter Direction="Return" Name="Customers">
   <TypeDescriptor TypeName="System.Data.IDataReader, System.Data, 
   Version=2.0.3600.0, Culture=neutral, 
   PublicKeyToken=b77a5c561934e089" IsCollection="true" 
   Name=" CustomerDataReader">
      <TypeDescriptors>
         <TypeDescriptor TypeName="System.Data.IDataRecord, 
         System.Data, Version=2.0.3600.0, Culture=neutral, 
         PublicKeyToken=b77a5c561934e089" Name="CustomerDataRecord">
            <TypeDescriptors>
                <TypeDescriptor TypeName="System.Int32" 
                 IdentifierName="IndividualID" Name="IndividualID">
                 <LocalizedDisplayNames>
                    <LocalizedDisplayName LCID="1033">ID
                    </LocalizedDisplayName> 
                 </LocalizedDisplayNames>
               </TypeDescriptor>
               <TypeDescriptor TypeName="System.String" 
                 Name="FirstName">
                <Properties>
                  <Property Name="DisplayByDefault" 
                  Type="System.Boolean">true</Property> 
                </Properties>
            </TypeDescriptor>
            <TypeDescriptor TypeName="System.String" Name="LastName">
              <Properties>
                <Property Name="DisplayByDefault" 
                Type="System.Boolean">true</Property> 
              </Properties>
             </TypeDescriptor>
            </TypeDescriptors>
         </TypeDescriptor>
      </TypeDescriptors>
   </TypeDescriptor>
</Parameter>

DataSet

<Parameter Direction="Return" Name="Customers">
<TypeDescriptor Name=""DataSet"" TypeName=""System.Data.DataSet, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"">
                                                <TypeDescriptors>
                                                    <TypeDescriptor Name=""Tables"" TypeName=""System.Data.DataTableCollection, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"" IsCollection=""true"">
                                                        <TypeDescriptors>
                                                            <TypeDescriptor Name=""Table"" TypeName=""System.Data.DataTable, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"" >
                                                                <TypeDescriptors>
                                                                    <TypeDescriptor Name=""Rows"" TypeName=""System.Data.DataRowCollection, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"" IsCollection=""true"">
                                                                        <TypeDescriptors>
                                                                            <TypeDescriptor Name=""DataRow"" TypeName=""System.Data.DataRow, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"">
                                                                                <TypeDescriptors>
                                                                                    <TypeDescriptor Name=""field1"" TypeName=""System.String"" IdentifierName=""f1"" />
                                                                                    <TypeDescriptor Name=""field2"" TypeName=""System.String"" />
                                                                                    <TypeDescriptor Name=""field3"" TypeName=""System.String"" />
                                                                                </TypeDescriptors>
                                                                            </TypeDescriptor>
                                                                        </TypeDescriptors>
                                                                    </TypeDescriptor>
                                                                </TypeDescriptors>
                                                            </TypeDescriptor>
                                                        </TypeDescriptors>
                                                    </TypeDescriptor>
                                                </TypeDescriptors>
                                            </TypeDescriptor>
</Parameter>

スキーマ

出現回数

既定値

制限/使用する値

説明

TypeName

属性 (String)

1..1

最小長 : 1

最大長 : 255

この TypeDescriptor オブジェクトで記述される、LOB システムの型システムの型の名前。

この LOB システムの型を .NET Type に解決する、この TypeDescriptor の Parameter オブジェクトに関連付けられた ITypeReflector。

Web サービスとデータベース (ADO.NET) のどちらの場合も、"LOB システムの型システム" は .NET Type System なので、TypeName の値は .NET Type 名になります。

IdentifierName

属性 (String)

0..1

この TypeDescriptor オブジェクトによって表される識別子の名前。

この TypeDecsriptor オブジェクトが SpecificFinder メソッドの入力パラメータを記述する場合、パラメータには、FindSpecific メソッドを呼び出すときの識別子の値が格納されます。

この TypeDescriptor オブジェクトが Finder または SpecificFinder メソッドの出力パラメータを記述する場合、パラメータの値には、FindFiltered または FindSpecific を呼び出すときに返されるエンティティ インスタンスの識別子の値のコレクションに格納されます。

IdentifierEntityName

属性 (String)

0..1

この TypeDescriptor オブジェクトが含まれているエンティティ。

この TypeDescriptor オブジェクトによって表される識別子が含まれているエンティティの名前。

参照元エンティティのメソッドとして関連付けをモデル化する場合は、IdentifierEntityName が必要です。この場合、参照元エンティティは参照先エンティティのインスタンスを返すので、IdentifierEntityName プロパティを参照先エンティティの名前に設定する必要があります。

AssociatedFilter

属性 (String)

0..1

FilterDescriptor オブジェクトあたりの TypeDescriptor の最大オブジェクト数 : 10

この TypeDescriptor オブジェクトに関連付けられているフィルタの名前。

IsCollection

属性 (Boolean)

0..1

false

TypeDescriptor オブジェクトがコレクションを表すかどうかを指定します。true の場合、TypeDescriptor には、コレクション内の要素を記述する 1 つの子 TypeDescriptor を正確に格納する必要があります。

Finder メソッドの戻り値パラメータには、IsCollection = true と共に TypeDescriptor を指定する必要があります。

DefaultValues

要素

0..1

TypeDescriptor あたりの最大既定値 : 10

DefaultValue のコンテナ要素。

TypeDescriptors

要素

0..1

TypeDescriptor オブジェクトあたりの最大 TypeDescriptor オブジェクト数 : 300

TypeDescriptor のコンテナ要素。

プロパティ

TypeDescriptor オブジェクトは、戻り値パラメータのフィールドで次のプロパティを受け入れます。

重要

プロパティでは大文字と小文字が区別されます。

    プロパティ

種類

必須

既定値

制限/

使用する値

コメント

ShowInPicker

System.Boolean

いいえ

false

true

false

戻り値パラメータのフィールドでこのプロパティが true に設定されている場合、そのフィールドはビジネス データ ピッカーに表示されます。ビジネス データ ピッカーには、"ShowInPicker" プロパティが定義されているすべてのフィールドと、タイトル フィールドが表示されます。定義されているフィールドがない場合は、識別子フィールドのみが表示されます。

See Also

タスク

AdventureWorks SQL Server 2000 のサンプル

[方法] ランタイム オブジェクト モデルの使用を開始する

[方法] 管理オブジェクト モデルの使用を開始する

概念

FAQ : ビジネス データ カタログ

ビジネス データ カタログ : 用語集