如何获取所有实体的字段CRM 2011?



我正在尝试获取所有实体的字段架构名称,而无需查询现有记录。我一点也不知道。

另外,我如何使用QueryExpression获取它,因为它检索包含一些信息的所有字段?

安德里,我正在尝试做这样的事情

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

如果您有 CRM SDK (http://www.microsoft.com/en-us/download/details.aspx?id=24004),您将在 SDK\Bin 文件夹中找到一个名为"Crmsvcutil.exe"的实用程序。 此可执行文件将生成表示每个 CRM 实体及其字段的类。 然后,可以使用该类型。GetFields() 方法,用于在代码中派生这些类的字段。 使用 crmsvcutil 创建这些类后,可以使用 LINQ 查询根据适合您的需要的任何条件(包括非空字段)查询 CRM 数据。 尝试使用 QueryExpression 时会遇到的问题是,您必须手动定义字段,如下所示:

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

我一直在寻找类似的东西,最终做了一个有用的方法:

/// <summary>
/// Retrieves an entity's attributes.
/// </summary>
/// <param name="entityName">entity's name</param>
/// <param name="languageId">return display names of such language code</param>
/// <param name="xrm">xrmservicecontext object</param>
/// <returns>Dictionary<string, string></returns>
public static Dictionary<string, string> GetAttributes(string entityName, int languageId, XrmServiceContext xrm)
{
    Dictionary<string, string> attributesData = new Dictionary<string, string>();
    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;
}

您当然可以修改它以返回您需要的有关实体属性的任何信息,但我正在寻找一种方法来替换 CRM SDK 用于自动生成 gridview 列的属性的逻辑名称与属性的实际显示名称。

您应该尝试使用 RetrieveEntity 消息来获取所有实体字段。如果字段等于 null,您将无法获取字段。你必须分析 - 如果集合中的属性 - 它包含值,否则等于 null。

最新更新