Dynamics CRM 2011 编程系列 (8):JS编程之实体CRUD辅助类
2012-03-07 21:58
525 查看
用JS开发Dynamics CRM功能需要十分的小心,往往一个拼写错误就能让你调试一个上午。在经历了若干天的痛苦后,我重新祭起了代码重用这面大旗。下面分享一个我***的辅助类,希望能帮到大家!
修改记录:
多谢健东同学的提醒,这个helper方法里面的create和update方法使用的ajax组件与read,delete方法不一致的问题。检查之后发现确实存在这个笔误,现更正之。顺便说下这两个对象的根本区别:ActiveXObject("Msxml2.XMLHTTP")对象仅被IE支持,XMLHttpRequest对象可以支持所有的浏览器。
CRUD中的4个方法,除了Read方法外,其他的方法都返回布尔值,操作成功返回true。Read方法返回的结果会有2种形式:单一对象;一个数组。读取的时候注意格式就ok啦。
本章代码下载
修改记录:
多谢健东同学的提醒,这个helper方法里面的create和update方法使用的ajax组件与read,delete方法不一致的问题。检查之后发现确实存在这个笔误,现更正之。顺便说下这两个对象的根本区别:ActiveXObject("Msxml2.XMLHTTP")对象仅被IE支持,XMLHttpRequest对象可以支持所有的浏览器。
类代码:
/* 作者:GhostBear 博客: http://blog.csdn.net/ghostbear">http://blog.csdn.net/ghostbear 简介:REST中的CRUD操作辅助脚本。 */ function RESTHelper() { } /* 方法简介:通过REST对Dynamics CRM 中的实体进行Create操作。 输入参数: createurl:调用Dynamics CRM数据服务的URL字符串。例如:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet" jsondata:需要进行Create操作的对象,必须进行json序列化。 输出参数: true:Create成功。 false:Create失败。 */ RESTHelper.prototype.Create = function (createurl,jsondata) { var xmlhttp = new XMLHttpRequest(); xmlhttp.open("POST", createurl, false); xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8"); xmlhttp.setRequestHeader("Content-Length", jsondata.length); xmlhttp.setRequestHeader("Accept", "application/json"); xmlhttp.send(jsondata); if (xmlhttp.readyState == 4) { if (xmlhttp.status == 201) { return true; } else { return false; } }//if } /* 方法简介:通过REST对Dynamics CRM 中的实体进行Read操作。 输入参数: parameter:调用Dynamics CRM数据服务的URL字符串。例如:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet(guid'{B75B220A-D2A4-48F4-8002-D8B564A866EA}')" 输出参数: Object:获得了返回值 Null:查询失败。 */ RESTHelper.prototype.Read = function (queryurl) { var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", queryurl, false); xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8"); xmlhttp.setRequestHeader("Content-Length", 0); xmlhttp.setRequestHeader("Accept", "application/json"); xmlhttp.send(null); if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { return window.JSON.parse(xmlhttp.responseText).d; } else { return null; } } } /* 简介:通过REST方式更新实体。 输入参数描述: updateurl:"/GH2011/XRMServices/2011/OrganizationData.svc/OpportunitySet(guid'{DA83B96B-DBAF-4F0C-A75D-7203F2502087}')" entity: 需要更新的对象,对象必须为JASON格式。 输出参数: 更新成功返回:true 更新失败返回:false */ RESTHelper.prototype.Update = function (updateurl, entity) { var uptXmlHttpReq = new XMLHttpRequest(); uptXmlHttpReq.open("POST", updateurl, false); uptXmlHttpReq.setRequestHeader("Accept", "application/json"); uptXmlHttpReq.setRequestHeader("Content-Type", "application/json; charset=utf-8"); uptXmlHttpReq.setRequestHeader("X-HTTP-Method", "MERGE"); uptXmlHttpReq.send(entity); if (uptXmlHttpReq.readyState == 4) { if (uptXmlHttpReq.status == 204 || uptXmlHttpReq.status == 1223) { return true; } else { return false; } } } /* 简介:通过REST方式删除实体。 参数描述: deleteurl:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet(guid'{DA83B96B-DBAF-4F0C-A75D-7203F2502087}')" 返回类型: 删除成功返回:true 删除失败返回:false */ RESTHelper.prototype.Delete = function (deleteurl) { var uptXmlHttpReq = new XMLHttpRequest(); uptXmlHttpReq.open("POST", deleteurl, false); //第三个参数表示是否已异步的方式发起请求 uptXmlHttpReq.setRequestHeader("Accept", "application/json"); uptXmlHttpReq.setRequestHeader("Content-Type", "application/json; charset=utf-8"); uptXmlHttpReq.setRequestHeader("X-HTTP-Method", "DELETE"); uptXmlHttpReq.send(null); if (uptXmlHttpReq.readyState == 4) { if (uptXmlHttpReq.status == 204 || uptXmlHttpReq.status == 1223) { return true; } else { return false; } } }
调用代码(使用说明)
function Test_RESTHelper() { var Helper=new RESTHelper(); var isok; //Create var createurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet"; var myAccount=new Object(); myAccount.Name="TestRESTHelper"; isok=Helper.Create(createurl,JSON.stringify(myAccount)); alert("Create:"+isok.toString()); //Update var updateurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet(guid'A972039B-5268-E111-8668-000C292C54BE')"; myAccount=new Object(); myAccount.Name="new_TestRESTHelper"; isok=Helper.Update(updateurl,JSON.stringify(myAccount)); alert("update:"+isok.toString()); //Read //获取单条记录 var queryurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet(guid'182752ee-5868-e111-8668-000c292c54be')"; var data=Helper.Read(queryurl); alert(data.Name); //获取多记录 var queryurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet"; var data=Helper.Read(queryurl); var result=""; var tmp; for(tmp in data.results) { result+=data.results[tmp].Name+"\n"; } alert(result); //Delete var deleteurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet(guid'A972039B-5268-E111-8668-000C292C54BE')"; isok=Helper.Delete(deleteurl); alert("Delete:"+isok.toString()); }
小结
CRUD中的4个方法,除了Read方法外,其他的方法都返回布尔值,操作成功返回true。Read方法返回的结果会有2种形式:单一对象;一个数组。读取的时候注意格式就ok啦。代码下载
JSON序列化脚本下载本章代码下载
相关文章推荐
- Dynamics CRM 2011 编程系列(7):JS编程之实体的CRUD[Update,Delete]
- Dynamics CRM 2011 编程系列 (6):JS脚本编程之实体的CRUD[Create,Read]
- Dynamics CRM 2011编程系列(60):JS编程之CRUD辅助类(JQuery版)
- Dynamics CRM 2011编程系列(60):JS编程之CRUD辅助类(JQuery版)
- Dynamics CRM 2011 编程系列(9):JS编程之客户端实体
- Dynamics CRM 2011 编程系列(17):用插件来实现实体的CRUD
- Dynamics CRM 2011 编程系列(14):JS编程之表单控件的执行上下文
- Dynamics CRM 2011 编程系列(10):JS编程之构造OData查询字符串
- Dynamics CRM 2011 编程系列(2):JS脚本编程之onload事件
- Dynamics CRM 2011 编程系列(2):JS脚本编程之onload事件
- Dynamics CRM 2011 编程系列(3):JS脚本编程之onsave事件
- Dynamics CRM 2011 编程系列(11):JS编程之征服表单控件(一)
- Dynamics CRM 2011 编程系列(13):JS编程之Who Am I
- Dynamics CRM 2011 编程系列(5):JS脚本编程之实战一
- Dynamics CRM 2011 编程系列(15):用JS事件提交表单
- Dynamics CRM 2011 编程系列(12):JS编程之征服表单控件(二)
- 关于Dynamics CRM 2011 编程系列的写作建议(邮箱: ghost_bear@163.com)
- Dynamics CRM 2011 编程系列(25):插件的依赖注入
- Dynamics CRM 2011 编程系列(26):自定义工作流
- Dynamics CRM 2011 编程系列(30):使用ASP.NET Ajax技术的自定义页面