Showing posts with label Trace. Show all posts
Showing posts with label Trace. Show all posts

Saturday, October 9, 2010

Find CRM entity name by ObjectID

Everybody knows this strange error message from CRM trace logs: Error Message: SecLib::AccessCheckEx failed. Returned hr = -2147187962, ObjectID: 48355f9a-96c5-df11-90dc-00145ebd47b6, OwningUser: 6d04898c-db79-df11-83b4-00145ebd47b6 and CallingUser: 9cfc1a56-da79-df11-83b4-00145ebd47b6.
CRM failed to perform some action on an entity with ObjectID = 48355f9a-96c5-df11-90dc-00145ebd47b6
The error does not contain the problematic entity name I prefer to know.
So I wrote the SQL script that helps me to find an entity name by ObjectID

DECLARE @objectId uniqueidentifier

SET @objectId = '41DC59A0-96C5-DF11-90DC-00145EBD47B6' – Set your ObjectID here
DECLARE @entityName nvarchar(255), @baseEntityName nvarchar(255), @primaryKeyColumnName nvarchar(255), @sql nvarchar(max), @isActivity bit
DECLARE cur CURSOR FOR SELECT Name, BaseTableName, IsActivity from Entity with (nolock) where IsValidForAdvancedFind = 1
OPEN cur
FETCH NEXT FROM cur INTO @entityName, @baseEntityName, @isActivity
WHILE @@FETCH_STATUS = 0
BEGIN
if(@isActivity = 1 OR @entityName = 'ActivityPointer')
SET @primaryKeyColumnName = 'activityid'
else
SET @primaryKeyColumnName = @entityName + 'id'
SET @sql = 'IF EXISTS(SELECT ' + @primaryKeyColumnName + ' FROM ' + @baseEntityName + ' WHERE ' + @primaryKeyColumnName + '=''' + CONVERT(nvarchar(36), @objectId) + ''') SELECT ''' + @entityName + ''''
exec(@sql)
IF @@ROWCOUNT > 0 BREAK;
FETCH NEXT FROM cur INTO @entityName, @baseEntityName, @isActivity
END
DEALLOCATE cur

Thanks,
Max s