博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MS CRM 2011 在CRM中使用REST Endpoint
阅读量:6956 次
发布时间:2019-06-27

本文共 2578 字,大约阅读时间需要 8 分钟。

 

原创地址:

转载请注明出处

 

CRM提供了两种WCF Web Service,一个是Organization Service,使用的是SOAP协议,另一个是Organization Data Service,使用的是OData(REST)协议。我们在为CRM写插件(plugin)的时候,通常都要用到第一种web service,而在客户端进行编程的时候就要使用到Organization Data Service了。Organization Data Service提供了REST Endpoint,它只能用于你写JScript脚本,或者在Silverlight中使用。具体细节也可以参看sdk中“Use the REST Endpoint for Web Resources”一节。

 

在本文中,我给大家一段代码来演示如何使用REST Endpoint。在account表单上,如果更改primary contact,我们使用Organization Data Service来获取新contact的address1_city地址栏。

if (typeof (AccountLibrary) == "undefined") {    AccountLibrary = { __namespace: true };}AccountLibrary = {    Name: "AccountLibrary",    RetrieveContactCallBack: function (retrieveRecordsReq) {        if (retrieveRecordsReq.readyState == 4 /* complete */) {            if (retrieveRecordsReq.status == 200) {                //Success                var retrievedRecord = JSON.parse(retrieveRecordsReq.responseText).d;                alert(retrievedRecord.Address1_City);            }            else {                alert("Error : " + retrieveRecordsReq.status + ": " +                    retrieveRecordsReq.statusText + ": " +                    JSON.parse(retrieveRecordsReq.responseText).error.message.value);            }        }    },    PrimaryContactOnChange: function () {        if (Xrm.Page.getAttribute("primarycontactid").getValue()) {            var contactid = Xrm.Page.getAttribute("primarycontactid").getValue()[0].id;            var retrieveEntityReq = new XMLHttpRequest();            var ODataPath = Xrm.Page.context.prependOrgName("/xrmservices/2011/organizationdata.svc");            retrieveEntityReq.open("GET", ODataPath + "/ContactSet(guid'" + contactid + "')?$select=Address1_City", true);            retrieveEntityReq.setRequestHeader("Accept", "application/json");            retrieveEntityReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");            retrieveEntityReq.onreadystatechange = function () {                AccountLibrary.RetrieveContactCallBack(this);            };            retrieveEntityReq.send();        }    }}

要注意:

(1)Address1_City是Schema Name而不是Field Name。如果使用的是Field Name(address_city1),我们会得到以下的错误信息。“Error : 400: Bad Request: Type 'Microsoft.Crm.Sdk.Data.Services.Contact' does not have a property named 'address1_city'.”

 

(2)我们在RequestHeader 中设置使用了json,所以不要忘记在web resource中引用json.js。我在另一篇文章中介绍了如何添加son.js,有兴趣的同学可以看一下。

 

(3) XMLHttpRequest.open的方法中,第三个参数是用来指定是同步还是异步的,true为异步,false为同步。什么是同步异步,不懂的同学可以在网上,比如w3school上搜索一下AJAX技术,就会了解了。另外为了优化用户使用性能,我比较推荐使用异步方式。

 

(4)在本文的例子中,我使用的是Retrieve方法,我在另一篇文章中还介绍了如何使用Retrieve Multiple方法,有兴趣的同学也可以去看一下。

你可能感兴趣的文章
python入门(四)python对文件的操作
查看>>
C# 使用接口进行排序
查看>>
干货!APP推广全周期解决方案 只需做好这6步
查看>>
存储基础网络面临的几大问题
查看>>
高效|五大模式和两大创新,看懂智能制造具体呈现
查看>>
LNMP动态网站部署架构 Linux + Nginx 配置Nginx服务
查看>>
cai
查看>>
电力变压器胶模时要注意到哪几点问题?中港扬盛提醒
查看>>
Linux 高可用(HA)集群之keepalived详解
查看>>
parse AST with Clang-example
查看>>
面向切面编程(AOP模式)
查看>>
学java就两个问题
查看>>
asdasdas da
查看>>
文本三剑客grep、sed、awk
查看>>
双机热备软件
查看>>
https提供安全的web通讯
查看>>
Spark图处理GraphX学习笔记!
查看>>
强制Apache Web服务器始终使用https
查看>>
四、openstack安装之Nova篇
查看>>
关于电脑无法开机或无法启动的几种可能和解决方案
查看>>