組織サービスを使用したテーブル行の作成

注意

エンティティとテーブルの違いがわかりませんか? Microsoft Dataverse で「開発者: 用語を理解する」を参照してください。

このトピックでは、遅延バインドと事前バインドの両方のプログラミング形式を使用する例を紹介します。 詳細:

基本的な作成

次の例は、遅延バインディングと事前バインディングのプログラミング スタイルを使用してテーブル行を作成する方法を示しています。

それぞれの例では、IOrganizationServiceインターフェイスのメソッドを実装するクラスのインスタンスを表す svc 変数を使用しています。 このインターフェイスのサポートの詳細については、 IOrganizationService インターフェイスを参照してください。

注意

各テーブルには、行を作成するときに指定できる一意の識別子列があります。 ほとんどの場合、システムによって生成された値は最良なパフォーマンスに最適化されているため、システムがこの属性を設定できるようにする必要があります。

遅延バインドの例

次の例は、Entity クラスを使用して、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);

事前バインドの例

次の例は、生成された Account クラスを使用して、IOrganizationService を使用してアカウントを作成します。 Create メソッド。

Account クラスは、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);

CreateRequest クラスが使用されます

IOrganizationService.Create メソッドを使用する代わりに エンティティ インスタンスを Target プロパティに設定し、CreateRequest クラスで遅延バインド Entity クラスまたは事前バンド エンティティ クラスのいずれかを使用できます。その際に、IOrganizationService .Executeメソッドを使用して、 CreateResponse を取得します。 作成されたアカウント テーブル行の ID は、idプロパティ値にあります。

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

CreateRequest クラスを使用する場合

オプション パラメーターを渡す場合は、CreateRequest クラスを使用する必要があります。 特殊なパラメーターを必要とする場合が 2 つあります。

新しいテーブル行を作成するときに、同じ操作で関連する行を作成することもできます。

次の遅延バインドおよび事前バインドの例では、取引先企業 primarycontactidReferencingAttribute である場合、account_primary_contact の作成の 1 対多の関係を使用して、その取引先企業に関連する取引先企業および取引先担当者を作成します。

この例では、3 つの関連する タスク 行も タスク regardingobjectid ルックアップが ReferencingAttribute である アカウント Account_Tasks 1 対多の関係を使用して作成します。

遅延バインドの例

遅延バインディング スタイルでは、1 つ以上の関連エンティティ (行) を明示的に追加する必要があります。EntityCollection次に、Relationshipを使用して関係を指定するクラスSchemaNameあなたがそれらをに追加することができる前に関係のEntityRelatedEntities プロパティに設定します。

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

事前バインドの例

事前バインド クラスでは、クラスに関係の定義が含まれているため、コード量を少なくすることができます。

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

作成時にテーブル行を関連付ける

更新するときと同じ方法で、新しい行を作成するときに既存の行に関連付けることができます。 EntityReference を使用して、ルックアップ列 (属性) の値を設定する必要があります。

このルックアップの割り当ては、事前バインディング スタイルと遅延バインディング スタイルの両方に対して同じです。

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

代替キーの使用

テーブル行の ID がわからず、次の条件が当てはまる場合:

  • テーブルに代替キーを構成した
  • キー値を知っている

keyName および keyValue パラメータを使用して、代替の EntityReference コンストラクターを使用できます。

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

注意

代替キーは、通常、データ統合シナリオでのみ使用されます

詳細:

重複レコードの確認

詳細: 組織サービスを使用した重複データ検出

プライマリ テーブル行から規定値を設定する

人々がアプリケーションで新しい行を作成するとき、それらは通常、別の行のコンテキストで作成されます。 たとえば、取引先企業のコンテキストで新しい連絡先行を作成できます。 これが発生すると、アカウントの特定の列の値が連絡先フォームにコピーされます。 これにより、新しい関連行の作成が促進されます。これは、新しい行にいくつかの規定値が設定されているため、作成する行を編集する人がそれらの値を入力する必要がないためです。 保存する前に値を変更することができます。

この方法で新しい行が作成されたときにコピーされる値は、Microsoft Dataverse 環境に適用される構成によって制御されるので、環境間で異なる場合があります。

詳細:

開発者として、あなたは InitializeFromRequest クラスを使用して、これらの規定値がすでに設定されているテーブル行を生成します。

次のコードは、既存のアカウントに関連付けられている新しい取引先担当者を作成します。 この連絡先は、指定されたアカウントや、Telephone1 やアカウントと連絡先の間で共有されるさまざまなアドレス値のような特定の属性値に関連付けられます。

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

upsert の使用

テーブル行を作成する別の方法は、UpsertRequest クラスを使用することです。 リクエストで渡された行に一意識別子が含まれている既存の行がない場合、upsert は新しい行を作成します。

詳細: upsert の使用

ストレージ パーティション内のドキュメントを作成する

非リレーショナルデータを含むテーブル行を多数作成する場合は、ストレージパーティションに行を作成して、それらの行へのアクセスを高速化できます。 詳細情報: ドキュメントへのアクセス時にストレージ パーティションを使用してパフォーマンスを向上させる

関連項目

組織サービスを使用したテーブル操作
組織サービスを使用したテーブル行の更新と削除
組織サービスを使用したテーブル行の関連付けと関連付け解除

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。