天天看點

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類庫

繼續閱讀