Microsoft Dynamics CRM 365异步通过JavaScript调用操作
问题描述:
有没有一种方法可以在不使用第三方脚本的情况下通过javascript调用操作?Microsoft Dynamics CRM 365异步通过JavaScript调用操作
我发现这个https://github.com/PaulNieuwelaar/processjs
但是,我不能使用第三方库。
在此先感谢。
UPDATE:
下面是一个说明对通过JavaScript的动作的异步调用一些示例代码。需要记住的重要一点是将请求的打开方法的最后一个参数设置为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 to execute custom Action。这是包装在XMLHttpRequest
&可以被称为异步。
/api/data/v8.2/Action_Name
对于异步运行:
req.open(....., true);
同样使用soap call(不推荐)。
Processjs
使用Organization.svc/web
这将被弃用。
我已经注意到它实际上是在同步执行,并用一个等待20秒的伪插件验证了这一点,并在调用动作之前和之后以及动作的回调中打印了控制台消息。将上传代码。这里是一篇文章,也打电话是同步 - http://blogs.microsoft.co.il/rdt/2016/01/13/executing-custom-action-via-javascript/ 仍然检查其他信息在线。有任何想法吗? – noobie
req.open(.....,false)是同步的。试试异步 –
辉煌!有效。谢谢你的帮助。我会用其他人的代码更新我的问题。 – noobie