Crear filas de tabla con SDK para .NET

Este artículo incluye ejemplos que usan estilos de programación con enlace tardío y con enlace temprano. Más información:

Creación básica

Los siguientes ejemplos muestran cómo crear una fila de tabla utilizando el estilo de programación de enlace tardío y enlace temprano.

Cada uno de los ejemplos usa una variable svc que representa una instancia de una clase que implementa los métodos en la interfaz IOrganizationService. Para obtener más información sobre las clases que admiten esta interfaz, consulte Interfaz IOrganizationService.

Nota

Cada tabla tiene una columna de clave primaria con un identificador único, que puede especificarse al crear una fila. En la mayoría de los casos debe permitir que el sistema lo establezca automáticamente porque los valores generados por el sistema se optimizan para el máximo rendimiento.

Dataverse almacena los datos de clave principal en telemetría para ayudar a mantener el servicio. Si especifica valores de clave principal personalizados, no use información confidencial en esos valores.

Con tablas elásticas, puede crear registros con valores de clave primaria duplicados y distintos valores de partitionid. Sin embargo, este patrón no es compatible con Power Apps basadas en modelo o de lienzo. Obtenga información sobre cómo configurar el valor de la clave principal con tablas elásticas

El siguiente ejemplo muestra cómo se usa la clase Entity generada para crear una cuenta utilizando el método IOrganizationService.Create.

//Use Entity class with entity logical name
var account = new Entity("account");

// set attribute values
    // string primary name
    account["name"] = "Contoso";
    // Boolean (Two option)
    account["creditonhold"] = false;
    // DateTime
    account["lastonholdtime"] = new DateTime(2017, 1, 1);
    // Double
    account["address1_latitude"] = 47.642311;
    account["address1_longitude"] = -122.136841;
    // Int
    account["numberofemployees"] = 500;
    // Money
    account["revenue"] = new Money(new decimal(5000000.00));
    // Picklist (Option set)
    account["accountcategorycode"] = new OptionSetValue(1); //Preferred customer

//Create the account
Guid accountid = svc.Create(account);

Usar la clase CreateRequest

En lugar de usar el método IOrganizationService.Create, puede usar ya sea la clase Entity de enlace tardío o las clases de entidad generadas de enlace anticipado con CreateRequest, estableciendo la instancia de la entidad en la propiedad CreateRequest.Target y luego utilizando el método IOrganizationService.Execute para obtener una instancia de CreateResponse. El id. de la fila de la tabla de la cuenta creada estará en el valor de la propiedad CreateResponse.id.

var request = new CreateRequest() { Target = account };
var response  = (CreateResponse)svc.Execute(request);
Guid accountid = response.id;

Cuando utilizar la clase CreateRequest

Debe usar la clase CreateRequest si desea pasar parámetros opcionales. Hay dos casos donde es posible que necesite parámetros especiales.

Usar la clase CreateMultipleRequest

Cuando necesite crear varios registros del mismo tipo, la clase CreateMultipleRequest es la forma más eficaz. Más información: mensajes de operación masiva

Para tablas estándar, cuando crea una nueva fila de tabla, también puede crear filas relacionadas en la misma operación. Esto se llama deep insert.

Los siguientes ejemplos late-bound y early-bound crearán una Account y un Contact relacionados con esa cuenta mediante la relación de uno a varios contact account_primary_contact, donde la búsqueda de account primarycontactid es la búsqueda de ReferencingAttribute.

Los ejemplos también crean tres filas Tarea usando la relación de uno a varios Account_Tasks de la cuenta, donde la búsqueda de regardingobjectid de la tarea es ReferencingAttribute.

En el estilo de enlace tardío, debe agregar explícitamente una o más entidades relacionadas (filas) a EntityCollection y luego usar la clase Relationship para especificar la relación usando el SchemaName de la relación antes de poder agregarlas a la propiedad Entity.RelatedEntities.

// Use Entity class with entity logical name
var account = new Entity("account");

// Set attribute values
    // string primary name
    account["name"] = "Sample Account";

// Create Primary contact
var primaryContact = new Entity("contact");
primaryContact["firstname"] = "John";
primaryContact["lastname"] = "Smith";

// Add the contact to an EntityCollection
EntityCollection primaryContactCollection = new EntityCollection();
primaryContactCollection.Entities.Add(primaryContact);

// Set the value to the relationship
account.RelatedEntities[new Relationship("account_primary_contact")] = primaryContactCollection;

// Add related tasks to create
var taskList = new List<Entity>() {
            new Entity("task") { ["subject"] = "Task 1" },
            new Entity("task") { ["subject"] = "Task 2" },
            new Entity("task") { ["subject"] = "Task 3" }
        };

// Add the tasks to an EntityCollection
EntityCollection tasks = new EntityCollection(taskList);

// Set the value to the relationship
account.RelatedEntities[new Relationship("Account_Tasks")] = tasks;

// Create the account
Guid accountid = svc.Create(account);

Asociar filas de tabla en la creación

Puede asociar cualquier fila nueva con una fila existente cuando la crea de la misma manera que lo haría al actualizarla. Debe usar un EntityReference para establecer el valor de una columna de búsqueda (atributo).

Esta asignación de búsqueda es la misma para los estilos de enlace temprano y tardío.

//Use Entity class with entity logical name
var account = new Entity("account");

// set attribute values
    //string primary name
    account["name"] = "Sample Account";

Guid primarycontactid = new Guid("e6fa5509-2582-e811-a95e-000d3af40ae7");

account["primarycontactid"] = new EntityReference("contact", primarycontactid);

//Create the account
Guid accountid = svc.Create(account);

Usa teclas alternativas

Si no conoce el ID de la fila de la tabla y se cumplen las siguientes condiciones:

  • Ha configurado claves alternativas para la tabla
  • Conoces los valores clave

Puede usar los constructores EntityReference alternativos mediante los parámetros keyName y keyValue.

account["primarycontactid"] = new EntityReference("contact", "sample_username", "john.smith123");

Nota

Las claves alternativas se usan normalmente solo para los escenarios de integración de datos

Más información:

Comprobar registros duplicados

Más información: Detectar datos duplicados usando SDK para .NET

Establecer valores predeterminados a partir de la fila de la tabla principal

Cuando las personas crean nuevas filas en la aplicación, generalmente se crean en el contexto de otra fila. Por ejemplo, puede crear una nueva fila de contacto en el contexto de una cuenta. Cuando esto sucede, ciertos valores de columna de la cuenta se copian en el formulario de contacto. Esto acelera la creación de la nueva fila relacionada porque la nueva fila tendrá algunos valores predeterminados establecidos para que la persona que edita la fila que se va a crear no necesite ingresar esos valores. Pueden cambiar los valores si quieren antes de guardar.

Los valores que se copiarán cuando se cree una nueva fila de esta manera se controlan mediante configuraciones aplicadas al entorno de Microsoft Dataverse, por lo que pueden variar entre entornos.

Más información:

Como desarrollador, puede usar la clase InitializeFromRequest para generar una instancia de entidad con valores predeterminados ya establecidos.

El siguiente código creará un nuevo contacto asociado a una cuenta existente. El contacto está asociado con la cuenta especificada, y ciertos valores de atributo, como Telephone1, así como varios valores de dirección compartidos entre la cuenta y el contacto, se establecen de forma predeterminada.

//The account that the contact will be associated with:
var parentAccount = new EntityReference("account", new Guid("a976763a-ba1c-e811-a954-000d3af451d6"));

// Initialize a new contact entity with default values from the account.
var request = new InitializeFromRequest()
{
    EntityMoniker = parentAccount,
    TargetEntityName = "contact"

};

var response = (InitializeFromResponse)svc.Execute(request);
//Get the Entity from the response
Entity contact = response.Entity;

// Set values that are not from the account
contact["firstname"] = "Joe";
contact["lastname"] = "Smith";

// Create the contact
Guid contactid = svc.Create(contact);

Usar upsert

Otra forma de crear una fila de la tabla es usando la clase UpsertRequest. Un upsert creará una nueva fila cuando no exista una fila que tenga los identificadores únicos incluidos en la fila pasada con la solicitud.

Más información: Usar upsert

Crear documentos en particiones de almacenamiento

Si está creando una gran cantidad de filas de tabla elástica que contienen datos no relacionales, puede crear las filas en particiones de almacenamiento para acelerar el acceso a esas filas. Más información: Particionamiento y escalado horizontal

Consulte también

Recuperar una fila de tabla usando SDK para .NET
Actualizar y eliminar filas de tablas usando SDK para .NET
Asociar y anular la asociación de filas de tabla mediante la SDK para .NET