zoukankan      html  css  js  c++  java
  • 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();
            }
    运行结果如下:
     
    都是符合要求的。
     
  • 相关阅读:
    Java Varargs 可变参数使用
    GitLab 如何删除 Forked from
    Git Clone 的时候遇到 Filename too long 错误
    Spring Boot 如何部署到 Linux 中的服务
    Gradle 如何打包 Spring Boot 如何不添加版本代码
    HDU 5878---预处理+二分查找
    HDU 5881--Tea 思维规律
    HDU 5879---cure
    (转)C/S 与 B/S 区别
    卡特兰数
  • 原文地址:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Query_Primary_Attribute_Through_Managed_Code.html
Copyright © 2011-2022 走看看