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类库
           

 

你可能感兴趣的:(dynamic)