Crear filas de tabla con SDK para .NET

Este artículo incluye ejemplos que usan los de enlace en tiempo de ejecución y enlace en tiempo de compilación. Más información:

Crear básico

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 principal de identificador único que puede especificar 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.

Con tablas elásticas, puede crear registros con valores de clave primaria duplicados y diferentes valores partitionid. Sin embargo, este patrón no es compatible con lienzo o basado en modelo Power Apps. 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 Entidad generada para crear un registro de 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 la clase Entidad de enlace tardío o la generada clases de entidad de enlace anticipado con la clase CreateRequest estableciendo la instancia de la entidad en la propiedad CreateRequest.Target y luego utilizando el método IOrganizationService.Execute. para obtener una instancia CreateResponse. El id. de la fila de la tabla de cuentas 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: Operaciones masivas con mensajes

Crear entidades relacionadas en una operación

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 inserción en profundidad.

Los siguientes ejemplos de enlace en tiempo de ejecución y en tiempo de compilación crearán las entidades Account y Contact relacionadas con esa cuenta mediante la relación account_primary_contact del contacto de uno a varios donde la búsqueda de primarycontactid de la cuenta es ReferencingAttribute.

Los ejemplos también crearán 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 Relación para especificar la relación usando el SchemaName de la relación antes de que pueda agregarlos 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 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);

Claves alternativas de uso

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

  • Ha configurado claves alternativas para la mesa
  • Conoce los valores de las claves

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 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 contactos 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 puede variar entre entornos.

Más información:

Como desarrollador, puede usar la clase InitializeFromRequestpara generar una instancia con esos valores predeterminados ya establecidos.

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

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

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).