Dynamics Crm:通过API创建Connection实体

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

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

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

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

  • Record1Id = A且Record2Id = B
  • 记录1Id = B且记录2Id = A

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

所以我的问题是:

当您通过API(后期绑定)创建Connections时,其类似于:

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 for Connections是否封装了“它实际上是幕后的两个连接”function,还是您需要自己手动处理?

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