Crear tablas elásticas mediante código
Al usar Power Apps puede crear y editar tablas elásticas sin escribir código.
Sin embargo, a veces es útil usar código para crear y actualizar definiciones de tabla. Los siguientes ejemplos muestran cómo usar el Dataverse SDK para .NET y API web para crear una nueva tabla elástica que tenga el nombre de esquema contoso_SensorData
. Utilice la propiedad EntityMetadata.TableType
con un valor de Elastic
para crear una tabla elástica con código. Si no establece TableType
, el valor predeterminado es Standard
y se crea una tabla estándar.
public static CreateEntityResponse CreateElasticTable(IOrganizationService service)
{
var request = new CreateEntityRequest
{
// Define table properties
Entity = new EntityMetadata
{
SchemaName = "contoso_SensorData",
DisplayName = new Label("SensorData", 1033),
DisplayCollectionName = new Label("SensorData", 1033),
Description = new Label("Stores IoT data emitted from devices", 1033),
OwnershipType = OwnershipTypes.UserOwned,
TableType = "Elastic",
IsActivity = false,
CanCreateCharts = new Microsoft.Xrm.Sdk.BooleanManagedProperty(false)
},
// Define the primary attribute for the entity
PrimaryAttribute = new StringAttributeMetadata
{
SchemaName = "contoso_SensorType",
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
MaxLength = 100,
FormatName = StringFormatName.Text,
DisplayName = new Label("Sensor Type", 1033),
Description = new Label("Type of sensor emitting data", 1033)
}
};
return (CreateEntityResponse)service.Execute(request);
}
CreateEntityResponse tiene estas propiedades:
- AttributeId: el ID de la columna de cadena de nombre principal
contoso_SensorType
. - EntityId: ID de la tabla
contoso_SensorData
.
Obtenga más información sobre cómo crear tablas personalizadas con el SDK para .NET.
Adición de columnas
Puede crear columnas en tablas elásticas sin escribir código usando Power Apps.
También puede crear columnas mediante el SDK o la API web. Sin embargo, existen límites en los tipos de columnas que puede agregar. Actualmente no puede agregar estos tipos de columnas:
- Money (
MoneyAttributeMetadata
) - MultiSelectPicklist (
MultiSelectPicklistAttributeMetadata
) - State (
StateAttributeMetadata
) - Status (
StatusAttributeMetadata
) - Imagen (
ImageAttributeMetadata
) - Columnas calculadas, consolidadas o de fórmulas
Las tablas elásticas admiten columnas de cadenas que almacenan datos de notación de objetos JavaScript (JSON).
Crear una columna con formato JSON
Este ejemplo crea una columna de cadena contoso_SensorValue
con formato JSON en la tabla elástica contoso_SensorData
. Para los casos en los que se debe almacenar una gran cantidad de datos JSON, puede utilizar el tipo de columna MemoAttributeMetadata
con formato JSON en lugar de usar el tipo de columna StringAttributeMetadata
.
Esta función crea una columna StringAttributeMetadata usando la clase CreateAttributeRequest.
public static Guid CreateJsonAttribute(IOrganizationService service)
{
var request = new CreateAttributeRequest
{
EntityName = "contoso_sensordata",
Attribute = new StringAttributeMetadata
{
SchemaName = "contoso_EnergyConsumption",
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
MaxLength = 1000,
FormatName = StringFormatName.Json,
DisplayName = new Label("Energy Consumption", 1033),
Description = new Label("Contains information about energy consumed by the IoT devices", 1033)
},
SolutionUniqueName = "examplesolution"
};
var response = (CreateAttributeResponse)service.Execute(request);
return response.AttributeId;
}
Para obtener más información, vaya a Agregue una columna de cadena a la tabla personalizada.
Claves alternativas
No puede crear claves alternativas personalizadas para tablas elásticas.
Cada tabla elástica se crea con un clave alternativa utilizando estos valores:
- Nombre para mostrar: Clave de la entidad NoSql que contiene los atributos PrimaryKey y PartitionId
- Nombre:
KeyForNoSqlEntityWithPKPartitionId
- LogicalName:
keyfornosqlentitywithpkpartitionid
Este clave alternativa tiene los valores clave <table primary key name>
y partitionid
.
Si necesita hacer referencia a un registro que tiene un conjunto de valores partitionid
, puede referenciarlo usando este clave alternativa.
Obtenga más información sobre el uso de un clave alternativa para hacer referencia a un registro.
Agregar relaciones
Dataverse actualmente no admite la creación de relaciones muchos a muchos con tablas elásticas.
Las relaciones uno a varios son compatibles con tablas elásticas con las siguientes limitaciones:
La cascada no se admite. El comportamiento en cascada debe establecerse en
Cascade.None
al crear una relación.Los valores con formato para las columnas de búsqueda no se devuelven cuando se cumplen las siguientes condiciones:
- La tabla que se recupera es una tabla estándar y la búsqueda se refiere a una tabla elástica.
- Está usando un valor
partitionid
de tabla elástica personalizada. En otras palabras, el valorpartitionid
se establece en algo distinto al valor predeterminado (nulo). Más información sobre cómo elegir un valor de partitionid.
Las tablas elásticas admiten relaciones uno a varios y las filas relacionadas se pueden recuperar al recuperar un registro. Los registros relacionados no se pueden incluir en una consulta. Más información sobre cómo devolver filas relacionadas en una consulta.
Columna de valor de Partitionid en la tabla de referencia
Cuando crea una relación de muchos a uno en una tabla que hace referencia a una tabla elástica, se crea una columna de búsqueda en la tabla de referencia como era de esperar.
Al mismo tiempo, se crea una columna de cadena que sigue esta convención de nomenclatura <lookup name>pid
. Esta columna almacena el valor partitionid
del registro de la tabla elástica relacionada.
El valor de la columna <lookup name>pid
se establece automáticamente cuando usa la tabla elástica clave alternativa para configurar la columna de búsqueda. Aprenda a asociar registros de tabla elástica
Si usted no está usando una estrategia de partición para su tabla elástica, el valor para esta columna <lookup name>pid
es nulo y no debe cambiarla después de crear el registro.
Si usted está utilizando una estrategia de partición para su tabla elástica y desea recuperar el registro de la tabla elástica relacionado, no puede confiar únicamente en el valor de la columna de búsqueda. También debe incluir el valor partitionid
de la columna <lookup name>pid
para identificar de forma única la tabla relacionada. Más información sobre particionamiento y escalado horizontal
Pasos siguientes
Consulte también
Tablas elásticas para desarrolladores
Consultar columnas JSON en tablas elásticas
Usar mensajes de operación en masa
Código de ejemplo de tablas elásticas