簡體   English   中英

Microsoft Dynamics CRM 365通過JavaScript異步調用操作

[英]Microsoft Dynamics CRM 365 calling an action via JavaScript asynchronously

有沒有辦法在不使用第三方腳本的情況下通過javascript調用動作?

我發現了這個https://github.com/PaulNieuwelaar/processjs

但是,我不能使用第三方庫。

更新:

這是一些示例代碼,演示了如何通過JavaScript異步調用某個動作。 要記住的重要一點是將請求的open方法的最后一個參數設為true

req.open(consts.method.post, oDataEndPoint, true);

// 插入

   public class RunAsync : CodeActivity
    {
        [Input("input")]
        public InArgument<string> Input { get; set; }

        [Output("output")]
        public OutArgument<string> Output { get; set; }

        protected override void Execute(CodeActivityContext executionContext)
        {
            try
            {
                Thread.Sleep(20000);
                Output.Set(executionContext, $"Result:{Input.Get(executionContext)}");                
            }
            catch (Exception e)
            {
                throw new InvalidPluginExecutionException(e.Message);
            }
        }
    }

// JavaScript

function callAction(actionName, actionParams, callback) {

    var result = null;
    var oDataEndPoint = encodeURI(window.Xrm.Page.context.getClientUrl() + consts.queryStandard + actionName);

    var req = new XMLHttpRequest();
    req.open(consts.method.post, oDataEndPoint, true);
    req.setRequestHeader(consts.odataHeader.accept, consts.odataHeader.applicationJson);
    req.setRequestHeader(consts.odataHeader.contentType, consts.odataHeader.applicationJson + ";" + consts.odataHeader.charset_utf8);
    req.setRequestHeader(consts.odataHeader.odataMaxVersion, consts.odataHeader.version);
    req.setRequestHeader(consts.odataHeader.odataVersion, consts.odataHeader.version);
    req.onreadystatechange = function () {
        if (req.readyState === 4) {
            req.onreadystatechange = null;
            if (req.status === 200) {
                if (callback) {
                    result = JSON.parse(this.response);
                    callback(result);
                }
            } else {
                console.log(JSON.parse(this.response).error);
            }
        }
    };
    req.send(JSON.stringify(actionParams));
}

function onLoad() {

    console.log('call action...');

    var actionParams = {
        Input: 'test1234'                            
    };

    callAction('TestAsyncAction',actionParams, function(data){              
        console.log('action callback triggered...');
        console.log(JSON.stringify(data));
    });

    console.log('action called...');    
}

//動作

在此處輸入圖片說明

您可以使用webapi執行自定義Action 它包裝在XMLHttpRequest ,可以稱為異步的。

/api/data/v8.2/Action_Name

對於異步運行:

req.open(....., true);

使用肥皂調用也一樣 (不推薦)。

Processjs使用將不推薦使用的Organization.svc/web

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM