Some time we need to check requirement level of specific attribute in run time, this can be done using metadata webservice. For example I am taking accountnumber attribute of account entity, I have changed it’s Requirement level to Business Required for my demo purpose so let’s check through code, I have created a website project in Visual studio with default aspx form and a command button on it, as metadata webservic reference to your website project. I have written below code onclick of that button
CRMMetadata.CrmAuthenticationToken token = new CRMMetadata.CrmAuthenticationToken();
token.OrganizationName = “OrgName“; //your organization name
token.AuthenticationType = 0;
// Create the metadata Web service.
MetadataService metadataService = new MetadataService();
metadataService.Url = “Metadatawebservice URL“; //you need replace it with metadatawebservice url
metadataService.CrmAuthenticationTokenValue = token;
metadataService.Credentials = System.Net.CredentialCache.DefaultCredentials;
metadataService.PreAuthenticate = true;
// Create the request.
RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest();
attributeRequest.EntityLogicalName = EntityName.account.ToString();
attributeRequest.LogicalName = “accountnumber“; //I want to check account number
attributeRequest.RetrieveAsIfPublished = false;
RetrieveAttributeResponse attributeResponse = (RetrieveAttributeResponse)metadataService.Execute(attributeRequest);
string RequirementLevel = attributeResponse.AttributeMetadata.RequiredLevel.Value.ToString();
you will get value of RequirmentLevel as “Required” if it is set as “Business Required” or if it is set to “Business Recommended” it will return you “Recommended”
Hope it can help somebody !!!