Compartir a través de


TypeDescriptor

Cada objeto Parameter tiene un objeto TypeDescriptor que define el tipo de datos del parámetro. Es el objeto de metadatos más complejo, un objeto jerárquico que de forma recursiva describe una estructura de datos abstractos formada por tipos primitivos. Además, cada nodo hoja del árbol de objetos TypeDescriptor señala a un conjunto de posibles valores predeterminados especificado por el objeto MethodInstance. Por lo tanto, dado un objeto MethodInstance y un parámetro, el objeto TypeDescriptor del parámetro es una receta para crear una instancia de un valor predeterminado para ese parámetro.

TypeDescriptors in Input Parameters

El atributo IdentifierName en una entrada TypeDescriptor indica al Catálogo de datos profesionales que inserte el valor del identificador para la instancia de la entidad de relevancia antes de ejecutar el método. Por ejemplo, si esto fuera parte de una instancia SpecificFinderMethodInstance, probablemente el usuario habría proporcionado el valor del identificador para la instancia de la entidad que desea recuperar. El Catálogo de datos profesionales insertará dicho valor en esta ranura tras haber instanciado completamente este parámetro usando todos los valores predeterminados.

El atributo AssociatedFilter en una entrada TypeDescriptor indica al Catálogo de datos profesionales que inserte el valor proporcionado por el usuario o el sistema después de crear instancias del parámetro y antes de ejecutar el método. Por ejemplo, si ésta es parte de FinderMethodInstance, el usuario ha proporcionado algunos valores para algunos o todos los filtros asociados al método. Éstos se insertan en las ranuras etiquetadas antes de la ejecución del método.

TypeDescriptors in Return Parameters

  • Para los sistemas de bases de datos, el objeto raíz TypeDescriptor del parámetro de devolución siempre tiene el indicador IsCollection establecido. Esto se debe a que todos los resultados de una base de datos son una secuencia de registro independientemente del contexto semántico; es decir, tanto si se espera un solo registro (SpecificFinder/ViewAccessor) como varios registros (Finder).

    Los sistemas de bases de datos se modelan como una secuencia de registros. Como resultado, el objeto raíz TypeDescriptor es una secuencia y el objeto TypeDescriptor del siguiente nivel es un registro. Aunque un registro es una colección de columnas, no se establece el indicador IsCollection porque queremos que el Catálogo de datos profesionales lo trate como una estructura de campos escritos de manera segura.

  • En los sistemas de servicios web, use el indicador IsCollection en un objeto TypeDescriptor de devolución para indicar dónde hay colecciones del parámetro de devolución. Consideremos un objeto WebMethod que devuelve las colecciones de los clientes, donde cada cliente contiene una colección de direcciones. En este ejemplo, el indicador debe establecerse dos veces: una vez en el nivel Customer[] raíz y otra en el nivel Customer[0].Address[]. Sin embargo, una colección TypeDescriptor puede tener sólo un único objeto TypeDescriptor secundario bajo el mismo que representa la estructura de la colección.

Los objetos TypeDescriptor en el parámetro de devolución representan los campos de la interfaz IEntityInstance creados por el Catálogo de datos profesionales y devueltos al usuario para su visualización o manipulación. La interfaz IEntityInstance proporciona un mecanismo de acceso abstracto para campos y valores de identificador de la instancia. Puesto que los valores de identificador se promocionan dentro de la interfaz IEntityInstance para el acceso directo, debe identificar qué objeto TypeDescriptor en realidad proporciona estos valores. Para ello, se etiqueta el objeto TypeDescriptor de salida/devolución con el atributo IdentifierName.

TypeDescriptors in Associations

Un objeto AssociationMethodInstance contiene ranuras en la entrada para los valores de los identificadores de la instancia de la entidades de origen y una ranura en la salida para los valores de los identificadores de las instancias de las entidades de destino. Por lo tanto, debe etiquetar suficientes objetos TypeDescriptor de entrada etiquetados con identificadores que se correspondan con cada uno de los identificadores de cada una de las entidades que sea un origen en la asociación del método Association. El atributo IdentifierName en un objeto TypeDescriptor de entrada indica al Catálogo de datos profesionales que inserte el valor del identificador para la instancia de la entidad de relevancia antes de ejecutar el método. Por ejemplo, en un objeto AssociationMethodInstance, probablemente el usuario habrá proporcionado el valor del identificador para la instancia de la entidad que desea recuperar. El Catálogo de datos profesionales insertará dicho valor en esta ranura tras haber instanciado completamente este parámetro usando todos los valores predeterminados.

Ejemplos

Descripción

Los ejemplos siguientes muestran un parámetro sencillo y un parámetro de devolución más complejo que devuelven una colección de instancias de entidad. En el último ejemplo se muestra un parámetro que se usa para codificar un DataSet devuelto desde un método web.

Código

Parámetro sencillo

<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>

Parámetro complejo

<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>

Esquema

Secundario Tipo Aparece Valor predeterminado Límites / Valores aceptados Descripción

TypeName

Atributo (String)

1..1

Longitud mín.: 1

Longitud máx.: 255

Nombre del tipo en el sistema de tipos del sistema de LOB que describe este objeto TypeDescriptor.

El parámetro ITypeReflector asociado al objeto Parameter de este objeto TypeDescriptor encargado de resolver este tipo de sistema de LOB en un Type .NET.

En el caso de los servicios web y las bases de datos (ADO.NET), el "sistema de tipos del sistema de LOB" es el sistema de tipos .NET, por lo que el valor de TypeName es un nombre Type.

IdentifierName

Atributo (String)

0..1

Nombre del identificador representado por este objeto TypeDescriptor.

Si este objeto TypeDescriptor describe un parámetro de entrada de un método SpecificFinder , el parámetro se rellena con el valor del identificador cuando llama al método FindSpecific.

Si este objeto TypeDescriptor describe un parámetro de salida o un método Finder o SpecificFinder , el valor del parámetro se incluye en la colección de valores de identificador de instancias de entidad devueltas cuando se llama a FindFiltered o FindSpecific.

IdentifierEntityName

Atributo (String)

0..1

La entidad que contiene este objeto TypeDescriptor .

Nombre de la entidad que contiene el identificador representado por este objeto TypeDescriptor.

IdentifierEntityName es necesario cuando se modela una asociación como método en una entidad de origen. En este caso, la entidad de origen devuelve instancias de la entidad de destino, por lo que es preciso establecer la propiedad IdentifierEntityName en el nombre de la entidad de destino.

AssociatedFilter

Atributo (String)

0..1

Número máximo de objetos TypeDescriptor por cada objeto FilterDescriptor : 10

Nombre del filtro asociado con este objeto TypeDescriptor.

IsCollection

Atributo (Boolean)

0..1

false

Especifica si el objeto TypeDescriptor representa una colección. Si es true, el objeto TypeDescriptor debe contener exactamente un objeto TypeDescriptor secundario que describa un elemento de la colección.

El parámetro de devolución de un método Finder debe tener un objeto TypeDescriptor con IsCollection = true.

DefaultValues

Elemento

0..1

Valores predeterminados máximos por TypeDescriptor: 10

Elemento contenedor para DefaultValue.

TypeDescriptors

Elemento

0..1

Número máximo de objetos TypeDescriptor por cada objeto TypeDescriptor: 300

Elemento contenedor para TypeDescriptor.

Propiedades

El objeto TypeDescriptor acepta la siguiente propiedad en los campos de un parámetro de devolución.

Importante

Las propiedades distinguen entre mayúsculas y minúsculas.

Propiedad Tipo Obligatoria Valor predeterminado Límites/ Valores aceptados Comentarios

ShowInPicker

System.Boolean

No

false

true

false

Si esta propiedad se establece en true en un campo de un parámetro de devolución, ese campo se mostrará en el selector de datos profesionales. El Catálogo de datos profesionales muestra todos los campos que tengan definida la propiedad "ShowInPicker", además del campo de título en el selector de datos profesionales. Si no hay ninguno, sólo muestra el campo de identificador.

Vea también

Otros recursos

Ejemplo de SQL Server 2000 de AdventureWorks
Procedimiento para familiarizarse con el uso del modelo de objetos Runtime
Procedimiento para empezar a usar el modelo de objetos Administración
Preguntas más frecuentes sobre el Catálogo de datos profesionales
Catálogo de datos profesionales: glosario