MS CRM 2011 在CRM中使用REST Endpoint
原创地址:http://www.cnblogs.com/jfzhu/archive/2012/10/17/2728508.html
转载请注明出处
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。我在另一篇文章《MS CRM 2011 实例 -- 添加Connect子选项 》中介绍了如何添加son.js,有兴趣的同学可以看一下。
(3) XMLHttpRequest.open的方法中,第三个参数是用来指定是同步还是异步的,true为异步,false为同步。什么是同步异步,不懂的同学可以在网上,比如w3school上搜索一下AJAX技术,就会了解了。另外为了优化用户使用性能,我比较推荐使用异步方式。
(4)在本文的例子中,我使用的是Retrieve方法,我在另一篇文章《MS CRM 2011 实例 -- 添加Connect子选项 》中还介绍了如何使用Retrieve Multiple方法,有兴趣的同学也可以去看一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构