// Retrieve Metadata for all entities
RetrieveAllEntitiesRequest allEntitiesRequest = new RetrieveAllEntitiesRequest();
allEntitiesRequest.EntityFilters = EntityFilters.Entity;
allEntitiesRequest.RetrieveAsIfPublished = true;
RetrieveAllEntitiesResponse allEntitiesResponse = (RetrieveAllEntitiesResponse)service.Execute(allEntitiesRequest);
// Record ID to check
Guid checkId = new Guid("541067bd-4db1-2208-e5b0-a601ead56d03");
string entityLogicalName = string.Empty;
foreach (EntityMetadata entityMetadata in allEntitiesResponse.EntityMetadata)
{
try
{
// Try to retrieve the record from the current entity
Entity test = service.Retrieve(entityMetadata.LogicalName, checkId, new ColumnSet(entityMetadata.PrimaryIdAttribute));
// if the previous instruction didn't throw an exception means that the record exists.
entityLogicalName = entityMetadata.LogicalName;
break;
}
catch { }
}
if (entityLogicalName != string.Empty)
{
string foundMessage = string.Format("Record with ID {0} belongs to entity {1}", checkId.ToString(), entityLogicalName);
Console.WriteLine(foundMessage);
}
else
{
string notFoundMessage = string.Format("Record with ID {0} not found in any entity", checkId.ToString());
Console.WriteLine(notFoundMessage);
}
Retrieve Entity Logical Name from a record GUID
In the case we have only an anonymous record GUID and we want to know which entity belongs, we can do a "brute force" attack against the CRM using the metadata information.
Thanks for sharing! Very useful on extreme situations when there is no other option.
ReplyDelete