出于集成目的,Dynamics CRM中的用户需要具有与其他环境中相同的GUID(基于ASP.NET和SQL Server 2005构建的多个自定义Web应用程序)。但是当我们尝试使用某个GUID创建一个新的Dynamics用户时,Dynamics会忽略它并创建它自己的(其模式让我相信它在内部使用NEWSEQUENTIALID(),就像用户是通过UI创建的一样)。但对于其他类型(例如联系人),动态采用GUID没有问题。
我做错了什么,或者Dynamics总是忽略新用户创建的GUID?
CrmService service = GetService();
systemuser newUser = new systemuser();
Key newUserId = new Key();
newUserId.Value = new Guid("D630FA8D-A32F-4a37-BFEF-CE36CBA29009");
// The GUID I would like Dynamics to use
newUser.systemuserid = newUserId;
Lookup bu = new Lookup();
bu.Value = new Guid("16B10365-0E18-DF11-B839-005056B60DD4");
// The correct business unit ID. Nothing to see here.
newUser.businessunitid = bu;
newUser.firstname = "John";
newUser.lastname = "Doe";
newUser.domainname = "DOMAIN\\jdoe";
// Valid AD credentials too. Names changed to protect the innocent.
Guid userId = service.Create(newUser);
Console.WriteLine("User created with GUID " + userId.ToString());
// Dynamics creates the user with a completely different GUID. :-(
修改
我现在也问过这个问题on Microsoft's CRM forum。
答案 0 :(得分:2)
我知道这不太理想,但作为一种解决方法,您可以向系统用户实体添加自定义属性并在那里存储您的集成ID。
答案 1 :(得分:1)
在不了解您的解决方案的情况下,我可以告诉您,您不需要像您尝试的那样到处都需要硬编码。当我到达现在的客户时,他们正在尝试做同样的事情,这是一个严肃的PITA 我花了大约一天时间用一个简单的查找程序替换所有使用硬编码quids进行各种实体的代码,该程序通过你想要的任何键(你的用户名)来获取实体,然后从中获取实体的id。不再尝试做一些你应该首先尝试做的事情。
答案 2 :(得分:0)
我花了大约一天时间用一个简单的查找程序替换所有使用硬编码quids用于各种实体的代码,该程序通过任何键获取实体(在你的情况下是用户名)
多么有趣。你是用'John','Doe'字符串搜索John Doe的用户。如果我的公司里有两个“John Doe”,我该怎么办?