今天给大家分享一个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类库

Dynamics CRM 2011编程系列(60):JS编程之CRUD辅助类(JQuery版)的更多相关文章

  1. Dynamices CRM JS 类库 神器 XrmServiceToolkit - A Microsoft Dynamics CRM 2011 & CRM 2013 JavaScript Library

    XrmServiceToolkit - A Microsoft Dynamics CRM 2011 & CRM 2013 JavaScript Library http://xrmservic ...

  2. Microsoft Dynamics CRM4.0 和 Microsoft Dynamics CRM 2011 JScript 方法对比

    CRM 2011 如果需要再IE里面调试,可以按F12在前面加上contentIFrame,比如 contentIFrame.document.getElementById("字段" ...

  3. Microsoft Dynamics CRM 2011 安装完全教程

    作者:卞功鑫,转载请保留.http://www.cnblogs.com/BinBinGo/p/4302612.html 环境介绍 WINDOWS 2008 R2 Datacenter Microsof ...

  4. Dynamics CRM 2011 WebResources

    Type Limitation Capabilities Usage Images JPG,   PNG, GIF, ICO Custom entity icons Icons for custom ...

  5. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  6. How to control PrincipalObjectAccess table growth in Microsoft Dynamics CRM 2011

    https://support.microsoft.com/en-us/kb/2664150 How to control PrincipalObjectAccess table growth in ...

  7. Dynamics CRM 2011 权限管理(转)

    http://www.cnblogs.com/LeoTang/p/3344265.html Dynamics CRM 2011 权限管理 CRM系统基于角色的权限主要通过部门.角色.用户.团队来 进行 ...

  8. Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法(转)

    本篇文章,介绍Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法. RetreiveMultiple方法,用于获取实体的多个实例,该方法的签名如下 ...

  9. Error message “Assembly must be registered in isolation” when registering Plugins in Microsoft Dynamics CRM 2011 2013 解决办法

    Error message “Assembly must be registered in isolation” when registering Plugins in Microsoft Dynam ...

随机推荐

  1. WTL的核心机制

    WTL背景介绍 WTL是微软ATL开发组成员Nenad Stefanovic先生在ATL Windowing机制上发展起来的一整套GUI框架,运用template技术组织和创建GUI对象,构筑了精致的 ...

  2. jquery ajax获取和解析数据

    最近项目中用到了ajax技术,之前虽然写过一点点,但是没有系统的总结过.趁着刚刚用过,手热就记录一下,方便以后查阅. $.ajax中的参数 $.ajax的函数格式: $.ajax({ type: 'P ...

  3. 不安装oracle客户端,连接到服务器的oracle (注:针对 odp.net)

    前几天在研究怎样不安装oracle客户端去访问oracle,并把里面的数据同步到本地的Sql Server数据库中. 准备工作:首先你得有如下.dll,我这个是针对oracle10g的,如果是更高的版 ...

  4. SQL打印全年日历

    数据库环境:SQL SERVER 2008R2 我之前有写过打印本月日历的SQL,里头有详细的说明.具体请参考前面的博文——生成本月日历. 全年日历只是在本月日历的基础上加了月信息,并按月份分组求得. ...

  5. web应用程序servlet的映射名称的规则及请求过程

    首先用MyEclipse创建一个web Project(工程名起为TestServletProject),新建一个Servlet(这里servlet的名字起TestServlet),将请求的servl ...

  6. JavaScript Ajax + Promise

    AJAX 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: function success(text) { var textarea = document.getElementBy ...

  7. StandardServiceRegistryBuilder

    org.hibernate.boot.registry.StandardServiceRegistryBuilderhibernate4.3 Configuration cfg = new Confi ...

  8. div模块变灰

    整站变灰目前没发现什么特别好的办法,但是div(或者其他标签模块)模块变灰方法兼容性还不错. .gay_box{ filter: grayscale(100%); -webkit-filter: gr ...

  9. PHP实现中文字串截取无乱码的方法

    直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半.解决办法: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. ...

  10. DEDECMS 猜你喜欢

      dede升级了5.7后,有个地方要求调用相关文章,于是写下  dede:likeart  标签却无法实现关联,显示的则是所有文章. 发现原来从5.5版开始已经替换了该标签,把模板中 likeart ...