.NET 用 SDK を使用したテーブル行の関連付けと関連付け解除
テーブル行は、関連するテーブル行のルックアップ列を使用して相互に関連付けられます。 一対多の関係にある 2 つの行を関連付ける最も簡単な方法は、EntityReference を使用して、関連する行のルックアップ列の値を設定することです。
一対多の関係にある 2 つの行の関連付けを解除する最も簡単な方法は、ルックアップ列の値を null
に設定することです。
多対多の関係を使用する関連付けも、多対多の関係をサポートする 交差エンティティ のルックアップ列に依存します。 リレーションシップは、その交差エンティティの行の存在によって定義されます。 交差エンティティを直接操作することはできますが、API を使用してこのタスクを行う方がはるかに簡単です。
Associate メソッドまたは AssociateRequest の使用
IOrganizationService.Associate メソッドまたはAssociateRequestとIOrganizationService.Execute メソッドを使用する主な価値は、次のことができるということです。
- 1 回の操作で複数の行を関連付ける
- 交差エンティティを意識することなく、多対多の関係を使用して行を簡単に関連付ける。
テーブル行をこれらの API に関連付けるには、次の 3 つが必要です:
- 関連付ける行へのエンティティ参照
- 関連付けの名前
- テーブル行を関連付ける 1 つ以上の参照
関係が 1 対多であるか多対多であるかは関係ありません。 パラメータまたはプロパティは同等です。
メタデータ ブラウザを使用してカスタマイズ UI またはメタデータを表示することによって、関係の名前を見つけることができます。
詳細:
次の例では、リレーションシップを作成し、主エンティティを関連エンティティのコレクションに関連付けます。
/// <summary>
/// Associate a primary entity with one or more other entities,
/// then remove the association.
/// </summary>
/// <param name="service">Authenticated web service connection.</param>
/// <param name="primaryEntity">Primary entity for the association.</param>
/// <param name="relationship">Type of relationship between the entities.</param>
/// <param name="relatedEntities">Related entities to associate with the primary entity.</param>
/// <returns>True if successful; otherwise false.</returns>
static public bool AssociateDisassociate(IOrganizationService service,
EntityReference primaryEntity, string relationship,
EntityReferenceCollection relatedEntities
)
{
// Define the type of relationship between the entities.
var relation = new Relationship(relationship);
try
{
// Associate the primary entity with the related entities.
service.Associate(primaryEntity.LogicalName, primaryEntity.Id,
relation, relatedEntities);
Console.WriteLine(
$"AssociateDisassociate(): The entities have been associated.");
// Disassociate the primary entity with the related entities.
service.Disassociate(primaryEntity.LogicalName, primaryEntity.Id,
relation, relatedEntities);
Console.WriteLine(
$"AssociateDisassociate(): The entities have been disassociated.");
return true;
}
catch (Exception ex)
{
Console.WriteLine(
$"AssociateDisassociate(): {ex.Message}");
return false;
}
}
完全なサンプル コード: AssociateDisassociate
AssociateRequestを使用する場合は、次のコードを使用します。 サービス・クライアント・メソッドの代わりに要求を使用する利点は、要求が 省略可能なパラメーターの使用をサポートすることです。
AssociateRequest request = new AssociateRequest()
{
RelatedEntities = relatedEntities,
Relationship = relation,
Target = primaryEntity
};
service.Execute(request);
たとえば、主エンティティ (取引先担当者) を 3 つの関連エンティティ (取引先企業) に関連付けているとします。 上記のこの 1 つの関連付け操作は、Account.PrimaryContactId 検索列が設定される三つの個別の更新操作と同じです。 代わりに、より単純なサービス クライアント メソッドまたは要求呼び出しは、関連する各取引先企業に多対 1 のエンティティ関係を確立し、取引先担当者に 1 対多のエンティティ関係を確立する account_primary_contact 関係を使用しています。
関係列のプロパティを調べると、ReferencingEntity
値が account
で、ReferencingAttribute
値が primarycontactid
であることがわかります。
Disassociate メソッドまたは DisassociateRequest の使用
IOrganizationService.Disassociate メソッドまたは IOrganizationService.Executeを使ったDisassociateRequestメソッドは、テーブル行を関連付ける方法の逆です。
前に示したコード サンプルで Disassociate
メソッド呼び出しの例を確認できます。 DisassociateRequestを使用する場合、コードは次のようになります。
DisassociateRequest request = new DisassociateRequest()
{
RelatedEntities = relatedEntities,
Relationship = relation,
Target = primaryEntity
};
service.Execute(request);
参照
.NET 用 SDK を使用したテーブル行の作成
SDK for .NET を使用してテーブルの行を取得する
SDK for .NET を使用したテーブル行の更新と削除