Answered by:
Retrieve all attribute in an entity

Question
-
I want to get all the attributes present in an entity for CRM 4.0 using metadataservice. Please provide link or code snippet.
Thanks in advance
Thursday, April 7, 2011 1:51 PM
Answers
-
SDK has the code you need.
// ===================================================================== // File: Program.cs // Summary: This sample shows how to use the metadata service. // ===================================================================== // // This file is part of the Microsoft CRM SDK Code Samples. // // Copyright (C) Microsoft Corporation. All rights reserved. // // This source code is intended only as a supplement to Microsoft // Development Tools and/or on-line documentation. See these other // materials for detailed information regarding Microsoft code samples. // // THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // ===================================================================== using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Xml; // Microsoft CRM namespace(s) using CrmSdk2007; //using Microsoft.Crm.Sdk.Walkthrough.MetadataSdk; namespace Microsoft.Crm.Sdk.Walkthrough { public class Metadata { static void Main(string[] args) { String entity = "annotation"; if (args.Length != 0) entity = args[0]; Run(entity); } public static bool Run(string entity) { // Create an authentication token. CrmAuthenticationToken token = new CrmAuthenticationToken(); token.OrganizationName = "AdventureWorksCycle"; // You can use enums.cs from the SDK\Helpers folder to get the enumeration for AD Authentication. token.AuthenticationType = 0; // Create the metadata Web service. MetadataService service = new MetadataService(); // ToDo: Change to your server name. service.Url = "http://localhost/MSCRMServices/2007/MetadataService.asmx"; service.CrmAuthenticationTokenValue = token; service.Credentials = System.Net.CredentialCache.DefaultCredentials; try { // Retrieve the timestamp. RetrieveTimestampRequest request = new RetrieveTimestampRequest(); RetrieveTimestampResponse response = (RetrieveTimestampResponse)service.Execute(request); System.Console.WriteLine(response.Timestamp.ToString()); // Retrieve the metadata for the specified entity. RetrieveEntityRequest entityRequest = new RetrieveEntityRequest(); entityRequest.LogicalName = entity; // Set the amount of data to retrieve. // For better performance, do not retrieve All unless you really need it. entityRequest.EntityItems = EntityItems.All; RetrieveEntityResponse entityResponse = (RetrieveEntityResponse)service.Execute(entityRequest); // Create an instance of StreamWriter to write text to a file. // The using statement also closes the StreamWriter. using (StreamWriter sw = new StreamWriter(String.Concat(entityRequest.LogicalName, ".xml"))) { // Create the XML writer. XmlTextWriter metadataWriter = new XmlTextWriter(sw); // Start the XML file. metadataWriter.WriteStartDocument(); #region entity // Start the entity node. metadataWriter.WriteStartElement("Entity"); // Write the entity metadata. metadataWriter.WriteElementString("Name", entityResponse.EntityMetadata.LogicalName); // Expand to write the metadata for languages other than the first. if (entityResponse.EntityMetadata.DisplayName.LocLabels.Length != 0) { metadataWriter.WriteElementString("DisplayName", entityResponse.EntityMetadata.DisplayName.LocLabels[0].Label); metadataWriter.WriteElementString("LanguageCode", entityResponse.EntityMetadata.DisplayName.LocLabels[0].LanguageCode.Value.ToString()); } metadataWriter.WriteElementString("IsAvailableOffline", entityResponse.EntityMetadata.IsAvailableOffline.Value.ToString()); metadataWriter.WriteElementString("IsCustomEntity", entityResponse.EntityMetadata.IsCustomEntity.Value.ToString()); metadataWriter.WriteElementString("IsCustomizable", entityResponse.EntityMetadata.IsCustomizable.Value.ToString()); metadataWriter.WriteElementString("IsIntersect", entityResponse.EntityMetadata.IsIntersect.Value.ToString()); metadataWriter.WriteElementString("ObjectTypeCode", entityResponse.EntityMetadata.ObjectTypeCode.Value.ToString()); metadataWriter.WriteElementString("OwnershipType", entityResponse.EntityMetadata.OwnershipType.Value.ToString()); metadataWriter.WriteElementString("PrimaryField", entityResponse.EntityMetadata.PrimaryField); metadataWriter.WriteElementString("PrimaryKey", entityResponse.EntityMetadata.PrimaryKey); metadataWriter.WriteElementString("ReportViewName", entityResponse.EntityMetadata.ReportViewName); #endregion #region attributes // Write the attributes for the entity. metadataWriter.WriteStartElement("Attributes"); foreach (AttributeMetadata am in entityResponse.EntityMetadata.Attributes) { // Start the attribute node. metadataWriter.WriteStartElement("Attribute"); // Write the metadata for the attribute. metadataWriter.WriteElementString("Name", am.LogicalName.ToString()); metadataWriter.WriteElementString("AttributeType", am.AttributeType.Value.ToString()); if (am.AggregateOf != null) metadataWriter.WriteElementString("AggregateOf", am.AggregateOf); if (am.AttributeOf != null) metadataWriter.WriteElementString("AttributeOf", am.AttributeOf); if (am.DefaultValue != null) metadataWriter.WriteElementString("DefaultValue", am.DefaultValue.ToString()); metadataWriter.WriteElementString("DisplayMask", am.DisplayMask.Value.ToString()); // Expand to write the metadata for languages other than the first. if (am.DisplayName.LocLabels.Length != 0) { metadataWriter.WriteElementString("DisplayName", am.DisplayName.LocLabels[0].Label); metadataWriter.WriteElementString("LanguageCode", am.DisplayName.LocLabels[0].LanguageCode.Value.ToString()); } metadataWriter.WriteElementString("IsCustomField", am.IsCustomField.Value.ToString()); metadataWriter.WriteElementString("RequiredLevel", am.RequiredLevel.Value.ToString()); metadataWriter.WriteElementString("ValidForCreate", am.ValidForCreate.Value.ToString()); metadataWriter.WriteElementString("ValidForRead", am.ValidForRead.Value.ToString()); metadataWriter.WriteElementString("ValidForUpdate", am.ValidForUpdate.Value.ToString()); // End attribute node. metadataWriter.WriteEndElement(); } // End attributes node. metadataWriter.WriteEndElement(); #endregion #region References From // Start the one to many (references from) node. metadataWriter.WriteStartElement("OneToMany"); foreach (RelationshipMetadata refFrom in entityResponse.EntityMetadata.OneToManyRelationships) { // Start the relationship node. metadataWriter.WriteStartElement("Relationship"); if (refFrom is OneToManyMetadata) { OneToManyMetadata currentRelationship = refFrom as OneToManyMetadata; metadataWriter.WriteElementString("SchemaName", currentRelationship.SchemaName.ToString()); metadataWriter.WriteElementString("IsCustomRelationship", currentRelationship.IsCustomRelationship.Value.ToString()); metadataWriter.WriteElementString("ReferencedEntity", currentRelationship.ReferencedEntity.ToString()); metadataWriter.WriteElementString("ReferencedAttribute", currentRelationship.ReferencedAttribute.ToString()); metadataWriter.WriteElementString("ReferencingEntity", currentRelationship.ReferencingEntity.ToString()); metadataWriter.WriteElementString("ReferencingAttribute", currentRelationship.ReferencingAttribute.ToString()); } // End reference node. metadataWriter.WriteEndElement(); } // End man to one (references from) node. metadataWriter.WriteEndElement(); #endregion #region Many To Many // Start the many to many node. metadataWriter.WriteStartElement("ManyToMany"); foreach (RelationshipMetadata refFrom in entityResponse.EntityMetadata.ManyToManyRelationships) { // Start the relationship node. metadataWriter.WriteStartElement("Relationship"); if (refFrom is ManyToManyMetadata) { ManyToManyMetadata currentRelationship = refFrom as ManyToManyMetadata; metadataWriter.WriteElementString("SchemaName", currentRelationship.SchemaName.ToString()); metadataWriter.WriteElementString("IsCustomRelationship", currentRelationship.IsCustomRelationship.Value.ToString()); metadataWriter.WriteElementString("Entity1", currentRelationship.Entity1LogicalName.ToString()); metadataWriter.WriteElementString("Entity2", currentRelationship.Entity2LogicalName.ToString()); } // End reference node. metadataWriter.WriteEndElement(); } // End man to one (references from) node. metadataWriter.WriteEndElement(); #endregion #region References To // Start the many to one (references from) node. metadataWriter.WriteStartElement("ManyToOne"); foreach (RelationshipMetadata refFrom in entityResponse.EntityMetadata.ManyToOneRelationships) { // Start the relationship node. metadataWriter.WriteStartElement("Relationship"); if (refFrom is OneToManyMetadata) { OneToManyMetadata currentRelationship = refFrom as OneToManyMetadata; metadataWriter.WriteElementString("SchemaName", currentRelationship.SchemaName.ToString()); metadataWriter.WriteElementString("IsCustomRelationship", currentRelationship.IsCustomRelationship.Value.ToString()); metadataWriter.WriteElementString("ReferencedEntity", currentRelationship.ReferencedEntity.ToString()); metadataWriter.WriteElementString("ReferencedAttribute", currentRelationship.ReferencedAttribute.ToString()); metadataWriter.WriteElementString("ReferencingEntity", currentRelationship.ReferencingEntity.ToString()); metadataWriter.WriteElementString("ReferencingAttribute", currentRelationship.ReferencingAttribute.ToString()); } // End reference node. metadataWriter.WriteEndElement(); } // End man to one (references from) node. metadataWriter.WriteEndElement(); #endregion #region Privileges // Start the privileges node. metadataWriter.WriteStartElement("Privileges"); foreach (SecurityPrivilegeMetadata priv in entityResponse.EntityMetadata.Privileges) { // Start the privilege node. metadataWriter.WriteStartElement("Privilege"); metadataWriter.WriteElementString("Name", priv.Name.ToString()); metadataWriter.WriteElementString("PrivilegeType", priv.PrivilegeType.Value.ToString()); metadataWriter.WriteElementString("PrivilegeId", priv.PrivilegeId.Value.ToString()); // End privilege node. metadataWriter.WriteEndElement(); } // End privileges node. metadataWriter.WriteEndElement(); #endregion // End entity node. metadataWriter.WriteEndElement(); metadataWriter.WriteEndDocument(); // Close XML writer. metadataWriter.Close(); } return true; } // Handle any Web service exceptions that might be thrown. catch (System.Web.Services.Protocols.SoapException ex) { // TODO Handle the exception thrown. if (true) // ex.Code.ToString() == 0x8004A101 { Console.WriteLine("Request Failed.\n {0}", ex.Message); } else { // Handle other soap exceptions. } return false; } } } }
Hope this helps. Amar
CRM Forum Guidance on how to Help Us Help You
- Proposed as answer by Faisal Fiaz Thursday, April 7, 2011 6:29 PM
- Marked as answer by DavidJennawayMVP, Moderator Monday, August 22, 2011 2:20 PM
Thursday, April 7, 2011 1:59 PM
All replies
-
SDK has the code you need.
// ===================================================================== // File: Program.cs // Summary: This sample shows how to use the metadata service. // ===================================================================== // // This file is part of the Microsoft CRM SDK Code Samples. // // Copyright (C) Microsoft Corporation. All rights reserved. // // This source code is intended only as a supplement to Microsoft // Development Tools and/or on-line documentation. See these other // materials for detailed information regarding Microsoft code samples. // // THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // ===================================================================== using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Xml; // Microsoft CRM namespace(s) using CrmSdk2007; //using Microsoft.Crm.Sdk.Walkthrough.MetadataSdk; namespace Microsoft.Crm.Sdk.Walkthrough { public class Metadata { static void Main(string[] args) { String entity = "annotation"; if (args.Length != 0) entity = args[0]; Run(entity); } public static bool Run(string entity) { // Create an authentication token. CrmAuthenticationToken token = new CrmAuthenticationToken(); token.OrganizationName = "AdventureWorksCycle"; // You can use enums.cs from the SDK\Helpers folder to get the enumeration for AD Authentication. token.AuthenticationType = 0; // Create the metadata Web service. MetadataService service = new MetadataService(); // ToDo: Change to your server name. service.Url = "http://localhost/MSCRMServices/2007/MetadataService.asmx"; service.CrmAuthenticationTokenValue = token; service.Credentials = System.Net.CredentialCache.DefaultCredentials; try { // Retrieve the timestamp. RetrieveTimestampRequest request = new RetrieveTimestampRequest(); RetrieveTimestampResponse response = (RetrieveTimestampResponse)service.Execute(request); System.Console.WriteLine(response.Timestamp.ToString()); // Retrieve the metadata for the specified entity. RetrieveEntityRequest entityRequest = new RetrieveEntityRequest(); entityRequest.LogicalName = entity; // Set the amount of data to retrieve. // For better performance, do not retrieve All unless you really need it. entityRequest.EntityItems = EntityItems.All; RetrieveEntityResponse entityResponse = (RetrieveEntityResponse)service.Execute(entityRequest); // Create an instance of StreamWriter to write text to a file. // The using statement also closes the StreamWriter. using (StreamWriter sw = new StreamWriter(String.Concat(entityRequest.LogicalName, ".xml"))) { // Create the XML writer. XmlTextWriter metadataWriter = new XmlTextWriter(sw); // Start the XML file. metadataWriter.WriteStartDocument(); #region entity // Start the entity node. metadataWriter.WriteStartElement("Entity"); // Write the entity metadata. metadataWriter.WriteElementString("Name", entityResponse.EntityMetadata.LogicalName); // Expand to write the metadata for languages other than the first. if (entityResponse.EntityMetadata.DisplayName.LocLabels.Length != 0) { metadataWriter.WriteElementString("DisplayName", entityResponse.EntityMetadata.DisplayName.LocLabels[0].Label); metadataWriter.WriteElementString("LanguageCode", entityResponse.EntityMetadata.DisplayName.LocLabels[0].LanguageCode.Value.ToString()); } metadataWriter.WriteElementString("IsAvailableOffline", entityResponse.EntityMetadata.IsAvailableOffline.Value.ToString()); metadataWriter.WriteElementString("IsCustomEntity", entityResponse.EntityMetadata.IsCustomEntity.Value.ToString()); metadataWriter.WriteElementString("IsCustomizable", entityResponse.EntityMetadata.IsCustomizable.Value.ToString()); metadataWriter.WriteElementString("IsIntersect", entityResponse.EntityMetadata.IsIntersect.Value.ToString()); metadataWriter.WriteElementString("ObjectTypeCode", entityResponse.EntityMetadata.ObjectTypeCode.Value.ToString()); metadataWriter.WriteElementString("OwnershipType", entityResponse.EntityMetadata.OwnershipType.Value.ToString()); metadataWriter.WriteElementString("PrimaryField", entityResponse.EntityMetadata.PrimaryField); metadataWriter.WriteElementString("PrimaryKey", entityResponse.EntityMetadata.PrimaryKey); metadataWriter.WriteElementString("ReportViewName", entityResponse.EntityMetadata.ReportViewName); #endregion #region attributes // Write the attributes for the entity. metadataWriter.WriteStartElement("Attributes"); foreach (AttributeMetadata am in entityResponse.EntityMetadata.Attributes) { // Start the attribute node. metadataWriter.WriteStartElement("Attribute"); // Write the metadata for the attribute. metadataWriter.WriteElementString("Name", am.LogicalName.ToString()); metadataWriter.WriteElementString("AttributeType", am.AttributeType.Value.ToString()); if (am.AggregateOf != null) metadataWriter.WriteElementString("AggregateOf", am.AggregateOf); if (am.AttributeOf != null) metadataWriter.WriteElementString("AttributeOf", am.AttributeOf); if (am.DefaultValue != null) metadataWriter.WriteElementString("DefaultValue", am.DefaultValue.ToString()); metadataWriter.WriteElementString("DisplayMask", am.DisplayMask.Value.ToString()); // Expand to write the metadata for languages other than the first. if (am.DisplayName.LocLabels.Length != 0) { metadataWriter.WriteElementString("DisplayName", am.DisplayName.LocLabels[0].Label); metadataWriter.WriteElementString("LanguageCode", am.DisplayName.LocLabels[0].LanguageCode.Value.ToString()); } metadataWriter.WriteElementString("IsCustomField", am.IsCustomField.Value.ToString()); metadataWriter.WriteElementString("RequiredLevel", am.RequiredLevel.Value.ToString()); metadataWriter.WriteElementString("ValidForCreate", am.ValidForCreate.Value.ToString()); metadataWriter.WriteElementString("ValidForRead", am.ValidForRead.Value.ToString()); metadataWriter.WriteElementString("ValidForUpdate", am.ValidForUpdate.Value.ToString()); // End attribute node. metadataWriter.WriteEndElement(); } // End attributes node. metadataWriter.WriteEndElement(); #endregion #region References From // Start the one to many (references from) node. metadataWriter.WriteStartElement("OneToMany"); foreach (RelationshipMetadata refFrom in entityResponse.EntityMetadata.OneToManyRelationships) { // Start the relationship node. metadataWriter.WriteStartElement("Relationship"); if (refFrom is OneToManyMetadata) { OneToManyMetadata currentRelationship = refFrom as OneToManyMetadata; metadataWriter.WriteElementString("SchemaName", currentRelationship.SchemaName.ToString()); metadataWriter.WriteElementString("IsCustomRelationship", currentRelationship.IsCustomRelationship.Value.ToString()); metadataWriter.WriteElementString("ReferencedEntity", currentRelationship.ReferencedEntity.ToString()); metadataWriter.WriteElementString("ReferencedAttribute", currentRelationship.ReferencedAttribute.ToString()); metadataWriter.WriteElementString("ReferencingEntity", currentRelationship.ReferencingEntity.ToString()); metadataWriter.WriteElementString("ReferencingAttribute", currentRelationship.ReferencingAttribute.ToString()); } // End reference node. metadataWriter.WriteEndElement(); } // End man to one (references from) node. metadataWriter.WriteEndElement(); #endregion #region Many To Many // Start the many to many node. metadataWriter.WriteStartElement("ManyToMany"); foreach (RelationshipMetadata refFrom in entityResponse.EntityMetadata.ManyToManyRelationships) { // Start the relationship node. metadataWriter.WriteStartElement("Relationship"); if (refFrom is ManyToManyMetadata) { ManyToManyMetadata currentRelationship = refFrom as ManyToManyMetadata; metadataWriter.WriteElementString("SchemaName", currentRelationship.SchemaName.ToString()); metadataWriter.WriteElementString("IsCustomRelationship", currentRelationship.IsCustomRelationship.Value.ToString()); metadataWriter.WriteElementString("Entity1", currentRelationship.Entity1LogicalName.ToString()); metadataWriter.WriteElementString("Entity2", currentRelationship.Entity2LogicalName.ToString()); } // End reference node. metadataWriter.WriteEndElement(); } // End man to one (references from) node. metadataWriter.WriteEndElement(); #endregion #region References To // Start the many to one (references from) node. metadataWriter.WriteStartElement("ManyToOne"); foreach (RelationshipMetadata refFrom in entityResponse.EntityMetadata.ManyToOneRelationships) { // Start the relationship node. metadataWriter.WriteStartElement("Relationship"); if (refFrom is OneToManyMetadata) { OneToManyMetadata currentRelationship = refFrom as OneToManyMetadata; metadataWriter.WriteElementString("SchemaName", currentRelationship.SchemaName.ToString()); metadataWriter.WriteElementString("IsCustomRelationship", currentRelationship.IsCustomRelationship.Value.ToString()); metadataWriter.WriteElementString("ReferencedEntity", currentRelationship.ReferencedEntity.ToString()); metadataWriter.WriteElementString("ReferencedAttribute", currentRelationship.ReferencedAttribute.ToString()); metadataWriter.WriteElementString("ReferencingEntity", currentRelationship.ReferencingEntity.ToString()); metadataWriter.WriteElementString("ReferencingAttribute", currentRelationship.ReferencingAttribute.ToString()); } // End reference node. metadataWriter.WriteEndElement(); } // End man to one (references from) node. metadataWriter.WriteEndElement(); #endregion #region Privileges // Start the privileges node. metadataWriter.WriteStartElement("Privileges"); foreach (SecurityPrivilegeMetadata priv in entityResponse.EntityMetadata.Privileges) { // Start the privilege node. metadataWriter.WriteStartElement("Privilege"); metadataWriter.WriteElementString("Name", priv.Name.ToString()); metadataWriter.WriteElementString("PrivilegeType", priv.PrivilegeType.Value.ToString()); metadataWriter.WriteElementString("PrivilegeId", priv.PrivilegeId.Value.ToString()); // End privilege node. metadataWriter.WriteEndElement(); } // End privileges node. metadataWriter.WriteEndElement(); #endregion // End entity node. metadataWriter.WriteEndElement(); metadataWriter.WriteEndDocument(); // Close XML writer. metadataWriter.Close(); } return true; } // Handle any Web service exceptions that might be thrown. catch (System.Web.Services.Protocols.SoapException ex) { // TODO Handle the exception thrown. if (true) // ex.Code.ToString() == 0x8004A101 { Console.WriteLine("Request Failed.\n {0}", ex.Message); } else { // Handle other soap exceptions. } return false; } } } }
Hope this helps. Amar
CRM Forum Guidance on how to Help Us Help You
- Proposed as answer by Faisal Fiaz Thursday, April 7, 2011 6:29 PM
- Marked as answer by DavidJennawayMVP, Moderator Monday, August 22, 2011 2:20 PM
Thursday, April 7, 2011 1:59 PM -
You can download the SDK here:
Jamie Miley
http://mileyja.blogspot.com
Linked-In Profile
Follow Me on Twitter!- Proposed as answer by Jamie MileyModerator Friday, April 8, 2011 3:12 PM
Thursday, April 7, 2011 2:03 PMModerator -
I want to get all the attributes present in an entity for CRM 4.0 using metadataservice. Please provide link or code snippet.
Thanks in advance
// Create the request
RetrieveEntityRequest entityRequest = new RetrieveEntityRequest();
// Retrieve only the currently published changes, ignoring the changes that have
// not been published.
entityRequest.RetrieveAsIfPublished = false;
entityRequest.LogicalName = EntityName.contact.ToString();
entityRequest.EntityItems = EntityItems.IncludeAttributes;
// Execute the request
RetrieveEntityResponse entityResponse = (RetrieveEntityResponse)metadataService.Execute(entityRequest);
// Access the retrieved entity
EntityMetadata retrievedEntityMetadata = entityResponse.EntityMetadata;The EntityItems enumeration type describes which entity data to retrieve when using the RetrieveEntity message.
vishal swami http://msdynamics4you.blogspot.com- Proposed as answer by VishalSwamiMicrosoft employee Thursday, April 7, 2011 2:05 PM
Thursday, April 7, 2011 2:05 PM -
Did you find the answer you needed?
Jamie Miley
http://mileyja.blogspot.com
Linked-In Profile
Follow Me on Twitter!Saturday, June 4, 2011 2:39 AMModerator -
The sdk can be used this way to get the data. This example is in both .NET and jscript
http://mileyja.blogspot.com/2011/05/how-to-retrieve-metadata-for-entity.html
Jamie Miley
http://mileyja.blogspot.com
Linked-In Profile
Follow Me on Twitter!- Proposed as answer by Jamie MileyModerator Saturday, June 4, 2011 2:41 AM
Saturday, June 4, 2011 2:41 AMModerator -
I have download the SDK and I am not able to locate DLL for
using CrmSdk2007;
Error 1 The type or namespace name 'CrmSdk2007' could not be found (are you missing a using directive or an assembly reference?) C:\Users\paull\Downloads\CRM4\sdk\walkthroughs\metadata\cs\retrieve\Metadata.cs 27 7 metadata
Tuesday, September 23, 2014 9:24 PM