7

CRM Dynamics 2011 でのユーザー (SystemUser エンティティ) の削除が Microsoft によってサポートされていないことは十分承知しています。

ただし、現在、ユーザー プロビジョニングのニーズをサポートするツールを開発中です。このツールの統合テストを作成できるようにするには、テスト環境を元の状態にロールバックできるように、後でユーザーを削除できるようにする必要があるようです。
現在、SQL バックアップから組織を復元することでこれを行っていますが、テストの実行ごとにこれを行うには時間がかかりすぎます。

アップデート

これまでのところ、私たちが持っている最善の解決策は、統合テストでユーザーを作成し、アサートする必要があるすべてをアサートし、その後、ユーザーを無効にしてその AD 資格情報を削除することで「クリーンアップ」し、それらを再利用できるようにすることです。テストの次の実行のための資格情報。

ただし、テスト環境のソリューションのみを探しているので、すべてを適切にクリーンアップするソリューションが必要です。SQL でレコードを削除するのが最善の方法のようです。ただし、DB 構造が複雑なため、誰かがスクリプトを提供してくれることを期待していました。

Update2

SQL からユーザーを手動で削除するスクリプトを作成しました (受け入れられた回答を参照)。これはサポートされていないため、何をしているのかわかっている場合にのみ、テスト環境で使用してください。

4

6 に答える 6

2

Jorisコードに基づいてCRM 2015で行ったことは次のとおりです

USED ORGANIZATIONNAME_MSCRM

BEGIN TRANSACTION

DECLARE @username AS VARCHAR(50)



-- CHANGE THIS --

SET @username = 'AD\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)



DECLARE @MSCRMUserID as UNIQUEIDENTIFIER

SET @MSCRMUserID = (SELECT Userid FROM mscrm_config..SystemUserOrganizations WHERE CrmUserId = @userid AND OrganizationId = @orgid)

DECLARE @authinfo as NVARCHAR(255)

SET @authinfo = (SELECT Authinfo FROM mscrm_config..SystemUserAuthentication WHERE Userid = @MSCRMUserID)

DECLARE @SUid as UNIQUEIDENTIFIER

SET @Suid = (SELECT id FROM mscrm_config..SystemUserAuthentication WHERE Userid = @MSCRMUserID)



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.TeamMembership WHERE SystemUserId = @userId



DELETE FROM dbo.QueueMembership  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.MailboxBase WHERE OwnerId = @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.InternalAddressBase WHERE parentid = @userId

DELETE FROM dbo.CalendarBase WHERE primaryuserid = @userId



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

DELETE FROM mscrm_config..SystemUserAuthentication WHERE authinfo = @authinfo

DELETE FROM mscrm_config..SystemUser WHERE id = @MSCRMUserID



rollback

--COMMIT

クエリを実行し、正しいデータが削除されていることを確認したら、COMMIT ステートメントのコメントを外し、Rollback ステートメントをコメント化できます。

それが役に立てば幸い。

于 2016-03-13T05:25:37.880 に答える
1

SQL でそれらを削除するという、まったくサポートされていない方法を使用できます。
統合テスト環境でこれを行っている限り、害は比較的少ないと思います。

ユーザーを追加するときにデータベースに加えられた変更を見つけるには、次のことができます

  • 現在のデータベースをコピーします
  • ユーザーを追加する
  • 新しいデータベースの状態を以前のものと比較します (例: redgate の SQL 比較)

これはロールアップごとに変更される可能性があるため、重要なコードや運用コードについてはこれに依存しないようにしてください。

于 2013-06-19T07:26:05.370 に答える