zoukankan      html  css  js  c++  java
  • 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+ "
    ";
            }
            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类库
               

  • 相关阅读:
    网站优化,dns预解析,解析缓存
    dos命名重启或关闭远程服务器
    IIS 常见问题集记录
    EF 基础提供程序在 Open 上失败
    flexbox学习
    svn post-commit 同步
    备份
    log4net 2.0.4有问题,AdoNetAppender会报错
    signalr 配置错误跟踪
    Facebook的Web开发三板斧:React.js、Relay和GraphQL
  • 原文地址:https://www.cnblogs.com/james1207/p/3271111.html
Copyright © 2011-2022 走看看