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

Dynamics CRM 2011 编程系列 (8):JS编程之实体CRUD辅助类

2012-03-07 21:58 525 查看
用JS开发Dynamics CRM功能需要十分的小心,往往一个拼写错误就能让你调试一个上午。在经历了若干天的痛苦后,我重新祭起了代码重用这面大旗。下面分享一个我***的辅助类,希望能帮到大家!
修改记录:
多谢健东同学的提醒,这个helper方法里面的create和update方法使用的ajax组件与read,delete方法不一致的问题。检查之后发现确实存在这个笔误,现更正之。顺便说下这两个对象的根本区别:ActiveXObject("Msxml2.XMLHTTP")对象仅被IE支持,XMLHttpRequest对象可以支持所有的浏览器。

类代码:

/*
     作者:GhostBear   
     博客: http://blog.csdn.net/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 xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", createurl, false);
    xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    xmlhttp.setRequestHeader("Content-Length", jsondata.length);
    xmlhttp.setRequestHeader("Accept", "application/json");
    xmlhttp.send(jsondata);
    
    if (xmlhttp.readyState == 4) {
    if (xmlhttp.status == 201) {
        return true;

    }
    else {
        return false;
    }
  }//if
}

/*

   方法简介:通过REST对Dynamics CRM 中的实体进行Read操作。
   输入参数:
        parameter:调用Dynamics CRM数据服务的URL字符串。例如:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet(guid'{B75B220A-D2A4-48F4-8002-D8B564A866EA}')"
   输出参数:
        Object:获得了返回值
        Null:查询失败。
*/
RESTHelper.prototype.Read = function (queryurl) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", queryurl, false);
    xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    xmlhttp.setRequestHeader("Content-Length", 0);
    xmlhttp.setRequestHeader("Accept", "application/json");
    xmlhttp.send(null);

    if (xmlhttp.readyState == 4) {
    if (xmlhttp.status == 200) {
        return  window.JSON.parse(xmlhttp.responseText).d;
        
    }
    else {
        return null;
    }
    }
}

/*
简介:通过REST方式更新实体。
输入参数描述:
    updateurl:"/GH2011/XRMServices/2011/OrganizationData.svc/OpportunitySet(guid'{DA83B96B-DBAF-4F0C-A75D-7203F2502087}')"
    entity:    需要更新的对象,对象必须为JASON格式。
输出参数:
    更新成功返回:true
    更新失败返回:false
*/
RESTHelper.prototype.Update = function (updateurl, entity) {
    var uptXmlHttpReq = new XMLHttpRequest();
    uptXmlHttpReq.open("POST", updateurl, false);
    uptXmlHttpReq.setRequestHeader("Accept", "application/json");
    uptXmlHttpReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    uptXmlHttpReq.setRequestHeader("X-HTTP-Method", "MERGE");

    uptXmlHttpReq.send(entity);

    if (uptXmlHttpReq.readyState == 4) {
        if (uptXmlHttpReq.status == 204 || uptXmlHttpReq.status == 1223) {
            return true;
        }
        else {
            return false;
        }
    }

}

/*
简介:通过REST方式删除实体。
参数描述:
    deleteurl:"/GH2011/XRMServices/2011/OrganizationData.svc/ContactSet(guid'{DA83B96B-DBAF-4F0C-A75D-7203F2502087}')"
返回类型:
    删除成功返回:true
    删除失败返回:false
*/
RESTHelper.prototype.Delete = function (deleteurl) {
    var uptXmlHttpReq = new XMLHttpRequest();
    uptXmlHttpReq.open("POST", deleteurl, false); //第三个参数表示是否已异步的方式发起请求
    uptXmlHttpReq.setRequestHeader("Accept", "application/json");
    uptXmlHttpReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    uptXmlHttpReq.setRequestHeader("X-HTTP-Method", "DELETE");

    uptXmlHttpReq.send(null);

    if (uptXmlHttpReq.readyState == 4) {
        if (uptXmlHttpReq.status == 204 || uptXmlHttpReq.status == 1223) {
            return true;
        }
        else {
            return false;
        }
    }

}


调用代码(使用说明)

function Test_RESTHelper()
{
     var Helper=new RESTHelper();
     var isok;

      //Create
     var createurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet";
     var myAccount=new Object();
     myAccount.Name="TestRESTHelper";
     isok=Helper.Create(createurl,JSON.stringify(myAccount));
     alert("Create:"+isok.toString());

      //Update
      var updateurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet(guid'A972039B-5268-E111-8668-000C292C54BE')";
      myAccount=new Object();
      myAccount.Name="new_TestRESTHelper";
      isok=Helper.Update(updateurl,JSON.stringify(myAccount));
      alert("update:"+isok.toString());

      //Read
      //获取单条记录
    var queryurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet(guid'182752ee-5868-e111-8668-000c292c54be')";
      var data=Helper.Read(queryurl);
      alert(data.Name);

      //获取多记录
      var queryurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet";
      var data=Helper.Read(queryurl);
      var result="";
      var tmp;
      for(tmp in data.results)
      {
          result+=data.results[tmp].Name+"\n";
      }
      alert(result);

     //Delete
     var deleteurl="/gh2011/XRMServices/2011/OrganizationData.svc/AccountSet(guid'A972039B-5268-E111-8668-000C292C54BE')";
     isok=Helper.Delete(deleteurl);
     alert("Delete:"+isok.toString());

}



小结

CRUD中的4个方法,除了Read方法外,其他的方法都返回布尔值,操作成功返回true。Read方法返回的结果会有2种形式:单一对象;一个数组。读取的时候注意格式就ok啦。

代码下载

JSON序列化脚本下载

本章代码下载













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