Dynamics 365 for Sales: Web API Client编程辅助类

Posted Jeff Xiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dynamics 365 for Sales: Web API Client编程辅助类相关的知识,希望对你有一定的参考价值。

最近博主写了一个Web API Client端的编程辅助类,我们可以用它在客户端层面调用Web API 完成CRUD操作。辅助类的Ajax请求是基于Jquery完成的,也就是说,大家在使用这个类的时候需要引用JQUERY,具体情况如下图所示:


JSHelper

var WEB_API_VERSION = "8.1";
var JQUERY_URL = "/WebResources/new_jquery.1.11.js";

function XrmHelper()

     var _clientUrl = Xrm.Page.context.getClientUrl();
     this._webApiUrl = _clientUrl + "/api/data/v" + WEB_API_VERSION + "/";




XrmHelper.prototype.Create = function (url, content) 

    var data = null;
    

    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': content != null ? content.length : 0 ,
        type: "POST",
        url: url.indexOf("http") == -1 ? this._webApiUrl + url : url,
        async: false,
        cache: false,
        data:content,
        complete: function (context) 
            if (context.status>=200 && context.status<300) 
                try 
                    data = context.getResponseHeader("OData-EntityId");
                 catch (e)  
            
        
    );//ajax
    return data;

;

XrmHelper.prototype.CreateAsync = function (url, content, callbackHandler) 



    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': content != null ? content.length : 0 ,
        type: "POST",
        url: url.indexOf("http") == -1 ? this._webApiUrl + url : url,
        async: false,
        cache: false,
        data: content,
        complete: function (context,result) 
            if (context.status >= 200 && context.status < 300) 
                try 
                    //data = $.parseJSON(context.responseText).d;
                    callbackHandler(context.getResponseHeader("OData-EntityId"));
                 catch (e)  
            
        
    );//ajax


;

XrmHelper.prototype.Read = function (url) 

    var data = null;

    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8',
        type: "GET",
        url: url.indexOf("http")==-1? this._webApiUrl + url:url,
        async: false,
        cache: true,
        complete: function (context, result) 
            if (context.status >= 200 && context.status < 300) 
                try 
                    data = context.responseJSON;
                 catch (e)  
            
        
    );//ajax
    return data;

;

XrmHelper.prototype.ReadAsync = function (url, callbackHandler) 



    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8',
        type: "GET",
        url: url.indexOf("http") == -1 ? this._webApiUrl + url : url,
        async: false,
        cache: true,
        complete: function (context, result) 
            if (context.status >= 200 && context.status < 300) 
                try 
                    //data = $.parseJSON(context.responseText).d;
                    callbackHandler(context.responseJSON);
                 catch (e)  
            
        
    );//ajax


;

XrmHelper.prototype.Update = function (url, content) 

    var data = null;

    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': content != null ? content.length : 0 ,
        type: "PATCH",
        url: url.indexOf("http") == -1 ? this._webApiUrl + url : url,
        async: false,
        cache: false,
        data:content,
        complete: function (context, result) 
            if (context.status >= 200 && context.status < 300) 
                try 
                    data = result;
                 catch (e)  
            
        
    );//ajax
    return data;

;

XrmHelper.prototype.UpdateAsync = function (url, content, callbackHandler) 



    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': content != null ? content.length : 0 ,
        type: "PATCH",
        url: url.indexOf("http") == -1 ? this._webApiUrl + url : url,
        async: false,
        cache: false,
        data:content,
        complete: function (context, result) 
            if (context.status >= 200 && context.status < 300) 
                try 
                    
                    callbackHandler(result);
                 catch (e)  
            
        
    );//ajax


;

XrmHelper.prototype.Delete = function (url) 

    var data = false;

    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8',
        type: "DELETE",
        url: url.indexOf("http") == -1 ? this._webApiUrl + url : url,
        async: false,
        cache: false,
        complete: function (context, result) 
            if (context.status >= 200 && context.status < 300) 
                try 
                    data = true;
                 catch (e)  
            
        
    );//ajax
    return data;

;

XrmHelper.prototype.DeleteAsync = function (url, callbackHandler) 


    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8' ,
        type: "DELETE",
        url: url.indexOf("http") == -1 ? this._webApiUrl + url : url,
        async: false,
        cache: false,
        complete: function (context, result) 
            if (context.status >= 200 && context.status < 300) 
                try 
                    callbackHandler(true);
                
                catch (e)  
            
            else 
                callbackHandler(false);
            
        
    );//ajax

;

XrmHelper.prototype.ExecuteAPI = function (method,url, content) 

    var data = null;

    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': content != null ? content.length : 0 ,
        type: method,
        url: url.indexOf("http") == -1 ? this._webApiUrl + url : url,
        async: false,
        cache: false,
        data:content,
        complete: function (context, result) 
            if (context.status >= 200 && context.status < 300) 
                try 
                   
                    if (context.responseJSON != null) 
                        data = context.responseJSON;
                    
                    else
                        data=result;
                    

                 catch (e)  
            
        
    );//ajax
    return data;

;

XrmHelper.prototype.ExecuteAPIAsync = function (method,url, content, callbackHandler) 



    $.ajax(
        headers:  Accept: 'application/json', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': content != null ? content.length : 0 ,
        type: method,
        url: url.indexOf("http") == -1 ? this._webApiUrl + url : url,
        async: false,
        cache: false,
        data:content,
        complete: function (context, result) 
            if (context.status >= 200 && context.status < 300) 
                try 
                    var data = null;
                    if (context.responseJSON != null) 
                        data = context.responseJSON;
                    
                    else 
                        data = result;
                    

                    callbackHandler(data);
                 catch (e)  
            
        
    );//ajax


;



Unit Test 代码

function xrmHelperUT() 
    debugger;
    //alert('onload');
    var xrmHelper = new XrmHelper();



    //test code
    xrmHelper.Create("contacts",  "firstname": "hello", "lastname": "webapi" );


    //create account
    var entityUrl = xrmHelper.Create("accounts", "'name':'create test account sync'");
    console.log(entityUrl + "create sync\\n");
    
    var entityAsyncUrl = null;
    xrmHelper.CreateAsync("accounts", "'name':'create test account async'", function (result) 
        entityAsyncUrl = result;
        console.log(result+ "create async\\n")
    );

    //read account
    var createdAcc = xrmHelper.Read(entityUrl);
    console.log(createdAcc.name+" Read \\n");

    var createdAccAsync = null;
    xrmHelper.ReadAsync(entityAsyncUrl, function (result) 
       
        console.log(result.name + " Read Async\\n");
    );



    //update account
    var uptsyncObj = " 'telephone1': '15000303158' ";
 
    xrmHelper.Update(entityUrl, uptsyncObj);
    console.log("update\\n");


    var uptAsyncObj = " 'telephone1': '15000303155' ";
    
    
    xrmHelper.UpdateAsync(entityAsyncUrl, uptAsyncObj, function (c, r) 
        console.log("update async\\n");
    )


    //delete account
    var isDeleted=xrmHelper.Delete(entityUrl);
    console.log("delete "+isDeleted+" \\n");

    xrmHelper.DeleteAsync(entityAsyncUrl, function (isDeleted) 
        console.log("delete " + isDeleted + " \\n");
    )


    //execute API
    //who am I
    var userInfo=xrmHelper.ExecuteAPI("GET", "WhoAmI()", null);

    xrmHelper.ExecuteAPIAsync("GET", "WhoAmI()", null, function (r) 
        if (r != null)
        
            console.log(r.UserId);
        
    );



以上是关于Dynamics 365 for Sales: Web API Client编程辅助类的主要内容,如果未能解决你的问题,请参考以下文章

Dynamics 365 for Sales: Email Engagement

Dynamics 365 for Sales: 门户的集成配置

Dynamics 365 for Sales: Web API Client编程辅助类

Dynamics 365 App for Outlook 与 Dynamics 365 for Outlook(已被弃用)

Dynamics 365 Online-Unified User Interface

Dynamics 365Online Lookup查找字段多选