3

そのため、Dynamics CRM の接続は、物事を相互にリンクする汎用的な方法を提供します。

内部的に、Connections エンティティには Record1Id 属性と Record2Id 属性があります。

UI を介して接続を作成すると、CRM は実際に "データベースの接続テーブルに 2 つのエントリを作成します。各エントリを使用して、元のレコードまたは関連レコードから関連レコードを検索できます。 "

つまり、A と B を接続すると、2 つの行が (舞台裏の) テーブルに保存されます。

  • Record1Id = A および Record2Id = B の 1 つ
  • および Record1Id = B および Record2Id = A の 1 つ

これは、接続の検索を容易にするためです。接続に対して高度な検索を行う場合は、「一方向」の検索のみを行う必要があります。

だから私の質問は:

API (レイト バウンド) を介して接続を作成すると、次のようになります。

Entity connection = new Entity("connection");
connection["record1id"] = new EntityReference("contact", someContactId);
connection["record1objecttypecode"] = new OptionSetValue(2);
connection["record1roleid"] = new EntityReference("connectionrole", someConnectionRoleId);
connection["record2id"] = new EntityReference("incident", someCaseId);
connection["record2objecttypecode"] = new OptionSetValue(122);
connection["record2roleid"] = new EntityReference("connectionrole", someOtherConnectionRoleId);
var newId = service.Create(connection);

... 上記のように「一方向」で接続を作成するだけで十分ですか?その後、舞台裏で CRM が双方向の接続を作成しますか?
...または、双方向で手動で作成する必要がありますか? (2 回保存して、record1id と record2id の値を交換するなど)

または、言い換えれば、CRM API for Connections は「実際には 2 つのバックグラウンド接続」機能をカプセル化しますか?それとも手動で処理する必要がありますか?

4

1 に答える 1

4

接続レコードを 1 つ作成するだけです。注意すべきことの1つは、上記のようにタイプコードを設定する必要はないと思います。エンティティ参照で論理名を設定するだけで十分です。SDK のサンプルは次のとおりです。

Connection newConnection = new Connection
{
    Record1Id = new EntityReference(Account.EntityLogicalName,
        _accountId),
    Record1RoleId = new EntityReference(ConnectionRole.EntityLogicalName,
        _connectionRoleId),                             
    Record2RoleId = new EntityReference(ConnectionRole.EntityLogicalName,
        _connectionRoleId),                            
    Record2Id = new EntityReference(Contact.EntityLogicalName,
        _contactId)
};
_connectionId = _serviceProxy.Create(newConnection);
于 2013-04-04T14:55:15.477 に答える