Crear filas de tabla con el servicio de la organización

Nota

¿No está seguro de entidad frente a tabla? Vea Desarrolladores: comprender la terminología en Microsoft Dataverse.

Este tema 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 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.

Ejemplo de enlace en tiempo de ejecución

El siguiente ejemplo muestra el uso de la clase Entity para crear una cuenta usando IOrganizationService.Create Método.

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

Ejemplo de enlace en tiempo de compilación

El siguiente ejemplo muestra el uso de la clase Account generada para crear una cuenta usando IOrganizationService.Create Método.

La clase Account se obtiene de la clase Entity

var account = new 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 utiliza el método IOrganizationService.Create, puede utiliza bien la clase Entity de enlace en tiempo de ejecución o las clases de entidad de enlace en tiempo de compilación con la clase CreateRequest configurando la instancia de entidad en la propiedad Target y después utilizando el método IOrganizationService.Execute para obtener a una CreateResponse. El id. de la fila de la tabla de cuentas creada estará en el valor de la propiedad 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.

Cuando crea una nueva fila de tabla, también puede crear filas relacionadas en la misma operación.

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.

Ejemplo de enlace en tiempo de ejecución

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 que pueda agregarlos a 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);

Ejemplo de enlace en tiempo de compilación

Con las clases de enlace en tiempo de compilación puede escribir menos código porque las clases incluyen definiciones de las relaciones.

var account = new Account();
// set attribute values
    // string primary name
    account.Name = "Sample Account";

    // Set the account primary contact
    account.account_primary_contact = new Contact()
    { FirstName = "John", LastName = "Smith" };

// Set a list of Tasks to create
account.Account_Tasks = new List<Task>() {
        new Task() { Subject = "Task 1" },
        new Task() { Subject = "Task 2" },
        new Task() { Subject = "Task 3" }
    };

// 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: Detección de datos duplicados con el servicio de la organización

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 utilizar la clase InitializeFromRequest para generar una fila de la tabla 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 que contienen datos no relacionales, puede crear las filas en particiones de almacenamiento para acelerar el acceso a esas filas. Para obtener más información, consulte Mejorar el rendimiento cuando se obtiene acceso a documentos utilizando particiones de almacenamiento.

Consultar también

Fila de la tabla R usando el servicio de organización
Actualizar y eliminar filas de tabla con el servicio de la organización
Asociar y desasociar filas de tablas con el servicio de la organización

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