Search code examples
dynamics-crmdynamics-crm-365

crm 2016 get entity logical name by type code?


I have Guid and Type Code Of Entity, How Can I Retrieve entity Without Logical Name By Type Code.

public void GetEntityReferenceByDynamicUrl(string dynamicUrl)
    {
        Uri entityUri = new Uri(dynamicUrl);
        var parameter = HttpUtility.ParseQueryString(entityUri.Query);

        if (parameter.AllKeys.Contains("id") && parameter.AllKeys.Contains("etc"))
        {
            var guid = new Guid(parameter.Get("id"));
           var  etc = parameter.Get("etc");

        }
    }

Solution

  • Looks like you're using C# so you can do this with a metadata call

    // get your ETC as an Integer
    var ETC = (int)parameter.Get("etc");
    var entityLogicalName = "";
    
    // Query setup
    // Columns: "LogicalName"
    // Criteria: "ObjectTypeCode eq ETC"
    var metaQuery = new EntityQueryExpression
    {
        Properties = new MetadataPropertiesExpression
        {
            AllProperties = false,
            PropertyNames = { "LogicalName" }
        },
        Criteria = new MetadataFilterExpression
        {
            FilterOperator = LogicalOperator.And,
            Conditions = { new MetadataConditionExpression("ObjectTypeCode", MetadataConditionOperator.Equals, ETC) }
        }
    };
    
    var response = (RetrieveMetadataChangesResponse)XrmService.Execute(new RetrieveMetadataChangesRequest{ Query = metaQuery });
    if (response.EntityMetadata.Count == 1)
    {
        entityLogicalName = response.EntityMetadata.First().LogicalName;
    }
    else
    {
        // 0 or multiple results. Handle appropriately
    }
    

    Hope this helps