Working with a client in our Multi-tenant
CRM environment who was doing a database migration into
CRM and as part of the process, a backup of their Organization_MSCRM database was taken just prior
to starting the migration in case it needed
to be restored and run a second time.
In this case it did, so I restored the database and let the client know he should be good
to go. A few hours later I received a call that they were unable
to add some new users, they would appear as available when using the add multiple user wizard, but anyone added would not be added
to CRM. It was also disucussed that these users had been added
to CRM initally AFTER the database backup had been taken.
I turned on tracing and tried
to add the users through both the single user form and multiple user interface and was unable
to do so. The error message in the logs wasn't much help:
Unexpected error adding user
[email protected]: Microsoft.
Crm.CrmException: INVALID_WRPC_TOKEN: Validate WRPC Token: WRPCTokenState=Invalid, TOKEN_EXPIRY=4320, IGNORE_TOKEN=False
Searching on Google or bing didn't offer any assitance. Apparently not a very common problem, or no one has been able
to resolve.
I did some searching in the MSCRM_CONFIG database and found that their are several user tables there and after getting my head around the structure found that there were enties here for users that were not part of the restored DB. It seems that new users are added
to both the Orgnaization_MSCRM and MSCRM_CONFIG and after the restore these were out of sync.
I needed
to remove the extra entries in order
to address. Restoring the MSCRM_CONFIG database was not an option as other clients could have been adding users at this point and
to restore would risk breaking their instances of
CRM.
Long story short, I was finally able
to generate a script
to remove the bad entries and when I tried
to add users again, I was succesful. In case someone else out there finds themselves in a similar situation, here is the script I used
to delete the bad entries.
DECLARE @UsersToDelete TABLE
(
UserId uniqueidentifier
)
Insert Into @UsersToDelete(UserId)
Select UserId from [MSCRM_CONFIG].[dbo].[SystemUserOrganizations]
Where CrmuserId Not in (select systemuserid from Organization_MSCRM.dbo.SystemUserBase)
And OrganizationId = '00000000-643F-E011-0000-0050568572A1' --Id From the Organization table for this instance
Delete From [MSCRM_CONFIG].[dbo].[SystemUserAuthentication]
Where UserId in (Select UserId From @UsersToDelete)
Delete From [MSCRM_CONFIG].[dbo].[SystemUserOrganizations]
Where UserId in (Select UserId From @UsersToDelete)
Delete From [MSCRM_CONFIG].[dbo].[SystemUser]
Where Id in (Select UserId From @UsersToDelete)