¿Cómo obtener todos los campos de la entidad CRM 2011?

Estoy tratando de obtener todos los nombres de esquema de los campos de la entidad sin consultar el registro existente. No tengo ni idea.

Además, ¿cómo puedo obtenerlo con QueryExpression, ya que recupera todos los campos que contienen información?

Andrii, estoy tratando de hacer algo como esto.

var query = new QueryExpression {EntityName = "", ColumnSet = new ColumnSet(true)}; var retrieve = service.RetrieveMultiple(query); 

Si tiene el SDK de CRM ( http://www.microsoft.com/en-us/download/details.aspx?id=24004 ), encontrará una utilidad llamada “Crmsvcutil.exe” en la carpeta SDK \ Bin. Este ejecutable generará clases que representan a cada una de sus entidades de CRM y sus campos. Luego puede usar el método type.GetFields () para derivar los campos de estas clases dentro de su código. Una vez que haya creado estas clases con crmsvcutil, puede usar las consultas LINQ para consultar sus datos de CRM en función de cualquier criterio que se adapte a sus necesidades, incluidos los campos que no son nulos. El problema con el que tratará de usar QueryExpression es que debe definir los campos manualmente como se muestra a continuación:

 QueryExpression query = new QueryExpression("contact"); query.ColumnSet.AddColumns("firstname", "lastname"); query.Criteria.AddFilter(filter1); 

Estaba buscando algo similar y terminé cocinando un método útil como tal:

 ///  /// Retrieves an entity's attributes. ///  /// entity's name /// return display names of such language code /// xrmservicecontext object /// Dictionary public static Dictionary GetAttributes(string entityName, int languageId, XrmServiceContext xrm) { Dictionary attributesData = new Dictionary(); RetrieveEntityRequest metaDataRequest = new RetrieveEntityRequest(); RetrieveEntityResponse metaDataResponse = new RetrieveEntityResponse(); metaDataRequest.EntityFilters = EntityFilters.Attributes; metaDataRequest.LogicalName = entityName; metaDataResponse = (RetrieveEntityResponse)xrm.Execute(metaDataRequest); foreach (AttributeMetadata a in metaDataResponse.EntityMetadata.Attributes) { //if more than one label for said attribute, get the one matching the languade code we want... if (a.DisplayName.LocalizedLabels.Count() > 1) attributesData.Add(a.LogicalName, a.DisplayName.LocalizedLabels.Where(x=>x.LanguageCode == languageId).SingleOrDefault().Label); //else, get the only one available regardless of languade code... if (a.DisplayName.LocalizedLabels.Count() == 1) attributesData.Add(a.LogicalName, a.DisplayName.LocalizedLabels[0].Label); } return attributesData; } 

Por supuesto, podría modificarlo para devolver cualquier información que necesite sobre los atributos de la entidad, pero en mi caso estaba buscando una manera de reemplazar el nombre lógico de los atributos que utiliza el SDK de CRM para generar automáticamente columnas de viewview con el nombre de visualización real de los atributos.

Debe intentar usar el mensaje RetrieveEntity para obtener todos los campos de entidad. No podría obtener el campo en caso de que sea igual a nulo. Tendrá que analizar, si el atributo dentro de la colección, contiene valor, de lo contrario es igual a nulo.