Microsoft Dynamics CRM 365通过JavaScript异步调用未绑定的操作

Microsoft Dynamics CRM 365 calling an unbounded action via JavaScript asynchronously(Microsoft Dynamics CRM 365通过JavaScript异步调用未绑定的操作)
本文介绍了Microsoft Dynamics CRM 365通过JavaScript异步调用未绑定的操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以在不使用第三方脚本的情况下通过javascript调用操作?

我找到了这个https://github.com/PaulNieuwelaar/processjs

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

更新:

下面是一些示例代码,它演示了通过JavaScript异步调用操作。需要记住的重要一点是使请求的open方法的最后一个参数为真

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 to execute custom Action。这被包装在XMLHttpRequest中&;可以称为异步。

/api/data/v8.2/Action_Name

对于异步运行:

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

使用soap call也是如此(不推荐)。

Processjs使用将被弃用的Organization.svc/web

这篇关于Microsoft Dynamics CRM 365通过JavaScript异步调用未绑定的操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)