因此,Dynamics CRM 中的连接提供了一种将事物链接在一起的通用方法。
在内部,Connections 实体具有 Record1Id 属性和 Record2Id 属性等。
当您创建 connection via the UI , CRM 实际上“在数据库的连接表中创建了两个条目。每个条目都允许您从原始记录或相关记录中搜索相关记录。”
也就是说,如果您连接 A 和 B,它会将两行保存到(幕后)表中:
- Record1Id = A 和 Record2Id = B
- 还有一个 Record1Id = B 和 Record2Id = A
这是为了使搜索连接更容易。如果您对连接进行高级查找,则只需“单向”搜索。
所以我的问题是:
当您通过 API(后期绑定(bind))创建连接时,它是这样的:
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 是否封装了“它实际上在幕后的两个连接”功能,还是您需要自己手动处理?
最佳答案
您只需要创建一个连接记录。需要注意的一件事是我认为您不需要像上面那样设置类型代码。只需在实体引用中设置逻辑名称就足够了。这是来自 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);
关于c# - 动态 CRM : creating Connection entities via API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15811518/