删除CRM Dynamics 2011中的用户

Jor*_*tel 6 c# microsoft-dynamics integration-testing dynamics-crm dynamics-crm-2011

我完全清楚Microsoft不支持删除CRM Dynamics 2011中的用户(SystemUser Entity).

但是,我们目前正在开发一种工具来支持我们的用户配置需求.为了能够为此工具编写集成测试,之后似乎必须能够删除用户,以便我们可以将测试环境回滚到原始状态.
目前,我们通过从SQL备份恢复组织来实现这一点,但这对于每次测试运行来说都是非常耗时的.

更新

到目前为止,我们拥有的最佳解决方案是在集成测试中创建用户,断言我们需要断言的所有内容,然后通过禁用用户并删除其AD凭据来"清理它",以便我们可以重用这些下次运行测试的凭据.

但是,由于我们只是在寻找测试环境的解决方案,我真的希望有一个能够正确清理所有内容的解决方案:删除SQL中的记录似乎是要走的路.但是,由于数据库结构复杂,我希望有人可以为此提供脚本.

UPDATE2

我们已经创建了脚本以手动从SQL中删除用户(请参阅已接受的答案).这不受支持,因此只有在测试环境中使用它,如果您知道自己在做什么.

Jor*_*tel 10

Microsoft不支持以下脚本.使用它可能会损害,破坏,摧毁或骚扰您的CRM组织,部署,服务器和职业.
永远不要使用它.
永远.

话虽这么说,我们使用了它,它可以很好地用于我们的目的:在运行AddSystemUser测试后清理我们的测试环境.

要记住的其他一些事情:

  • 我们正在使用CRM Dynamics 2011 UR10内部部署
  • 我们的测试用户没有任何相关记录,它只是一个孤立的用户
  • 我们正在使用AD身份验证
USE OrganizationName_MSCRM
BEGIN TRANSACTION
DECLARE @username AS VARCHAR(50)

-- CHANGE THIS -- 
SET @username = 'domain\username'
-- DONT CHANGE ANYTHING AFTER THIS --

DECLARE @userId AS UNIQUEIDENTIFIER
SET @userId = (SELECT SystemUserId  FROM dbo.SystemUserBase WHERE DomainName = @username)

DECLARE @orgid AS UNIQUEIDENTIFIER
SET @orgid = (SELECT OrganizationId FROM dbo.SystemUserBase WHERE systemuserid = @userid)

DECLARE @userEmail AS VARCHAR(MAX)
SET @useremail = (SELECT InternalEMailAddress FROM dbo.SystemUserBase WHERE SystemUserId = @userid)

DECLARE @userfullname AS VARCHAR(max)
SET @userfullname = (SELECT fullname FROM dbo.systemuserbase WHERE systemuserid = @userid)

DECLARE @queueid AS UNIQUEIDENTIFIER
SET @queueid = (SELECT queueid FROM dbo.SystemUserBase WHERE SystemUserId = @userid)

DECLARE @ownerid AS UNIQUEIDENTIFIER
SET @ownerid = (SELECT ownerid FROM dbo.OwnerBase WHERE name = @userfullname)

DELETE FROM dbo.SystemUserExtensionBase WHERE SystemUserId = @userId
DELETE FROM dbo.UserSettingsBase WHERE SystemUserId = @userId
DELETE FROM dbo.TeamMembership WHERE SystemUserId = @userId
DELETE FROM dbo.SystemUserPrincipals WHERE systemuserid = @userId
DELETE FROM dbo.SystemUserRoles WHERE systemuserid = @userId
DELETE FROM dbo.SystemUserBusinessUnitEntityMap WHERE systemuserid = @userid
DELETE FROM dbo.UserQueryBase WHERE OwnerId = @userid
DELETE FROM dbo.SystemUserProfiles WHERE SystemUserId = @userId
DELETE FROM dbo.SystemUserBase WHERE SystemUserId = @userid
DELETE FROM dbo.QueueBase WHERE QueueId = @queueid
DELETE FROM dbo.PrincipalEntityMap WHERE PrincipalId = @ownerid
DELETE FROM dbo.PrincipalObjectAccess WHERE principalid = @ownerid
DELETE FROM dbo.OwnerBase WHERE ownerid = @ownerid
DELETE FROM dbo.EmailSearchBase WHERE EmailAddress = @userEmail
DELETE FROM dbo.ResourceBase WHERE name = @userfullname
DELETE FROM dbo.CalendarRuleBase WHERE CalendarId IN (SELECT CalendarId FROM dbo.CalendarBase WHERE PrimaryUserId = @userid)
DELETE FROM dbo.CalendarBase WHERE primaryuserid = @userId
DELETE FROM dbo.InternalAddressBase WHERE parentid = @userId

DELETE FROM mscrm_config..SystemUserOrganizations WHERE CrmUserId = @userid AND OrganizationId = @orgid

COMMIT
Run Code Online (Sandbox Code Playgroud)

  • 我不得不在你的脚本中添加两行.非常感谢BTW!DELETE FROM dbo.UserQueryBase WHERE OwnerId =\@userid DELETE FROM dbo.SystemUserProfiles WHERE SystemUserId =\@userId (2认同)