• 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();
            }
    运行结果如下:
     
    都是符合要求的。
     
  • 相关阅读:
    写爬虫,怎么可以不会正则呢?
    从 Scrapy 学习模块导入技巧
    博客已搬家至CSDN
    更改JDK默认编码,解决DBeaver乱码问题
    【2020面试】- Java中常见集合的默认大小以及扩容机制
    【2020面试】- CAS机制与自旋锁
    【2020面试】- filter和interceptor的区别
    【20k中级开发】-面试题201117
    【开发笔记】
    RPC 调用和 HTTP 调用的区别
  • 原文地址:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Query_Primary_Attribute_Through_Managed_Code.html
Copyright © 2020-2023  润新知