注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

微软MVP罗勇的博客

微软MVP罗勇,www.luoyong.me

 
 
 

日志

 
 

Dynamics CRM 2015/2016新特性之二十七:使用Web API查询元数据  

2016-03-21 14:32:21|  分类: 2015/2016新特性 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复210或者20160321可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!
通过Web API查询元数据和查询记录差不多,不同的是URL部分变化了,总是会返回的是 MetadataId 属性及其值,而且部分操作符好像不支持,发现top,contains 等操作符不支持。
我们先来看一个实体的元数据吧,我这里使用的URL是 http://lycrmvm.cloudapp.net:5555/Demo/api/data/v8.0/EntityDefinitions?$filter=SchemaName eq 'ly_Test' ,浏览器中打开效果如下,当然我这里是显示我自己创建的实体的元数据,不是所有的实体,我在URL中加了筛选条件。
Dynamics CRM 2015/2016新特性之二十七:使用Web API查询元数据 - 罗勇 - 微软MVP罗勇的博客

下面的示例代码就是查询一个实体的元数据信息:

    var clientURL = Xrm.Page.context.getClientUrl();
    var req = new XMLHttpRequest()
    req.open("GET", encodeURI(clientURL + "/api/data/v8.0/EntityDefinitions?$filter=SchemaName eq 'ly_Test'"), true);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.onreadystatechange = function () {
        if (this.readyState == 4) {
            req.onreadystatechange = null;
            if (this.status == 200) {
                var responseJSON = JSON.parse(this.responseText);               
                Xrm.Utility.alertDialog("查询到的元数据ID是" + responseJSON.value[0]["MetadataId"] + ",实体复数显示名称是:" + responseJSON.value[0].DisplayCollectionName.LocalizedLabels[0].Label + ",主属性是:" + responseJSON.value[0].PrimaryNameAttribute);
            }
            else {
                var error = JSON.parse(this.responseText).error;
                Xrm.Utility.alertDialog("查询罗勇测试实体元数据出错." + error.message);
            }
        }
    };
    req.send();


下面是结果截图:
Dynamics CRM 2015/2016新特性之二十七:使用Web API查询元数据 - 罗勇 - 微软MVP罗勇的博客
 
当然也可支持count操作符,我这里的例子如下:

    var clientURL = Xrm.Page.context.getClientUrl();
    var req = new XMLHttpRequest()
    req.open("GET", encodeURI(clientURL + "/api/data/v8.0/EntityDefinitions?$select=DisplayCollectionName,PrimaryNameAttribute,SchemaName&$filter=IsCustomizable/Value eq true&$count=true"), true);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.onreadystatechange = function () {
        if (this.readyState == 4) {
            req.onreadystatechange = null;
            if (this.status == 200) {
                var responseJSON = JSON.parse(this.responseText);               
                Xrm.Utility.alertDialog("共有" + responseJSON["@odata.count"] + "个实体可以定制,第一个实体的元数据ID是" + responseJSON.value[0]["MetadataId"] + ",实体复数显示名称是:" + responseJSON.value[0].DisplayCollectionName.LocalizedLabels[0].Label + ",架构名称是:" + responseJSON.value[0].SchemaName + ",主属性是:" + responseJSON.value[0].PrimaryNameAttribute);
            }
            else {
                var error = JSON.parse(this.responseText).error;
                Xrm.Utility.alertDialog("查询罗勇测试实体元数据出错." + error.message);
            }
        }
    };
    req.send();

还有个常用的就是根据一个实体的MetadatdId来查看实体的字段信息,我这里也上一个例子,注意查看URL的写法,更多的请参考SDK的 Query Metadata using the Web API 章节:

    var clientURL = Xrm.Page.context.getClientUrl();
    var req = new XMLHttpRequest()
    req.open("GET", encodeURI(clientURL + "/api/data/v8.0/EntityDefinitions(e373eab4-9ca4-e511-80cc-000d3a80ce7f)?$select=SchemaName&$expand=Attributes($select=SchemaName;$filter=AttributeType eq Microsoft.Dynamics.CRM.AttributeTypeCode'String' and IsCustomizable/Value eq true and IsCustomAttribute eq true and IsLogical eq false)"), true);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.onreadystatechange = function () {
        if (this.readyState == 4) {
            req.onreadystatechange = null;
            if (this.status == 200) {
                var stringFields = "";
                var responseJSON = JSON.parse(this.responseText);
                if (responseJSON.Attributes != null && responseJSON.Attributes.length >= 1) {
                    for (var i = 0; i < responseJSON.Attributes.length; i++) {
                        stringFields += responseJSON.Attributes[i].SchemaName + ";";
                    }
                }
                if (stringFields != "") {
                    Xrm.Utility.alertDialog("这个实体的文本字段有" + stringFields.substring(0, stringFields.length - 1));
                }
            }
            else {
                var error = JSON.parse(this.responseText).error;
                Xrm.Utility.alertDialog("查询罗勇测试实体元数据出错." + error.message);
            }
        }
    };
    req.send();


结果截图如下:
Dynamics CRM 2015/2016新特性之二十七:使用Web API查询元数据 - 罗勇 - 微软MVP罗勇的博客

很多时候还需要根据实体的ObjectTypeCode来查找究竟是哪个实体,用这个也可以查询出来的:
https://demo.luoyong.me/api/data/v8.1/EntityDefinitions?$select=SchemaName&$filter=ObjectTypeCode eq 1

Dynamics CRM 2015/2016新特性之二十七:使用Web API查询元数据 - 罗勇 - 微软MVP罗勇的博客
 
大家可能还会发现,返回的中文都是编码的,如何看到中文的呢?这里用chrome来说明,按F12以后点击 Network ,在Name这里点击下,点击右边的 Preview 这个tab,这里面显示的就是中文了,如下。
Dynamics CRM 2015/2016新特性之二十七:使用Web API查询元数据 - 罗勇 - 微软MVP罗勇的博客
 
还可以通过stringmap实体来查看选项集的相关信息,使用的url如下:
https://demo.luoyong.me/api/data/v8.1/stringmaps?$select=attributevalue,value&$filter=objecttypecode eq 'ly_test' and attributename eq 'ly_optionset'

Dynamics CRM 2015/2016新特性之二十七:使用Web API查询元数据 - 罗勇 - 微软MVP罗勇的博客
 

素格格新疆特产店--做新疆特产的搬运工。
本店由博主的新疆老婆开设,搬运各种上等的新疆特产,是自用,送礼,年货,孝敬长辈特别是(岳)父母的首选!
Dynamics CRM 2015/2016新特性之十五:CRM On<wbr>line升级和产品计价更多选择 - 罗勇 - 微软MVP罗勇的博客
 

 
  评论这张
 
阅读(400)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017