今天給大家分享一個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類庫