您的位置:首页 > Web前端 > JQuery

Dynamics CRM 2011编程系列(60):JS编程之CRUD辅助类(JQuery版)

2013-08-20 16:32 190 查看
今天给大家分享一个JQuery版的REST辅助类,在一年前我分享过一个只能在IE环境下运行的REST辅助类:《JS编程之实体CRUD辅助类 》。为什么要推出JQuery版的CRUD辅助类呢? 原因有三:其一为Dynamics CRM兼容多种浏览器已经成为了一个不争的事实;其二为JQuery在Dynamics CRM 2013中已经被原生支持;其三为可以省去对json.js文件的引用。
新版本的辅助类还添加了4个CRUD的异步方法,这样咱们的这个辅助类就同时支持异步和同步的CRUD操作啦,该辅助类的代码如下:

Update History

2014/5/28 增加Execute 和 ExecuteAsync 方法。

SOURCE CODE

/*
     作者:GhostBear   
     博客: http://blog.csdn.net/ghostbear 
     简介:REST中的CRUD操作辅助脚本。
*/

function RESTHelper() { }
function SOAPHelper() { }

/*
   方法简介:通过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/soap+xml; 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
}

/*
   方法简介:执行Organization Service 的消息。
   输入参数:
        orgUrl:调用Dynamics CRM数据服务的URL字符串。例如:"/GH2011/XRMServices/2011/Organization.svc"
        msg:soap message
   输出参数:
        true:Execute成功。
        false:Execute失败。

*/
SOAPHelper.prototype.Execute = function (orgUrl, msg) {
    var isCreated = false;
    $.ajax({
        headers: {
            Accept: 'application/xml, text/xml, */*',
            'Content-Type': 'application/soap+xml; charset=utf-8',
            'SOAPAction': 'http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute'
        },
        type: 'POST',
        url: orgUrl,
        async: false,
        cache: false,
        data: msg,
        complete: function (context, result) {
            if (result.toLowerCase() == 'success') {
                isCreated = true;
            }
        }
    });//ajax
    return isCreated;
}

/*
   方法简介:异步执行Organization Service 的消息。
   输入参数:
        orgUrl:调用Dynamics CRM数据服务的URL字符串。例如:"/GH2011/XRMServices/2011/Organization.svc"
        msg:soap message
        callbackhandler: 该回调函数应该遵循如下格式:
              function callbackhandler(results,context)
              {
                  if(results==false)
                  {
                      //调用失败
                  }
                  else
                  {
                      //调用成功
                  }
              }
   输出参数:
        无

*/
SOAPHelper.prototype.ExecuteAsync = function (orgUrl, msg, callbackhandler) {
    $.ajax({
        headers: {
            Accept: 'application/xml, text/xml, */*',
            'Content-Type': 'text/xml; charset=utf-8',
            'SOAPAction': 'http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute'
        },
        type: 'POST',
        url: orgUrl,
        async: true,
        cache: false,
        data: msg,
        complete: function (context, result) {
            var isSuccess = false;
            var entity = null;
            if (result.toLowerCase() == 'success') {
                isSuccess = true;
               
            }
            callbackhandler(isSuccess, context.responseText);
        }
    });//ajax
}



TEST CASE

[code]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');
}
}

var msg="<s:Envelope xmlns:s=\"[url=http://schemas.xmlsoap.org/soap/envelope/\'>Target 在Dynamics CRM 2011环境中使用该辅助类需要先引用JQuery类库


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐