3

因此,Dynamics CRM 中的连接提供了一种将事物链接在一起的通用方式。

Connections 实体在内部具有 Record1Id 属性和 Record2Id 属性等。

当您通过 UI 创建连接时,CRM 实际上“在数据库的 Connection 表中创建了两个条目。每个条目都允许您从原始记录或相关记录中搜索相关记录。

也就是说,如果您连接 A 和 B,它会将两行保存到(幕后)表中:

  • Record1Id = A 和 Record2Id = B 的一个
  • 一个 Record1Id = B 和 Record2Id = A

这是为了使搜索连接更容易。如果您对连接进行高级查找,则只需“单向”进行搜索。

所以我的问题是:

当您通过 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 将在两个方向上创建连接?
...或者您是否需要在两个方向上手动创建它们?(通过保存两次并交换 record1id record2id 值等)

或者,换句话说,用于连接的 CRM API 是否封装了“它实际上在幕后的两个连接”功能,还是您需要自己手动处理?

4

1 回答 1

4

您只需要创建一个连接记录。需要注意的一件事是,我认为您不需要像上面那样设置类型代码。只需在实体引用中设置逻辑名称就足够了。以下是 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 回答