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

时间:2022-11-09 00:14:37

    用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序列化脚本下载

 

本章代码下载