Dynamics CRM使用元数据之一:查询实体的主字段(托管代码版本)

关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复159或者20151013可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me!
Dynamics CRM是基于元数据(metadata)的信息系统,做一些比较通用的功能时候需要查询元数据,本篇博文先介绍一个简单的例子,查询实体主字段(Primary Attribute)的名称及其值。
我们知道新建实体的主字段的名称总是开发者前缀加上 _name,但是有些标准实体却不是,比如联系人实体(contact),用户实体(systemuser)等等,但是有一个共同点就是,主字段的字段类型总是单行文本,查找字段显示的是查找实体的主字段的值。
在CRM中查看实体的主字段很方便,在解决方案中点击实体,切换到 主字段 这个tabpage即可。
 
当然还可以通过查看实体元数据中的 PrimaryNameAttribute 属性来确定。
 
本篇博文介绍的通过代码来查看并获取值,我们先来看一个标准的实体,也就是用户实体,代码如下:
        static void Main(string[] args)
        {
            var service = GetOrganizationService();
            WhoAmIRequest whoAmIRequest = new WhoAmIRequest();
            WhoAmIResponse whoAmIResponse = service.Execute(whoAmIRequest) as WhoAmIResponse;
            const string entityLogicalName = "systemuser";
            Guid entityId = whoAmIResponse.UserId;
            RetrieveEntityRequest request = new RetrieveEntityRequest
            {
                EntityFilters = EntityFilters.Entity,
                LogicalName = entityLogicalName
            };
            RetrieveEntityResponse response = service.Execute(request) as RetrieveEntityResponse;
            string primaryNameAttribute = response.EntityMetadata.PrimaryNameAttribute;
            Console.WriteLine("实体逻辑名称为" + entityLogicalName + "的主字段是" + primaryNameAttribute);
            Entity entity = service.Retrieve(entityLogicalName, entityId, new ColumnSet(primaryNameAttribute));
            Console.WriteLine("ID为" + entityId.ToString() + ",实体名称为" + entityLogicalName + "的主字段的值是" + entity.GetAttributeValue<string>(primaryNameAttribute));
            Console.WriteLine("程序运行完成!");
            Console.ReadKey();
        }

 

代码运行结果如下:
 
我们再拿一个自定义的实体来做试验,代码如下:
        static void Main(string[] args)
        {
            var service = GetOrganizationService();
            WhoAmIRequest whoAmIRequest = new WhoAmIRequest();
            WhoAmIResponse whoAmIResponse = service.Execute(whoAmIRequest) as WhoAmIResponse;
            const string entityLogicalName = "new_test";
            Guid entityId = new Guid("D7D08CEA-5051-E511-80D2-000D3A802FAC");
            RetrieveEntityRequest request = new RetrieveEntityRequest
            {
                EntityFilters = EntityFilters.Entity,
                LogicalName = entityLogicalName
            };
            RetrieveEntityResponse response = service.Execute(request) as RetrieveEntityResponse;
            string primaryNameAttribute = response.EntityMetadata.PrimaryNameAttribute;
            Console.WriteLine("实体逻辑名称为" + entityLogicalName + "的主字段是" + primaryNameAttribute);
            Entity entity = service.Retrieve(entityLogicalName, entityId, new ColumnSet(primaryNameAttribute));
            Console.WriteLine("ID为" + entityId.ToString() + ",实体名称为" + entityLogicalName + "的主字段的值是" + entity.GetAttributeValue<string>(primaryNameAttribute));
            Console.WriteLine("程序运行完成!");
            Console.ReadKey();
        }

 

运行结果如下:
 
都是符合要求的。
 
posted @ 2019-06-04 23:52  微软MVP(15-18)罗勇  阅读(816)  评论(1编辑  收藏  举报