Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Mediante el uso de columnas de búsqueda de múltiples tablas, a veces denominadas búsquedas polimórficas, es posible emplear una tabla específica que tiene varias relaciones de uno a varios (1:N) con otras tablas del entorno. Una sola columna de tipo de búsqueda puede hacer referencia a otras tablas. Un valor de búsqueda enviado a la columna de tipo de varias tablas coincide con un registro en cualquiera de las tablas relacionadas. Puede crear búsquedas de varias tablas con tablas locales y tablas virtuales como tablas a las que se hace referencia.
Microsoft Dataverse actualmente incluye tipos de tablas múltiples como tipos estáticos, como Cliente, que se conecta a las tablas Account y Contact. Mediante búsquedas de varias tablas, puede definir cualquier otra búsqueda de varias tablas que necesite.
Nota
Puede crear y modificar búsquedas personalizadas de varias tablas a través del SDK para .NET o Dataverse Web API. La compatibilidad con la interfaz de usuario interactiva estará disponible en una versión futura.
Ejemplo: El ejemplo de búsqueda de varias tablas de Web API (PowerShell) contiene el código de ejemplo que muestra el ejemplo presentado en este artículo.
Recuperación de datos sobre tablas relacionadas
Para recuperar información sobre las tablas relacionadas con una columna de búsqueda, incluidas las búsquedas de varias tablas, use uno de los métodos siguientes: recuperar la propiedad de búsqueda o expandir la propiedad de navegación con un solo valor.
Recuperar la propiedad de consulta
Cada columna de búsqueda tiene una propiedad de búsqueda correspondiente que puede recuperar mediante la opción de consulta. Estas propiedades siguen la convención de nomenclatura: . es el nombre lógico de la columna de búsqueda. El valor de la propiedad de búsqueda es el identificador único del registro relacionado, si existe.
Para una búsqueda de varias tablas, el identificador único no es útil a menos que sepa a qué tabla se aplica. Al recuperar datos de cualquier columna de búsqueda, puede aplicar las siguientes preferencias de anotación de OData. Estas opciones de preferencia son especialmente útiles con una búsqueda de varias tablas porque proporcionan más datos del registro relacionado e información sobre la tabla de la que proceden los datos.
| Anotación | Descripción |
|---|---|
OData.Community.Display.V1.FormattedValue |
Devuelve el valor de columna de nombre principal del registro establecido actualmente en esta columna. |
Microsoft.Dynamics.CRM.associatednavigationproperty |
Devuelve el nombre de la propiedad de navegación de un solo valor que admite el registro actualmente establecido en esta columna. |
Microsoft.Dynamics.CRM.lookuplogicalname |
Devuelve el nombre lógico de la tabla para el registro establecido actualmente en esta columna. |
Nota
Usa las propiedades de búsqueda para recuperar el valor formateado y los metadatos auxiliares necesarios para expandir la propiedad de navegación de un solo valor y así obtener más información.
Obtenga más información sobre cómo recuperar datos de propiedades de búsqueda.
Expandir la propiedad de navegación de valor único
Al crear una búsqueda de varias tablas, se requiere que cada tabla tenga una relación independiente de uno a varios. Cada relación agrega una propiedad de navegación distinta y de valor único.
El nombre de esta propiedad de navegación con un solo valor se almacena en la propiedad OneToManyRelationshipMetadata.ReferencingEntityNavigationPropertyName . Un error común es cuando las personas intentan adivinar el valor de esta propiedad que distingue mayúsculas de minúsculas. Hay tres maneras de determinar definitivamente el nombre correcto de esta propiedad de navegación:
- Recupere los metadatos de la relación. Obtenga más información sobre las opciones para recuperar definiciones de esquema de Dataverse.
- Descargue y revise el documento de $metadata CSDL. Obtenga información sobre cómo identificar estas propiedades de navegación de un solo valor en el documento de servicio $metadata.
-
Retrieve la propiedad de búsqueda e incluya las preferencias de anotación de
Microsoft.Dynamics.CRM.associatednavigationpropertyOData.
Al consultar la tabla, use la opción de consulta con la propiedad de navegación de un solo valor para incluir la tabla relacionada. Obtenga más información sobre cómo combinar tablas relacionadas mediante la opción de consulta OData.
Ejemplo
Supongamos que hospeda medios para los usuarios de una biblioteca. Tiene muchos objetos multimedia diferentes. Muchos de ellos tienen el mismo nombre, pero están en diferentes formatos, como libros, audio y vídeo.
En este ejemplo, tres tablas admiten cada tipo específico de medio:
- incluye y columnas.
- incluye y columnas.
- incluye y columnas.
La tabla tiene una búsqueda en varias tablas con el nombre del esquema. Puede establecer la columna de búsqueda para hacer referencia a registros en cualquiera de las tres tablas multimedia específicas.
Tabla
La tabla es la primera de las tres tablas relacionadas. Esta consulta simple recupera los dos registros que se encuentran en esta tabla.
GET [Organization URI]/api/data/v9.2/sample_books?$select=sample_name,sample_callnumber
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
En este ejemplo se muestra el cuerpo JSON de la respuesta:
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#sample_books(sample_name,sample_callnumber)",
"value": [
{
"@odata.etag": "W/\"171704230\"",
"sample_callnumber": "ww-3452 ",
"sample_bookid": "00000000-0000-0000-0000-000000000001",
"sample_name": "Content1"
},
{
"@odata.etag": "W/\"171704235\"",
"sample_callnumber": "a4e-87hw",
"sample_bookid": "00000000-0000-0000-0000-000000000005",
"sample_name": "Content2"
}
]
}
Tabla
La tabla es la segunda de las tres tablas relacionadas. Esta consulta simple recupera los dos registros de esta tabla.
GET [Organization URI]/api/data/v9.2/sample_audios?$select=sample_name,sample_audioformat
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
En este ejemplo se muestra el cuerpo JSON de la respuesta:
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#sample_audios(sample_name,sample_audioformat)",
"value": [
{
"@odata.etag": "W/\"171704242\"",
"sample_audioid": "00000000-0000-0000-0000-000000000002",
"sample_audioformat": "mp4",
"sample_name": "Content1"
},
{
"@odata.etag": "W/\"171704246\"",
"sample_audioid": "00000000-0000-0000-0000-000000000004",
"sample_audioformat": "wma",
"sample_name": "Content3"
}
]
}
Tabla
La tabla es la tercera de las tres tablas relacionadas. Esta consulta simple recupera los dos registros de esta tabla.
GET [Organization URI]/api/data/v9.2/sample_videos?$select=sample_name,sample_videoformat
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
En este ejemplo se muestra el cuerpo JSON de la respuesta:
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#sample_videos(sample_name,sample_videoformat)",
"value": [
{
"@odata.etag": "W/\"171704254\"",
"sample_name": "Content2",
"sample_videoformat": "avi",
"sample_videoid": "00000000-0000-0000-0000-000000000006"
},
{
"@odata.etag": "W/\"171704250\"",
"sample_name": "Content3",
"sample_videoformat": "wmv",
"sample_videoid": "00000000-0000-0000-0000-000000000003"
}
]
}
Tabla
Esta tabla tiene una columna de búsqueda de varias tablas con el nombre de esquema y el nombre lógico.
Para esta demostración, esta tabla contiene solo cuatro registros relacionados con los registros auxiliares:
sample_name |
valor | tipo |
|---|---|---|
| Objeto multimedia uno | 00000000-0000-0000-0000-000000000001 | sample_book |
| Elemento multimedia dos | 00000000-0000-0000-0000-000000000002 | sample_audio |
| Recurso multimedia 3 | 00000000-0000-0000-0000-000000000003 | sample_video |
| Elemento Multimedia Cuatro | 00000000-0000-0000-0000-000000000004 | sample_audio |
Recuperación de datos relacionados
Usando la tabla, la siguiente consulta de ejemplo:
- Selecciona la propiedad de búsqueda en la opción de consulta para la columna buscada. Con las preferencias de
OData.Community.Display.V1.FormattedValue,Microsoft.Dynamics.CRM.associatednavigationpropertyyMicrosoft.Dynamics.CRM.lookuplogicalnameodata.include-annotations, obtiene estos valores con cada registro. - Expande tres propiedades de navegación con valores únicos, una para cada tabla relacionada. Para cada propiedad de navegación expandida, se selecciona la columna de nombre principal () así como el valor de columna personalizada correspondiente: , , .
Nota
Solo una de las tres navegaciones expandidas univaluadas podría tener datos. Las tres serán nulas si no se establece la columna de búsqueda.
Estas operaciones muestran cómo se relacionan los registros de tabla a través de la columna de búsqueda.
Solicitud
GET [Organization URI]
/api/data/v9.2/sample_medias
?$select=sample_name,_sample_mediapolymorphiclookup_value
&$expand=sample_MediaPolymorphicLookup_sample_book(
$select=sample_name,sample_callnumber),
sample_MediaPolymorphicLookup_sample_audio(
$select=sample_name,sample_audioformat),
sample_MediaPolymorphicLookup_sample_video(
$select=sample_name,sample_videoformat)
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue,Microsoft.Dynamics.CRM.associatednavigationproperty,Microsoft.Dynamics.CRM.lookuplogicalname"
Nota
Para mejorar la legibilidad, la dirección URL se muestra entre varias líneas. Al realizar la solicitud, quite todos los saltos de línea y el espacio en blanco para que la dirección URL sea una sola cadena continua.
Respuesta
Al establecer estas opciones de consulta y encabezados de preferencias, el cuerpo de la respuesta contiene el siguiente JSON:
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#sample_medias(sample_name,_sample_mediapolymorphiclookup_value,sample_MediaPolymorphicLookup_sample_book(sample_name),sample_MediaPolymorphicLookup_sample_audio(sample_name,sample_audioformat),sample_MediaPolymorphicLookup_sample_video(sample_name))",
"value": [
{
"@odata.etag": "W/\"171704264\"",
"sample_mediaid": "00000000-0000-0000-0000-000000000007",
"sample_name": "Media Object One",
"_sample_mediapolymorphiclookup_value@OData.Community.Display.V1.FormattedValue": "Content1",
"_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "sample_MediaPolymorphicLookup_sample_book",
"_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.lookuplogicalname": "sample_book",
"_sample_mediapolymorphiclookup_value": "00000000-0000-0000-0000-000000000001",
"sample_MediaPolymorphicLookup_sample_book": {
"sample_bookid": "00000000-0000-0000-0000-000000000001",
"sample_name": "Content1",
"sample_callnumber": "ww-3452"
},
"sample_MediaPolymorphicLookup_sample_audio": null,
"sample_MediaPolymorphicLookup_sample_video": null
},
{
"@odata.etag": "W/\"171704268\"",
"sample_mediaid": "00000000-0000-0000-0000-000000000008",
"sample_name": "Media Object Two",
"_sample_mediapolymorphiclookup_value@OData.Community.Display.V1.FormattedValue": "Content1",
"_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "sample_MediaPolymorphicLookup_sample_audio",
"_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.lookuplogicalname": "sample_audio",
"_sample_mediapolymorphiclookup_value": "00000000-0000-0000-0000-000000000002",
"sample_MediaPolymorphicLookup_sample_book": null,
"sample_MediaPolymorphicLookup_sample_audio": {
"sample_audioid": "00000000-0000-0000-0000-000000000002",
"sample_name": "Content1",
"sample_audioformat": "mp4"
},
"sample_MediaPolymorphicLookup_sample_video": null
},
{
"@odata.etag": "W/\"171704273\"",
"sample_mediaid": "00000000-0000-0000-0000-000000000009",
"sample_name": "Media Object Three",
"_sample_mediapolymorphiclookup_value@OData.Community.Display.V1.FormattedValue": "Content3",
"_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "sample_MediaPolymorphicLookup_sample_video",
"_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.lookuplogicalname": "sample_video",
"_sample_mediapolymorphiclookup_value": "00000000-0000-0000-0000-000000000003",
"sample_MediaPolymorphicLookup_sample_book": null,
"sample_MediaPolymorphicLookup_sample_audio": null,
"sample_MediaPolymorphicLookup_sample_video": {
"sample_videoid": "00000000-0000-0000-0000-000000000003",
"sample_name": "Content3",
"sample_videoformat": "wmv"
}
},
{
"@odata.etag": "W/\"171704279\"",
"sample_mediaid": "00000000-0000-0000-0000-000000000010",
"sample_name": "Media Object Four",
"_sample_mediapolymorphiclookup_value@OData.Community.Display.V1.FormattedValue": "Content3",
"_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "sample_MediaPolymorphicLookup_sample_audio",
"_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.lookuplogicalname": "sample_audio",
"_sample_mediapolymorphiclookup_value": "00000000-0000-0000-0000-000000000004",
"sample_MediaPolymorphicLookup_sample_book": null,
"sample_MediaPolymorphicLookup_sample_audio": {
"sample_audioid": "00000000-0000-0000-0000-000000000004",
"sample_name": "Content3",
"sample_audioformat": "wma"
},
"sample_MediaPolymorphicLookup_sample_video": null
}
]
}
Establecimiento de una columna de búsqueda de varias tablas
Actualizar un registro para configurar una columna de búsqueda polimórfica es tal y como se describe en Asociar con una propiedad de navegación de valor único. Utiliza el nombre correcto de la propiedad de navegación de valor único. Estos nombres son sensibles a mayúsculas y minúsculas.
En este ejemplo se muestra cómo actualizar un valor mediante .
Solicitud
PATCH [Organization Uri]/api/data/v9.2/sample_medias(00000000-0000-0000-0000-000000000007) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"sample_MediaPolymorphicLookup_sample_book@odata.bind": "sample_books(00000000-0000-0000-0000-000000000001)"
}
Respuesta
HTTP/1.1 204 NoContent
OData-Version: 4.0
Creación de una columna de búsqueda de varias tablas
Nota
En el ejemplo siguiente se muestra cómo usar la API web de Dataverse. También puede usar el SDK para .NET con las clases /CreatePolymorphicLookupAttributeRequest y CreatePolymorphicLookupAttributeResponse.
Use la acción CreatePolymorphicLookupAttribute para crear una búsqueda de varias tablas. En este ejemplo se crea la columna como parte de una solución con un nombre único mediante el parámetro opcional MSCRM.SolutionUniqueName.
Solicitud
POST [Organization URI]/api/data/v9.2/CreatePolymorphicLookupAttribute HTTP/1.1
Consistency: Strong
Accept: application/json
OData-MaxVersion: 4.0
Authorization: Bearer [REDACTED]
MSCRM.SolutionUniqueName: polymorphiclookupexamplesolution
OData-Version: 4.0
{
"OneToManyRelationships": [
{
"ReferencedEntity": "sample_book",
"SchemaName": "sample_media_sample_book",
"ReferencingEntity": "sample_media"
},
{
"ReferencedEntity": "sample_audio",
"SchemaName": "sample_media_sample_audio",
"ReferencingEntity": "sample_media",
"CascadeConfiguration": {
"Assign": "NoCascade",
"Share": "NoCascade",
"Delete": "RemoveLink",
"Merge": "NoCascade",
"Reparent": "NoCascade",
"Unshare": "NoCascade"
}
},
{
"ReferencedEntity": "sample_video",
"SchemaName": "sample_media_sample_video",
"ReferencingEntity": "sample_media",
"CascadeConfiguration": {
"Assign": "NoCascade",
"Share": "NoCascade",
"Delete": "RemoveLink",
"Merge": "NoCascade",
"Reparent": "NoCascade",
"Unshare": "NoCascade"
}
}
],
"Lookup": {
"AttributeTypeName": {
"Value": "LookupType"
},
"SchemaName": "sample_MediaPolymorphicLookup",
"Description": {
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Polymorphic lookup that can reference a Book, Audio, or Video record",
"LanguageCode": 1033
}
],
"@odata.type": "Microsoft.Dynamics.CRM.Label"
},
"AttributeType": "Lookup",
"DisplayName": {
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Media",
"LanguageCode": 1033
}
],
"@odata.type": "Microsoft.Dynamics.CRM.Label"
},
"@odata.type": "Microsoft.Dynamics.CRM.ComplexLookupAttributeMetadata"
}
}
El siguiente JSON es un ejemplo del ComplexType CreatePolymorphicLookupAttributeResponse. Contiene el identificador del atributo polimórfico y todas las relaciones creadas.
{
"@odata.context":
"http://<organization URL>/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.CreatePolymorphicLookupAttributeResponse",
"RelationshipIds":[
"77d4c6e9-0397-eb11-a81c-000d3a6cfaba",
"7ed4c6e9-0397-eb11-a81c-000d3a6cfaba",
"85d4c6e9-0397-eb11-a81c-000d3a6cfaba"
],
"AttributeId":"d378dd3e-42f4-4bd7-95c7-0ee546c7de40"
}
Agregar relación a la columna de búsqueda de múltiples tablas existente
Agregar una relación a una columna de búsqueda de varias tablas existente mediante la API web es similar a crear cualquier nueva relación uno a varios. Aprenda a crear una relación de uno a varios mediante la API web. La diferencia es que la propiedad OneToManyRelationshipMetadata debe tener un valor que coincida con la columna de búsqueda polimórfica existente.
Eliminar una relación de una columna de búsqueda de varias tablas existente
Quitar una relación de una columna de búsqueda de varias tablas existente mediante la API web es igual que eliminar cualquier relación de uno a muchos. Envíe una solicitud al punto de conexión mediante el valor de la propiedad OneToManyRelationshipMetadata como clave.
Consulte también
Ejemplo: Ejemplo de búsqueda de varias tablas de Web API (PowerShell)
Uso de la API web con definiciones de tabla
Crear y actualizar relaciones de tablas
Consultar definiciones de tabla con la API web
Recuperar definiciones de tabla por nombre o MetadataId
Modelar tablas y columnas mediante la API web
Ejemplo de operaciones de esquema de tabla de API web
Ejemplo de operaciones de esquema de tabla de API web (C#)