Dynamics 365中使用JavaScript和C#调用操作示例

Posted luoyong0201

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dynamics 365中使用JavaScript和C#调用操作示例相关的知识,希望对你有一定的参考价值。

微软动态CRM专家罗勇 ,回复334或者20190509可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

Action (操作)是流程的一种,可以在工作流中调用,可以使用javascript和C#代码方便的调用,用的好是个很不错的东西。

怎么创建Action请参考官方文档:Create your own actions ,或者我以前的博文也不错。

假设操作的名称为new_InvokeOrderApitoCreateReturnPartsAction,是一个绑定到实体new_returnreq的操作,包括一个类型string的输入参数OrderNumber,没有输出参数:

下面是JavaScript调用示例:

var params = {};
params.OrderNumber = "4318009670";
var req = new XMLHttpRequest();
var clientUrl = Xrm.Utility.getGlobalContext().getClientUrl();
req.open("POST", encodeURI(clientUrl + "/api/data/v9.1/new_returnreqs(e95e8829-c370-e911-a82b-000d3a365fc2)/Microsoft.Dynamics.CRM.new_InvokeOrderApitoCreateReturnPartsAction"), true);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
    if (this.readyState == 4) {
        req.onreadystatechange = null;
        if (this.status == 200) {
            var alertStrings = { text: "调用操作成功!" };
            var alertOptions = { height: 120, width: 160 };
            Xrm.Navigation.openAlertDialog(alertStrings, alertOptions).then(
                function success() { },
                function () { }
            );
        }
        else {
            var error = JSON.parse(this.response).error;
            Xrm.Navigation.openErrorDialog({ message: error.message }).then(
                function () {
                },
                function () {
                });
        }
    }
};
req.send(JSON.stringify(params));

 

如果你的Action有复杂的参数类型,可以参考我的博文:通过Web API调用Action时各种类型输入参数传递值的方法 

下面是C#代码调用示例:

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Tooling.Connector;
using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            CrmServiceClient crmSvc = new CrmServiceClient(@"AuthType=Office365;Url=https://luoyongdemo.api.crm.dynamics.com;[email protected];Password=pppsssss");
            if (!crmSvc.IsReady)
            {
                throw new Exception("Crm Service is not ready!" + crmSvc.LastCrmError + crmSvc.LastCrmException.Message);
            }
            OrganizationRequest orgReq = new OrganizationRequest("new_InvokeOrderApitoCreateReturnPartsAction");
            orgReq["OrderNumber"] = "4318009670";
            orgReq["Target"] = new EntityReference("new_returnreq", Guid.Parse("e95e8829-c370-e911-a82b-000d3a365fc2"));
            OrganizationResponse response = crmSvc.Execute(orgReq);
            Console.WriteLine("程序执行完成,按任意键退出...");
            Console.ReadKey();
        }
    }
}

 

如果创建的是全局的Action,现在Dynamcis 365 Customer Engagement从 9.0版本开始有新的简便调用方法了,就是 invokeProcessAction (Client API reference)

虽然官方文档没有明说仅仅支持全局Action,从我测试结果来看是仅仅支持全局Action,或许也有可能我不知道怎么调用绑定Action吧。

var params = {};
params.OrderNumber = "4318009670";
Xrm.Utility.invokeProcessAction("new_GlobalAction", params).then(
    function () {
        var alertStrings = { text: "调用全局操作成功!"};
        var alertOptions = { height: 120, width: 160 };
        Xrm.Navigation.openAlertDialog(alertStrings, alertOptions).then(
            function success() { },
            function () { }
        );
    },
    function () {
        Xrm.Navigation.openErrorDialog({ message: "调用全局操作失败!" }).then(
            function () {
            },
            function () {
            });
    });

 

以上是关于Dynamics 365中使用JavaScript和C#调用操作示例的主要内容,如果未能解决你的问题,请参考以下文章

Dynamics 365 无需频繁发布来开发和调试Javascript

Dynamics 365 无需频繁发布来开发和调试Javascript

自定义适用于手机和平板电脑的 Dynamics 365:窗体脚本

Dynamics 365中邮件模板的使用

Dynamics 365中Customer类型字段的使用

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