Créer des lignes de table à l’aide du SDK pour .NET

Cet article comprend des exemples utilisant à la fois des styles de programmation à liaison anticipée et à liaison tardive. Pour plus d’informations :

Création de base

Les exemples suivants montrent comment créer une ligne de tableau à l’aide du style de programmation à liaison tardive et à liaison anticipée.

Chacun des exemples utilise une variable svc qui représente une instance d’une classe qui implémente les méthodes dans l’interface IOrganizationService. Pour plus d’informations sur les classes qui prennent en charge cette interface, consultez l’interface IOrganizationService.

Notes

Chaque table possède une colonne de clé primaire d’identificateur unique que vous pouvez spécifier lors de la création d’une ligne. Dans la plupart des cas, vous devez laisser le système définir cela pour vous, car les valeurs générées par le système sont optimisées pour des performances optimales.

Avec les tables élastiques, vous pouvez créer des enregistrements avec des valeurs de clé primaire en double et différentes valeurs partitionid. Cependant, ce modèle n’est pas compatible avec le modèle piloté ou le canevas Power Apps. En savoir plus sur la définition de la valeur de la clé primaire avec des tables élastiques

L’exemple suivant montre comment utiliser la classe Entity pour créer un compte à l’aide de la méthode 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);

Utiliser la classe CreateRequest

Au lieu d’utiliser la méthode IOrganizationService.Create, vous pouvez utiliser la classe Entity à liaison tardive ou les classes d’entité générées à liaison anticipée avec CreateRequest en définissant l’instance d’entité sur la propriété CreateRequest.Target, puis en utilisant la méthode IOrganizationService.Execute pour obtenir une instance CreateResponse. L’ID de la ligne de table de compte créée se trouve dans la valeur de la propriété CreateResponse.id.

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

Quand utiliser la classe CreateRequest

Vous devez utiliser la classe CreateRequest si vous souhaitez transmettre des paramètres facultatifs. Il existe deux cas où vous pourriez avoir besoin de paramètres spéciaux.

Utiliser la classe CreateMultipleRequest

Lorsque vous devez créer plusieurs enregistrements du même type, la classe CreateMultipleRequest est la solution la plus performante. Pour plus d’informations : Messages d’opération en bloc

Pour les tables standard, lorsque vous créez une ligne de table, vous pouvez également créer des lignes liées dans la même opération. Ce processus s’appelle l’insertion profonde.

Les exemples suivants de liaison tardive et de liaison anticipée créent des entités Account et Contact associées à ce compte à l’aide de la relation un-à-plusieurs account_primary_contact du contact où la recherche de primarycontactid du compte est ReferencingAttribute.

Les exemples créent également trois lignes Task associées à l’aide de la relation un-à-plusieurs Account_Tasks du compte où la recherche de regardingobjectid de la tâche est ReferencingAttribute.

Dans le style de liaison tardive, vous devez explicitement ajouter une ou plusieurs entités (lignes) associées à EntityCollection, puis utiliser la classe Relationship pour spécifier la relation à l’aide du SchemaName de la relation avant de pouvoir les ajouter à la propiété 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);

Associer des lignes de table lors de la création

Vous pouvez associer n’importe quelle nouvelle ligne à une ligne existante lorsque vous la créez de la même manière que vous le feriez lors de sa mise à jour. Vous devez utiliser une EntityReference pour définir la valeur d’une colonne de recherche (attribut).

Cette affectation de recherche est la même pour les styles à reliure précoce et tardive.

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

Utiliser les clés secondaires

Si vous ne connaissez pas l’ID de la ligne de table et que les conditions suivantes sont remplies :

  • Vous avez configuré des clés secondaires pour la table
  • Vous connaissez les valeurs clés

Vous pouvez utiliser les constructeurs EntityReference secondaires à l’aide des paramètres keyName et keyValue.

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

Notes

Les clés secondaires sont généralement utilisées uniquement pour les scénarios d’intégration des données

Pour plus d’informations :

Rechercher des enregistrements dupliqués

Pour plus d’informations : Détecter les données dupliquées avec le SDK pour .NET

Définir les valeurs par défaut à partir de la ligne de table principale

Lorsque des personnes créent des lignes dans l’application, celles-ci sont souvent créées dans le contexte d’une autre ligne. Par exemple, vous pouvez créer une ligne de contact dans le contexte d’un compte. Lorsque cela se produit, certaines valeurs de colonne du compte sont copiées dans le formulaire de contact. Cela accélère la création de la ligne associée car la nouvelle ligne a des valeurs par défaut définies afin que la personne modifiant la ligne à créer n’ait pas besoin d’entrer ces valeurs. Elle peut modifier les valeurs avant l’enregistrement.

Les valeurs copiées lors de la création d’une ligne de cette manière sont contrôlées par les configurations appliquées à l’environnement Microsoft Dataverse, cela peut donc varier d’un environnement à l’autre.

Pour plus d’informations :

En tant que développeur, vous pouvez utiliser la classe InitializeFromRequest pour générer une instance d’entité avec les valeurs par défaut déjà définies.

Le code suivant crée un contact associé à un compte existant. Le contact est associé au compte spécifié et à certaines valeurs d’attribut, comme Telephone1 et diverses valeurs d’adresse partagées entre le compte et le contact sont définies par défaut.

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

Utiliser Upsert

Une autre façon de créer une ligne de table consiste à utiliser la classe UpsertRequest. Un upsert crée une ligne lorsqu’il n’y a pas de ligne existante contenant les identificateurs uniques inclus dans la ligne transmise avec la demande.

Pour plus d’informations, voir : Utiliser upsert

Créer des documents dans des partitions de stockage

Si vous créez un grand nombre de lignes de table élastique contenant des données non relationnelles, vous pouvez créer les lignes dans des partitions de stockage pour accélérer l’accès à ces lignes. En savoir plus : Partitionnement et mise à l’échelle horizontale

Voir aussi

Récupérer une ligne de table à l’aide du SDK pour .NET
Mettre à jour et supprimer des lignes de table à l’aide du SDK pour .NET
Associer et dissocier des lignes de tables à l’aide du SDK pour .NET

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).