Dynamics CRM2016 通过web api来调用自定义action

WebAPI调用Action实战

      action操作很早就已出现,今天要分享的是通过web api来调用action,该功能在online版本中非常有用,可以将js中复杂的逻辑操作放在处理能力更强的后端来做。

    首先咱们先简单的新建一个action,实体设置上可以设置为全局的,也可以单独设定某个实体,我这边的demo用的是案例实体


    设置好后确定跳转到下一页,这一页需要设置唯一名称(后面调用代码中会用到),简单设置了两个输入参数一个输出参数,在步骤设置里我不做任何添加,设置完后保存并激活。


    新建一个plugin项目,添加如下代码,代码非常简单,获取输入参数,计算后输出

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk;

namespace Action
{
    public class Class1 : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService
            (typeof(IPluginExecutionContext));

            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider
            .GetService(typeof(IOrganizationServiceFactory));


            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            EntityReference entityRef = context.InputParameters["Target"] as EntityReference;


            Money money1 = context.InputParameters["Money1"] as Money;
            Money money2 = context.InputParameters["Money2"] as Money;

            Money sum = new Money(money1.Value + money2.Value);


            context.OutputParameters["MoneySum"] = sum;
        }
    }
}


   下面来注册该action,方法同插件注册,在注册step时message选择我们的action的唯一名称,很多人在这一步的message里不显示action的名字,确保两点:第一你的action激活了,第二你的插件注册器是在你激活action后再打开的(如果不是,请关闭插件注册工具重新打开下即可,刷新没用,乖乖的关闭再打开)。



    注册完后就是最后的js中调用了,注意request的url最后的写法Microsoft.Dynamics.CRM.【action唯一名称

  var entity = new Object();
      entity["Money1"] = 1;
      entity["Money2"] = 2;
var req = new XMLHttpRequest()
req.open("post", "http://121.40.75.24:5555/Origin/api/data/v8.0/incidents(03AE5852-6EFA-E511-9417-E2BFEC45B344)
                  /Microsoft.Dynamics.CRM.new_testaction", false);
    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) {
            if (this.status == 200) {
               var result=JSON.parse(this.responseText);
            }
            else {
                
            }
        }
    };
    req.send(JSON.stringify(entity));



    最后来看下输出结果



    在on-premises的开发中我们往往把复杂的业务处理逻辑封装成接口供前端js调用,但在online的开发中这样的开发方式无疑增加了成本(需另外架设服务器,添置域名,配置https协议证书等),web api调用action给我们提供了新的可行的方式。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值