Dynamics CRM 2011编程系列(60):JS编程之CRUD辅助类(JQuery版)
今天给大家分享一个JQuery版的REST辅助类,在一年前我分享过一个只能在IE环境下运行的REST辅助类:《JS编程之实体CRUD辅助类 》。为什么要推出JQuery版的CRUD辅助类呢? 原因有三:其一为Dynamics CRM兼容多种浏览器已经成为了一个不争的事实;其二为JQuery在Dynamics CRM 2013中已经被原生支持;其三为可以省去对json.js文件的引用。
新版本的辅助类还添加了4个CRUD的异步方法,这样咱们的这个辅助类就同时支持异步和同步的CRUD操作啦,该辅助类的代码如下:
SOURCE CODE
/* 作者: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 isCreated = false; $.ajax({ headers: { Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': jsondata.length }, type: 'POST', url: createurl, async: false, cache: false, data: jsondata, complete: function (context, result) { if (result.toLowerCase() == 'success') { isCreated = true; } } });//ajax return isCreated; } /* 方法简介:通过REST对Dynamics CRM 中的实体进行Create操作。 输入参数: createurl:调用Dynamics CRM数据服务的URL字符串。例如:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet" jsondata:需要进行Create操作的对象,必须进行json序列化。可以用JQuery自带的序列话工具进行序列化:$.ajax.parseJSON(data) callbackhandler: 该回调函数应该遵循如下格式: function callbackhandler(results,entity) { if(results==false) { //调用失败 } else { //调用成功 } } 输出参数: 无 */ RESTHelper.prototype.CreateAsync = function (createurl, jsondata, callbackhandler) { $.ajax({ headers: { Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': jsondata.length }, type: 'POST', url: createurl, async: true, cache: false, data: jsondata, complete: function (context, result) { var isCreated = false; var entity = null; if (result.toLowerCase() == 'success') { isCreated = true; try { entity = $.parseJSON(context.responseText).d; } catch (e) { } } callbackhandler(isCreate, entity); } });//ajax } /* 方法简介:通过REST对Dynamics CRM 中的实体进行Read操作。 输入参数: queryurl:调用Dynamics CRM数据服务的URL字符串。例如:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet(guid'{B75B220A-D2A4-48F4-8002-D8B564A866EA}')" 输出参数: Object:获得了返回值 Null:查询失败。 */ RESTHelper.prototype.Read = function (queryurl) { var data = null; $.ajax({ headers: { Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': 0 }, type: 'GET', url: queryurl, async: false, cache: false, complete: function (context, result) { if (result.toLowerCase() == 'success') { try { data = $.parseJSON(context.responseText).d; } catch (e) { } } } });//ajax return data; } /* 方法简介:通过REST对Dynamics CRM 中的实体进行异步的Read操作。 输入参数: queryurl:调用Dynamics CRM数据服务的URL字符串。例如:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet(guid'{B75B220A-D2A4-48F4-8002-D8B564A866EA}')" callbackhandler: 该回调函数应该遵循如下格式: function callbackhandler(results) { if(results==null) { //调用失败 } else { //调用成功 } } 输出参数: 无 */ RESTHelper.prototype.ReadAsync = function (queryurl, callbackhandler) { $.ajax({ headers: { Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': 0 }, type: 'GET', url: queryurl, async: true, cache: false, complete: function (context, result) { var data = null; if (result.toLowerCase() == 'success') { try { data = $.parseJSON(context.responseText).d; } catch (e) { } } callbackhandler(data); } });//ajax } /* 简介:通过REST方式更新实体。 输入参数描述: updateurl:"/GH2011/XRMServices/2011/OrganizationData.svc/OpportunitySet(guid'{DA83B96B-DBAF-4F0C-A75D-7203F2502087}')" entity: 需要更新的对象,对象必须为JASON格式。 输出参数: 更新成功返回:true 更新失败返回:false */ RESTHelper.prototype.Update = function (updateurl, jsondata) { var isUpdated = false; $.ajax({ headers: { Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': jsondata.length, 'X-HTTP-Method': 'MERGE' }, type: 'POST', url: updateurl, async: false, cache: false, data: jsondata, complete: function (context, result) { if (result.toLowerCase() == 'success') { isUpdated = true; } } });//ajax return isUpdated; } /* 简介:通过REST方式更新实体。 输入参数描述: updateurl:"/GH2011/XRMServices/2011/OrganizationData.svc/OpportunitySet(guid'{DA83B96B-DBAF-4F0C-A75D-7203F2502087}')" jsondata:需要进行Create操作的对象,必须进行json序列化。可以用JQuery自带的序列话工具进行序列化:$.ajax.parseJSON(data) callbackhandler: 该回调函数应该遵循如下格式: function callbackhandler(results) { if(results==false) { //调用失败 } else { //调用成功 } } 输出参数: 无 */ RESTHelper.prototype.UpdateAsync = function (updateurl, jsondata, callbackhandler) { $.ajax({ headers: { Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': jsondata.length, 'X-HTTP-Method': 'MERGE' }, type: 'POST', url: updateurl, async: true, cache: false, data: jsondata, complete: function (context, result) { var isUpdated = false; if (result.toLowerCase() == 'success') { isUpdated = true; } callbackhandler(isUpdated); } });//ajax } /* 简介:通过REST方式删除实体。 参数描述: deleteurl:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet(guid'{DA83B96B-DBAF-4F0C-A75D-7203F2502087}')" 返回类型: 删除成功返回:true 删除失败返回:false */ RESTHelper.prototype.Delete = function (deleteurl) { var isDeleted = false; $.ajax({ headers: { Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'X-HTTP-Method': 'DELETE' }, type: 'POST', url: deleteurl, async: false, cache: false, data: null, complete: function (context, result) { if (result.toLowerCase() == 'success') { isDeleted = true; } } });//ajax return isDeleted; } /* 简介:通过REST方式删除实体。 参数描述: deleteurl:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet(guid'{DA83B96B-DBAF-4F0C-A75D-7203F2502087}')" callbackhandler: 该回调函数应该遵循如下格式: function callbackhandler(results) { if(results==false) { //调用失败 } else { //调用成功 } } 输出参数: 无 */ RESTHelper.prototype.DeleteAsync = function (deleteurl, callbackhandler) { $.ajax({ headers: { Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'X-HTTP-Method': 'DELETE' }, type: 'POST', url: deleteurl, async: false, cache: false, data: null, complete: function (context, result) { var isDeleted = false; if (result.toLowerCase() == 'success') { isDeleted = true; } callbackhandler(isDeleted); } });//ajax }
TEST CASE
function Test_RESTHelper() { var Helper = new RESTHelper(); var isok; var id = ""; var entitySet="" //path var createurl = "/example/XRMServices/2011/OrganizationData.svc/"+entitySet; var updateurl = "/example/XRMServices/2011/OrganizationData.svc/"+entitySet+"(guid'"+id+"')"; var queryurl = "/example/XRMServices/2011/OrganizationData.svc/"+entitySet+"(guid'"+id+"')"; var querymultipleurl = "/example/XRMServices/2011/OrganizationData.svc/"+entitySet; var deleteurl = "/example/XRMServices/2011/OrganizationData.svc/"+entitySet+"(guid'"+id+"')"; //Create //sync var myAccount = new Object(); myAccount.new_name= "TestRESTHelper"; isok = Helper.Create(createurl, JSON.stringify(myAccount)); alert("Create:" + isok.toString()); //async var myAccount = new Object(); myAccount.new_name = "TestRESTHelper"; isok = Helper.CreateAsync(createurl, JSON.stringify(myAccount), CreateCompleteHandler); //Update //sync myAccount = new Object(); myAccount.new_name = "new_TestRESTHelper"; isok = Helper.UpdateAsync(updateurl, JSON.stringify(myAccount)); alert("update:" + isok.toString()); //async myAccount = new Object(); myAccount.new_name = "new_TestRESTHelper"; isok = Helper.UpdateAsync(updateurl, JSON.stringify(myAccount), UpdateCompleteHandler); //Read //获取单条记录 //sync var data = Helper.Read(queryurl); alert(data.new_name); //async var data = Helper.ReadAsync(queryurl, QueryCompleteHandler); //获取多记录 //sync var data = Helper.ReadAsync(querymultipleurl); var result = ""; var tmp; for (tmp in data.results) { result += data.results[tmp].new_name+ "\n"; } alert(result); //async var data = Helper.ReadAsync(querymultipleurl, MultipleQueryCompleteHandler); //Delete //sync isok = Helper.DeleteAsync(deleteurl); alert("Delete:" + isok.toString()); //async isok = Helper.DeleteAsync(deleteurl, DeleteCompleteHandler); } function CreateCompleteHandler(results,entity) { alert('create:' + results.toString()); } function UpdateCompleteHandler(results) { alert('update:' + results.toString()); } function DeleteCompleteHandler(results) { alert('delete:' + results.toString()); } function QueryCompleteHandler(results) { if (results != null) { alert(results.new_name); } else { alert('fault'); } } function MultipleQueryCompleteHandler(results) { if (results != null) { alert(results.results[0].new_name); } else { alert('fault'); } }
注意
在Dynamics CRM 2011环境中使用该辅助类需要先引用JQuery类库