.NET 用 SDK を使用してテーブル行を作成する
この記事では、遅延バインドと事前バインドの両方のプログラミング形式を使用する例を紹介します。 詳細情報:
基本的な作成
次の例は、遅延バインディングと事前バインディングのプログラミング スタイルを使用してテーブル行を作成する方法を示しています。
それぞれの例では、IOrganizationService インターフェイスのメソッドを実装するクラスのインスタンスを表す svc
変数を使用しています。 このインターフェイスのサポートの詳細については、 IOrganizationService インターフェイスを参照してください。
注意
各テーブルには、行を作成するときに指定できる一意の識別子主キー列があります。 ほとんどの場合、システムによって生成された値は最良なパフォーマンスに最適化されているため、システムがこの属性を設定できるようにする必要があります。
エラスティック テーブルを使用すると、重複する主キー値と異なる partitionid
値を持つレコードを作成できます。 ただし、このパターンはモデル駆動型またはキャンバス Power Apps と互換性がありません。 エラスティック テーブルを使用した主キー値の設定について学習します
次の例は、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);
CreateRequest クラスが使用されます
IOrganizationService.Update メソッドを使用する代わりに、エンティティ インスタンスを CreateRequest.Target プロパティに設定してから、IOrganizationService.Execute メソッド を使用してCreateResponse インスタンスを取得することにより、遅延バインド エンティティ クラス または生成されたエンティティ インスタンスを CreateRequest に使用できます。 作成されたアカウント テーブル行の ID は、CreateResponse.id プロパティ値にあります。
var request = new CreateRequest() { Target = account };
var response = (CreateResponse)svc.Execute(request);
Guid accountid = response.id;
CreateRequest クラスを使用する場合
オプション パラメーターを渡す場合は、CreateRequest クラスを使用する必要があります。 特殊なパラメーターを必要とする場合が 2 つあります。
- 重複する検出ルールを適用する場合。 詳細: .NET 用 SDK を使用した重複データの検出
- WebResource のようなソリューション コンポーネントを表すテーブル行を作成する場合、それを特定のソリューションに関連付けたいと考えています。 この場合、
SolutionUniqueName
パラメーターを使用してSolution.UniqueName の値を含めます。 詳細: メッセージを .NET 用 SDK と共に使用する
CreateMultipleRequest クラスを使用する
同じタイプの複数のレコードを作成する必要がある場合、CreateMultipleRequest クラス が最もパフォーマンスの高い方法です。 詳細: 一括操作メッセージ
1 回の操作で関連するエンティティを作成する
標準テーブルの場合、新しいテーブル行を作成するときに、同じ操作で関連する行を作成することもできます。 これは ディープ挿入 と呼ばれる機能です。
次の遅延バインドおよび事前バインドの例では、取引先企業 primarycontactid が ReferencingAttribute
である場合、account_primary_contact の作成の 1 対多の関係を使用して、その取引先企業に関連する取引先企業および取引先担当者を作成します。
この例では、3 つの関連する タスク 行も タスク regardingobjectid ルックアップが ReferencingAttribute
である アカウント Account_Tasks 1 対多の関係を使用して作成します。
遅延バインディング スタイルでは、1 つ以上の関連エンティティ (行) をEntityCollectionに明示的に追加してから、リレーションシップ クラスを使用して、Entity.RelatedEntities プロパティ に追加する前に、リレーションシップの SchemaName
を使用するリレーションシップを指定します。
// 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);
作成時にテーブル行を関連付ける
更新するときと同じ方法で、新しい行を作成するときに既存の行に関連付けることができます。 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 の使用
ストレージ パーティション内のドキュメントを作成する
非リレーショナルデータを含むエラスティック テーブル行を多数作成する場合は、ストレージパーティションに行を作成して、それらの行へのアクセスを高速化できます。 詳細情報: パーティション分割と水平スケーリング
参照
.NET 用 SDK を使用してテーブルの行を取得する
.NET 用 SDK を使用したテーブル行の更新と削除
.NET 用 SDK を使用したテーブル行の関連付けと関連付け解除
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。